Changeset 3455 in Sophya
- Timestamp:
- Feb 9, 2008, 7:26:38 PM (18 years ago)
- Location:
- trunk/SophyaPI/PI
- Files:
-
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/SophyaPI/PI/parradapter.cc
r3292 r3455 8 8 // #include "ctimer.h" Pour mesure TCPU 9 9 #include "sopnamsp.h" 10 #include "nbtri.h" 10 11 #include "parradapter.h" 11 12 … … 376 377 } 377 378 379 /* --Methode-- */ 380 int P2DArrayAdapter::ComputeLut_Range(double& min, double& max, double fracmin, double fracmax, int vit,int nmax) 381 // Compute min and max by throwing away the "fracmin" lowest values and the "fracmax" greatest values 382 // Use 1 value over "vit". Maximum number values to be used is "nmax". 383 // Si echec alors min,max restent inchanges. 384 { 385 if(fracmin<0. || fracmin>=1.) fracmin=0.; 386 if(fracmax<0. || fracmin>=1.) fracmax=0.; 387 if (vit<1) vit = 1; 388 if(nmax<10) nmax = 10000; 389 390 if (sX*sY/vit < 1000) vit = sX*sY/1000; // need enough values 391 if (vit<1) vit = 1; 392 if (sX*sY/vit > nmax) vit = sX*sY/nmax; // but not too much ! 393 if (vit<1) vit = 1; 394 395 double *buff = new double[nmax]; 396 397 int n=0, nfill=0; 398 for(int j=0;j<sY;j++) for(int i=0;i<sX;i++) { 399 if(nfill>=nmax) continue; 400 if((n++)%vit==0) buff[nfill++] = Value(i,j); 401 } 402 403 if(nfill<1) {delete [] buff; return nfill;} 404 405 qsort(buff,(size_t) nfill,sizeof(double),qSort_Dble); 406 407 int i1 = int(nfill*fracmin); if(i1<0) i1=0; 408 int i2 = int(nfill*(1.-fracmax)); if(i2>=nfill) i2=nfill-1; 409 if(i2<=i1) {i1=0; i2=nfill-1;} 410 if(buff[i1]<buff[i2]) {min=buff[i1]; max=buff[i2];} 411 412 //printf("DEBUG (%d,%g,%g,%d,%d) nfill=%d [0]=%g [n]=%g min=[%d]=%g max=[%d]=%g\n" 413 // ,sX*sY,fracmin,fracmax,vit,nmax,nfill,buff[0],buff[nfill-1],i1,min,i2,max); fflush(stdout); 414 415 delete [] buff; 416 return(nfill); 417 } 378 418 379 419 /* --Methode-- */ -
trunk/SophyaPI/PI/parradapter.h
r3292 r3455 85 85 virtual void ComputeLut_PicHisto(double& min, double& max, bool htail, 86 86 double nbsig=1., double fracmax=0.95); 87 // Calcul stable Range 88 virtual int ComputeLut_Range(double& min,double& max,double fracmin=0.,double fracmax=0.,int vit=10,int nmax=10000); 87 89 88 90 // Calcul pixmap avec un LUT -
trunk/SophyaPI/PI/piimage.cc
r3304 r3455 457 457 if (min >= max) img->CheckDyn(min, max, moy, sig, nbnul, nbsat); 458 458 break; 459 case AutoLut_Range : 460 img->ComputeLut_Range(min, max, nsa/2., nsa/2., 1, 5000); 461 break; 459 462 case AutoLut_MinMax : 460 463 min = 1.; max = -1.; … … 462 465 if (max <= min) max = min+0.1*fabs(min); 463 466 if ((nsa <= 0.)||(nsa > 1.)) nsa = 1.; 464 dmx = ( nsa-1.)*(max-min);465 min = min+dmx ; max = max-dmx;467 dmx = (1.-nsa)*(max-min); 468 min = min+dmx/2.; max = max-dmx/2.; 466 469 break; 467 470 case AutoLut_MeanSigma : -
trunk/SophyaPI/PI/piimage.h
r3292 r3455 21 21 22 22 enum AutoLutType { AutoLut_No=0, AutoLut_MinMax=1, AutoLut_MeanSigma=2, 23 AutoLut_HistoPeak=3, AutoLut_HistoTail=4 };23 AutoLut_HistoPeak=3, AutoLut_HistoTail=4, AutoLut_Range=5}; 24 24 25 25 class PIImage : public PIPixmap -
trunk/SophyaPI/PI/piimgtools.cc
r3450 r3455 122 122 mOpt[1]->AppendItem("HistoPeak+1s", 1209); 123 123 mOpt[1]->AppendItem("HistoPeak+2s", 1210); 124 mOpt[1]->AppendItem("Range-10%", 1211); 125 mOpt[1]->AppendItem("Range-30%", 1212); 124 126 mOpt[1]->SetValue(1200); 125 127 mOpt[1]->SetBinding(PIBK_elastic,PIBK_elastic, PIBK_elastic,PIBK_elastic); … … 353 355 int lauto, typ; 354 356 int typlut[4] = {kLutType_Lin, kLutType_Log, kLutType_Sqrt, kLutType_Square} ; 355 AutoLutType alts[1 1] = { AutoLut_No,357 AutoLutType alts[13] = { AutoLut_No, 356 358 AutoLut_MeanSigma, AutoLut_MeanSigma, AutoLut_MeanSigma, 357 359 AutoLut_MinMax, AutoLut_MinMax, AutoLut_MinMax, 358 360 AutoLut_HistoTail, AutoLut_HistoTail, 359 AutoLut_HistoPeak, AutoLut_HistoPeak } ; 360 double nsas[11] = {0., 1., 2., 3., 0.70, 0.9, 1., 2., 1., 2.}; 361 AutoLut_HistoPeak, AutoLut_HistoPeak, 362 AutoLut_Range, AutoLut_Range } ; 363 double nsas[13] = {0., 1., 2., 3., 0.70, 0.9, -1., 1., 2., 1., 2., 0.1, 0.3}; 361 364 362 365 msg = UserMsg(msg); … … 398 401 } 399 402 else lauto = mOpt[1]->GetValue() - 1200; 400 if ((lauto < 0) || (lauto > 1 0)) lauto = 10;403 if ((lauto < 0) || (lauto > 12)) lauto = 12; 401 404 typ = mOpt[0]->GetValue() - 1100; 402 405 if ( (typ < 0) || (typ > 3) ) typ = 0;
Note:
See TracChangeset
for help on using the changeset viewer.