IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Ignore:
Timestamp:
Jun 17, 2009, 8:46:53 PM (17 years ago)
Author:
eugene
Message:

min,max incorrectly calculated; for Nsubset > Npixels, loop directly over pixels

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/psLib/src/imageops/psImageBackground.c

    r21183 r24481  
    5252
    5353    // Minimum and maximum values
    54     float min = values->data.F32[0];
    55     float max = values->data.F32[0];
     54    float min = +PS_MAX_F32;
     55    float max = -PS_MAX_F32;
    5656
    5757    // select a subset of the image pixels to measure the stats
    5858    long n = 0;                         // Number of actual pixels in subset
    59     for (long i = 0; i < Nsubset; i++) {
    60         double frnd = psRandomUniform(rng);
    61         int pixel = Npixels * frnd;
    62         int ix = pixel % nx;
    63         int iy = pixel / nx;
     59    if (Nsubset >= Npixels) {
     60        // if we have an image smaller than Nsubset, just loop over the image pixels
     61        for (int iy = 0; iy < ny; iy++) {
     62            for (int ix = 0; ix < nx; ix++) {
     63                if (!isfinite(image->data.F32[iy][ix]) || (mask && mask->data.PS_TYPE_IMAGE_MASK_DATA[iy][ix] & maskValue)) {
     64                    continue;
     65                }
    6466
    65         if (!isfinite(image->data.F32[iy][ix]) || (mask && mask->data.PS_TYPE_IMAGE_MASK_DATA[iy][ix] & maskValue)) {
    66             continue;
    67         }
     67                float value = image->data.F32[iy][ix];
     68                min = PS_MIN(value, min);
     69                max = PS_MAX(value, max);
     70                values->data.F32[n] = value;
     71                n++;
     72            }
     73        }
     74    } else {
     75        for (long i = 0; i < Nsubset; i++) {
     76            double frnd = psRandomUniform(rng);
     77            int pixel = Npixels * frnd;
     78            int ix = pixel % nx;
     79            int iy = pixel / nx;
    6880
    69         float value = image->data.F32[iy][ix];
    70         min = PS_MIN(value, min);
    71         max = PS_MIN(value, max);
    72         values->data.F32[n] = value;
    73         n++;
     81            if (!isfinite(image->data.F32[iy][ix]) || (mask && mask->data.PS_TYPE_IMAGE_MASK_DATA[iy][ix] & maskValue)) {
     82                continue;
     83            }
     84
     85            float value = image->data.F32[iy][ix];
     86            min = PS_MIN(value, min);
     87            max = PS_MAX(value, max);
     88            values->data.F32[n] = value;
     89            n++;
     90        }
    7491    }
    7592    if (n < 0.01*Nsubset) {
Note: See TracChangeset for help on using the changeset viewer.