IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Changeset 35938 for trunk/psModules


Ignore:
Timestamp:
Aug 13, 2013, 2:55:04 PM (13 years ago)
Author:
watersc1
Message:

Improved masking code in a way that I believe is correct.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/psModules/src/imcombine/pmSubtractionSimple.c

    r35867 r35938  
    6363
    6464
     65bool simple_apply_mask(psImage *image, psImage *weight, psImage *mask,
     66                       psImageMaskType maskVal) {
     67  for (int y = 0; y < mask->numRows; y++) {
     68    for (int x = 0; x < mask->numCols; x++) {
     69      if (mask->data.PS_TYPE_IMAGE_MASK_DATA[y][x] & maskVal) {
     70        image->data.F32[y][x] = NAN;
     71        if (weight) {
     72          weight->data.F32[y][x] = NAN;
     73        }
     74      }
     75    }
     76  }
     77  return(true);
     78}
     79                       
     80
    6581// Copied from pmSubtraction
    6682static void solvedKernelPreCalc(psKernel *kernel, // Kernel, updated
     
    116132  psImage *varC2 = NULL;
    117133
     134  psImage *maskTemp = NULL;
     135 
    118136  // Allocate images, as this is usually done by subtractionMatchAlloc after this function is called. 
    119137  int numCols = ro1->image->numCols;
     
    210228  int maskBox = (int) ceil(sigmaKern * 1.1774); // diameter is 1/2 FWHM
    211229  int maskBlank = 8;  // I should be able to get this from a reference, right?
    212 
     230  int maskPoorVal = 16384; // Another value that should be found elsewhere.
    213231  //
    214232  // Make a fake pmSubtractionKernels element so we can add it appropriately.
     
    257275      psImageSmoothMask_Threaded(imageC1,image1,mask1,maskVal,sigmaKern,6,1e-6);
    258276      psImageSmoothMask_Threaded(varC1,var1,mask1,maskVal,sigmaKern * M_SQRT1_2,6,1e-6);
    259       maskC1 = psImageConvolveMask(maskC1,mask1,maskVal,maskBad,
     277
     278      maskTemp = psImageAlloc(numCols, numRows, PS_TYPE_IMAGE_MASK);
     279      maskTemp = psImageConvolveMask(maskTemp,mask1,maskVal,maskBad,      // Mask bad values
    260280                                   -maskBox,maskBox,-maskBox,maskBox);
     281      maskC1 = psImageConvolveMask(maskC1,maskTemp,maskPoorVal,maskPoor,  // Mask poor values
     282                                   -maskBox,maskBox,-maskBox,maskBox);
     283      psFree(maskTemp);
     284
    261285      conv1->covariance = psImageCovarianceCalculate(kernel,ro1->covariance);
    262286      pmSubtractionBorder(imageC1,varC1,maskC1,maskBox,maskBlank);
    263       pmSubtractionMaskApply(imageC1,varC1,maskC1,PM_SUBTRACTION_MODE_1);
     287      simple_apply_mask(imageC1,varC1,maskC1,maskBad);
    264288    }
    265289    if (conv2) {
     
    274298      psImageSmoothMask_Threaded(imageC2,image2,mask2,maskVal,sigmaKern,6,1e-6);
    275299      psImageSmoothMask_Threaded(varC2,var2,mask2,maskVal,sigmaKern * M_SQRT1_2,6,1e-6);
    276       maskC2 = psImageConvolveMask(maskC2,mask2,maskVal,maskBad,
     300
     301      maskTemp = psImageAlloc(numCols, numRows, PS_TYPE_IMAGE_MASK);
     302      maskTemp = psImageConvolveMask(maskTemp,mask2,maskVal,maskBad,      // Mask bad values
    277303                                   -maskBox,maskBox,-maskBox,maskBox);
     304      maskC2 = psImageConvolveMask(maskC2,maskTemp,maskPoorVal,maskPoor,  // Mask poor values
     305                                   -maskBox,maskBox,-maskBox,maskBox);
     306      psFree(maskTemp);
     307
    278308      conv2->covariance = psImageCovarianceCalculate(kernel,ro2->covariance);
    279309      pmSubtractionBorder(imageC2,varC2,maskC2,maskBox,maskBlank);
    280       pmSubtractionMaskApply(imageC2,varC2,maskC2,PM_SUBTRACTION_MODE_2);
     310      simple_apply_mask(imageC2,varC2,maskC2,maskBad);
    281311    }
    282312    if (conv1) {
Note: See TracChangeset for help on using the changeset viewer.