Changeset 3455 in Sophya for trunk/SophyaPI


Ignore:
Timestamp:
Feb 9, 2008, 7:26:38 PM (18 years ago)
Author:
cmv
Message:

correction petits pb dans ALT-O/Lut pour images2D, intro de Range-10%/-30%, cmv 9/2/2008

Location:
trunk/SophyaPI/PI
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • trunk/SophyaPI/PI/parradapter.cc

    r3292 r3455  
    88// #include "ctimer.h"   Pour mesure TCPU
    99#include "sopnamsp.h"
     10#include "nbtri.h"
    1011#include "parradapter.h"
    1112
     
    376377}
    377378
     379/* --Methode-- */
     380int 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}
    378418
    379419/* --Methode-- */
  • trunk/SophyaPI/PI/parradapter.h

    r3292 r3455  
    8585  virtual void    ComputeLut_PicHisto(double& min, double& max, bool htail,
    8686                                      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);
    8789
    8890//    Calcul pixmap avec un LUT
  • trunk/SophyaPI/PI/piimage.cc

    r3304 r3455  
    457457   if (min >= max)  img->CheckDyn(min, max, moy, sig, nbnul, nbsat);
    458458   break;
     459 case AutoLut_Range :
     460   img->ComputeLut_Range(min, max, nsa/2., nsa/2., 1, 5000);
     461   break;
    459462 case AutoLut_MinMax :
    460463   min = 1.; max = -1.; 
     
    462465   if (max <= min) max = min+0.1*fabs(min);
    463466   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.;
    466469   break;
    467470 case AutoLut_MeanSigma :
  • trunk/SophyaPI/PI/piimage.h

    r3292 r3455  
    2121
    2222enum 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};
    2424
    2525class PIImage : public PIPixmap
  • trunk/SophyaPI/PI/piimgtools.cc

    r3450 r3455  
    122122mOpt[1]->AppendItem("HistoPeak+1s", 1209);
    123123mOpt[1]->AppendItem("HistoPeak+2s", 1210);
     124mOpt[1]->AppendItem("Range-10%", 1211);
     125mOpt[1]->AppendItem("Range-30%", 1212);
    124126mOpt[1]->SetValue(1200);
    125127mOpt[1]->SetBinding(PIBK_elastic,PIBK_elastic, PIBK_elastic,PIBK_elastic);
     
    353355int lauto, typ;
    354356int typlut[4] = {kLutType_Lin, kLutType_Log, kLutType_Sqrt, kLutType_Square} ;
    355 AutoLutType alts[11] = { AutoLut_No,
     357AutoLutType alts[13] = { AutoLut_No,
    356358                         AutoLut_MeanSigma, AutoLut_MeanSigma, AutoLut_MeanSigma,
    357359                         AutoLut_MinMax, AutoLut_MinMax, AutoLut_MinMax,
    358360                         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 } ;
     363double nsas[13] = {0., 1., 2., 3., 0.70, 0.9, -1., 1., 2., 1., 2., 0.1, 0.3};
    361364 
    362365msg = UserMsg(msg);
     
    398401    }
    399402    else lauto = mOpt[1]->GetValue() - 1200;
    400     if ((lauto < 0) || (lauto > 10))  lauto = 10;
     403    if ((lauto < 0) || (lauto > 12))  lauto = 12;
    401404    typ = mOpt[0]->GetValue() - 1100;
    402405    if ( (typ < 0) || (typ > 3) )  typ = 0;
Note: See TracChangeset for help on using the changeset viewer.