Changeset 21183 for trunk/psModules/src/imcombine
- Timestamp:
- Jan 26, 2009, 8:40:07 PM (17 years ago)
- Location:
- trunk/psModules/src/imcombine
- Files:
-
- 14 edited
-
pmImageCombine.c (modified) (15 diffs)
-
pmPSFEnvelope.c (modified) (1 diff)
-
pmReadoutCombine.c (modified) (6 diffs)
-
pmReadoutCombine.h (modified) (2 diffs)
-
pmStack.c (modified) (15 diffs)
-
pmStack.h (modified) (2 diffs)
-
pmStackReject.c (modified) (2 diffs)
-
pmSubtraction.c (modified) (17 diffs)
-
pmSubtraction.h (modified) (2 diffs)
-
pmSubtractionMask.c (modified) (8 diffs)
-
pmSubtractionMask.h (modified) (2 diffs)
-
pmSubtractionMatch.c (modified) (4 diffs)
-
pmSubtractionMatch.h (modified) (1 diff)
-
pmSubtractionStamps.c (modified) (6 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/psModules/src/imcombine/pmImageCombine.c
r12742 r21183 8 8 * @author GLG, MHPCC 9 9 * 10 * @version $Revision: 1.1 2$ $Name: not supported by cvs2svn $11 * @date $Date: 200 7-04-04 22:42:48 $10 * @version $Revision: 1.13 $ $Name: not supported by cvs2svn $ 11 * @date $Date: 2009-01-27 06:39:38 $ 12 12 * 13 13 * XXX: pmRejectPixels() has a known bug with the pmImageTransform() call. … … 17 17 */ 18 18 19 // XXX this is somewhat messy and unclear on the masking. 20 19 21 #ifdef HAVE_CONFIG_H 20 22 #include <config.h> … … 53 55 54 56 buffer->pixels = psVectorAlloc(numImages, PS_TYPE_F32); 55 buffer->masks = psVectorAlloc(numImages, PS_TYPE_ MASK);57 buffer->masks = psVectorAlloc(numImages, PS_TYPE_VECTOR_MASK); 56 58 buffer->errors = psVectorAlloc(numImages, PS_TYPE_F32); 57 59 buffer->stats = psStatsAlloc(PS_STAT_SAMPLE_MEAN | PS_STAT_SAMPLE_STDEV); … … 67 69 const psArray *errors, // Array of input error images 68 70 const psArray *masks, // Array of input masks 69 ps U32maskVal, // Mask value71 psImageMaskType maskVal, // Mask value 70 72 psS32 numIter, // Number of rejection iterations 71 73 psF32 sigmaClip, // Number of standard deviations at which to reject … … 115 117 if (masks) { 116 118 psImage *mask = masks->data[i]; // Mask of interest 117 pixelMasks->data.U8[i] = mask->data.U8[y][x]; 118 } // Set the pixel error data, if necessary 119 pixelMasks->data.PS_TYPE_VECTOR_MASK_DATA[i] = (mask->data.PS_TYPE_IMAGE_MASK_DATA[y][x] & maskVal); 120 } 121 // Set the pixel error data, if necessary 119 122 if (errors) { 120 123 psImage *error = errors->data[i]; // Error image of interest … … 128 131 for (int iter = 0; iter < numIter; iter++) { 129 132 // Combine all the pixels, using the specified stat. 130 if (!psVectorStats(stats, pixelData, pixelErrors, pixelMasks, maskVal)) {133 if (!psVectorStats(stats, pixelData, pixelErrors, pixelMasks, 0xff)) { 131 134 combine->data.F32[y][x] = NAN; 132 135 psFree(buffer); … … 148 151 float stdev = stats->sampleStdev; 149 152 for (int i = 0; i < numImages; i++) { 150 if (!(pixelMasks->data. U8[i] & maskVal) &&153 if (!(pixelMasks->data.PS_TYPE_VECTOR_MASK_DATA[i] & 0xff) && 151 154 fabs(pixelData->data.F32[i] - combinedPixel) > sigmaClip * stdev) { 152 155 // Reject pixel as questionable 153 156 numRejects++; 154 pixelMasks->data. U8[i] = maskVal;157 pixelMasks->data.PS_TYPE_IMAGE_MASK_DATA[i] = 0xff; 155 158 if (questionablePixels) { 156 159 // Mark the pixel as questionable … … 191 194 const psArray *errors, ///< Array of input error images 192 195 const psArray *masks, ///< Array of input masks 193 ps U32maskVal, ///< Mask value196 psImageMaskType maskVal, ///< Mask value 194 197 const psPixels *pixels, ///< Pixels to combine 195 198 psS32 numIter, ///< Number of rejection iterations … … 231 234 psImage *mask = masks->data[i]; 232 235 PS_ASSERT_IMAGE_SIZE(mask, numCols, numRows, NULL); 233 PS_ASSERT_IMAGE_TYPE(mask, PS_TYPE_ MASK, NULL);236 PS_ASSERT_IMAGE_TYPE(mask, PS_TYPE_IMAGE_MASK, NULL); 234 237 } 235 238 } … … 319 322 int num = 0; 320 323 psVector *pixels = psVectorAlloc(8, PS_TYPE_F32); // Array of pixels 321 psVector *mask = psVectorAlloc(8, PS_TYPE_ U8); // Corresponding mask324 psVector *mask = psVectorAlloc(8, PS_TYPE_VECTOR_MASK); // Corresponding mask 322 325 323 326 // Get limits … … 329 332 for (int j = yMin; j <= yMax; j++) { 330 333 for (int i = xMin; i <= xMax; i++) { 331 if ((i != x) && (j != y) && (0 == imageMask->data. U8[j][i])) {334 if ((i != x) && (j != y) && (0 == imageMask->data.PS_TYPE_IMAGE_MASK_DATA[j][i])) { 332 335 pixels->data.F32[num] = image->data.F32[j][i]; 333 mask->data. U8[num] = 0;336 mask->data.PS_TYPE_VECTOR_MASK_DATA[num] = 0; 334 337 num++; 335 338 } else { 336 mask->data. U8[num] = 1;339 mask->data.PS_TYPE_VECTOR_MASK_DATA[num] = 1; 337 340 } 338 341 } … … 347 350 if ((i != x) && (j != y)) { 348 351 pixels->data.F32[num] = image->data.F32[j][i]; 349 mask->data. U8[num] = 0;352 mask->data.PS_TYPE_VECTOR_MASK_DATA[num] = 0; 350 353 num++; 351 354 } else { 352 mask->data. U8[num] = 1;355 mask->data.PS_TYPE_VECTOR_MASK_DATA[num] = 1; 353 356 } 354 357 } … … 473 476 for (psS32 i = 0 ; i < image->numRows ; i++) { 474 477 for (psS32 j = 0 ; j < image->numCols ; j++) { 475 imgF32->data.F32[i][j] = (psF32) image->data. U8[i][j];478 imgF32->data.F32[i][j] = (psF32) image->data.PS_TYPE_IMAGE_MASK_DATA[i][j]; 476 479 } 477 480 } … … 518 521 PS_ASSERT_IMAGE_NON_NULL(tmpMask, NULL); 519 522 PS_ASSERT_IMAGE_NON_EMPTY(tmpMask, NULL); 520 PS_ASSERT_IMAGE_TYPE(tmpMask, PS_TYPE_F32, NULL); 523 PS_ASSERT_IMAGE_TYPE(tmpMask, PS_TYPE_F32, NULL); // XXX really F32?? 521 524 PS_ASSERT_IMAGES_SIZE_EQUAL(tmpImage, tmpMask, NULL); 522 525 } … … 571 574 572 575 // 573 // Create a ps U8mask image from the list of cosmic pixels.576 // Create a psImageMaskType mask image from the list of cosmic pixels. 574 577 // 575 578 psImage *maskImage = NULL; -
trunk/psModules/src/imcombine/pmPSFEnvelope.c
r20999 r21183 223 223 // *** readout->weight = (psImage*)psBinaryOp(NULL, readout->image, "*", psScalarAlloc(WEIGHT_FACTOR, PS_TYPE_F32)); 224 224 readout->weight = (psImage*)psBinaryOp(NULL, readout->image, "+", psScalarAlloc(WEIGHT_VAL, PS_TYPE_F32)); 225 readout->mask = psImageAlloc(numCols, numRows, PS_TYPE_ MASK);225 readout->mask = psImageAlloc(numCols, numRows, PS_TYPE_IMAGE_MASK); 226 226 psImageInit(readout->mask, 0); 227 227 -
trunk/psModules/src/imcombine/pmReadoutCombine.c
r19086 r21183 105 105 106 106 // note the mask value actually used 107 ps MaskType maskVal = params->maskVal; // The mask value107 psImageMaskType maskVal = params->maskVal; // The mask value 108 108 if (maskVal) { 109 109 psString comment = NULL; // Comment to add to header … … 247 247 psF32 *pixelsData = pixels->data.F32; // Dereference pixels 248 248 249 psVector *mask = psVectorAlloc(inputs->n, PS_TYPE_ U8); // Mask for stack250 ps U8 *maskData = mask->data.U8; // Dereference mask249 psVector *mask = psVectorAlloc(inputs->n, PS_TYPE_VECTOR_MASK); // Mask for stack 250 psVectorMaskType *maskData = mask->data.PS_TYPE_VECTOR_MASK_DATA; // Dereference mask 251 251 252 252 psVector *weights = NULL; // Stack of weights … … 260 260 261 261 float keepFrac = 1.0 - params->fracLow - params->fracHigh; // Fraction of pixels to keep 262 ps MaskType maskVal = params->maskVal; // The mask value262 psImageMaskType maskVal = params->maskVal; // The mask value 263 263 264 264 #ifndef PS_NO_TRACE … … 278 278 // Dereference output products 279 279 psF32 **outputImage = output->image->data.F32; // Output image 280 ps U8 **outputMask = output->mask->data.U8; // Output mask280 psImageMaskType **outputMask = output->mask->data.PS_TYPE_IMAGE_MASK_DATA; // Output mask 281 281 psF32 **outputWeight = NULL; // Output weight map 282 282 if (output->weight) { … … 303 303 304 304 int numValid = 0; // Number of valid pixels in the stack 305 memset(maskData, 0, mask->n * sizeof(ps U8)); // Reset the mask305 memset(maskData, 0, mask->n * sizeof(psVectorMaskType)); // Reset the mask 306 306 for (int r = 0; r < inputs->n; r++) { 307 307 pmReadout *readout = inputs->data[r]; // Input readout … … 318 318 // Check mask 319 319 psImage *roMask = readout->mask; // The mask image 320 if (roMask && roMask->data. U8[yIn][xIn] & maskVal) {320 if (roMask && roMask->data.PS_TYPE_IMAGE_MASK_DATA[yIn][xIn] & maskVal) { 321 321 maskData[r] = 1; 322 322 continue; -
trunk/psModules/src/imcombine/pmReadoutCombine.h
r18830 r21183 5 5 * @author Paul Price, IfA 6 6 * 7 * @version $Revision: 1.1 4$ $Name: not supported by cvs2svn $8 * @date $Date: 200 8-08-01 00:01:26$7 * @version $Revision: 1.15 $ $Name: not supported by cvs2svn $ 8 * @date $Date: 2009-01-27 06:39:38 $ 9 9 * Copyright 2004-2006 Institute for Astronomy, University of Hawaii 10 10 */ … … 22 22 typedef struct { 23 23 psStatsOptions combine; ///< Statistic to use when performing the combination 24 ps MaskType maskVal;///< Mask value25 ps MaskType blank;///< Mask value to give blank (i.e., no data) pixels24 psImageMaskType maskVal; ///< Mask value 25 psImageMaskType blank; ///< Mask value to give blank (i.e., no data) pixels 26 26 int nKeep; ///< Mimimum number of pixels to keep 27 27 float fracHigh; ///< Fraction of high pixels to immediately throw -
trunk/psModules/src/imcombine/pmStack.c
r20712 r21183 8 8 * @author GLG, MHPCC 9 9 * 10 * @version $Revision: 1.4 5$ $Name: not supported by cvs2svn $11 * @date $Date: 200 8-11-13 03:50:30$10 * @version $Revision: 1.46 $ $Name: not supported by cvs2svn $ 11 * @date $Date: 2009-01-27 06:39:38 $ 12 12 * Copyright 2004-2007 Institute for Astronomy, University of Hawaii 13 13 * … … 63 63 64 64 buffer->pixels = psVectorAlloc(numImages, PS_TYPE_F32); 65 buffer->masks = psVectorAlloc(numImages, PS_TYPE_ MASK);65 buffer->masks = psVectorAlloc(numImages, PS_TYPE_VECTOR_MASK); 66 66 buffer->variances = psVectorAlloc(numImages, PS_TYPE_F32); 67 67 buffer->weights = psVectorAlloc(numImages, PS_TYPE_F32); … … 143 143 assert(!masks || values->n == masks->n); 144 144 assert(values->type.type == PS_TYPE_F32); 145 assert(!masks || masks->type.type == PS_TYPE_ MASK);145 assert(!masks || masks->type.type == PS_TYPE_VECTOR_MASK); 146 146 assert(sortBuffer && sortBuffer->nalloc >= values->n && sortBuffer->type.type == PS_TYPE_F32); 147 147 … … 149 149 int num = 0; // Number of valid values 150 150 for (int i = 0; i < values->n; i++) { 151 if (!masks || !masks->data.PS_TYPE_ MASK_DATA[i]) {151 if (!masks || !masks->data.PS_TYPE_VECTOR_MASK_DATA[i]) { 152 152 sortBuffer->data.F32[num++] = values->data.F32[i]; 153 153 } … … 215 215 const psVector *reject, // Indices of pixels to reject, or NULL 216 216 int x, int y, // Coordinates of interest; frame of output image 217 ps MaskType maskVal, // Value to mask218 ps MaskType bad, // Value to give bad pixels217 psImageMaskType maskVal, // Value to mask 218 psImageMaskType bad, // Value to give bad pixels 219 219 int numIter, // Number of rejection iterations 220 220 float rej, // Number of standard deviations at which to reject … … 258 258 int xIn = x - data->readout->col0, yIn = y - data->readout->row0; // Coordinates on input readout 259 259 psImage *mask = data->readout->mask; // Mask of interest 260 if (mask->data.PS_TYPE_ MASK_DATA[yIn][xIn] & maskVal) {260 if (mask->data.PS_TYPE_IMAGE_MASK_DATA[yIn][xIn] & maskVal) { 261 261 continue; 262 262 } … … 283 283 // Default option is that the pixel is bad 284 284 float imageValue = NAN, varianceValue = NAN; // Value for combined image and variance map 285 ps MaskType maskValue = bad; // Value for combined mask285 psImageMaskType maskValue = bad; // Value for combined mask 286 286 switch (num) { 287 287 case 0: … … 382 382 // Mask a pixel for inspection 383 383 #define MASK_PIXEL_FOR_INSPECTION() \ 384 pixelMasks->data.PS_TYPE_ MASK_DATA[j] = 0xff; \384 pixelMasks->data.PS_TYPE_VECTOR_MASK_DATA[j] = 0xff; \ 385 385 combineInspect(inputs, x, y, pixelSources->data.U16[j]); \ 386 386 numClipped++; \ … … 388 388 389 389 for (int j = 0; j < num; j++) { 390 if (pixelMasks->data.PS_TYPE_ MASK_DATA[j]) {390 if (pixelMasks->data.PS_TYPE_VECTOR_MASK_DATA[j]) { 391 391 continue; 392 392 } … … 408 408 409 409 image->data.F32[y][x] = imageValue; 410 mask->data.PS_TYPE_ MASK_DATA[y][x] = maskValue;410 mask->data.PS_TYPE_IMAGE_MASK_DATA[y][x] = maskValue; 411 411 if (variance) { 412 412 variance->data.F32[y][x] = varianceValue; … … 438 438 PS_ASSERT_IMAGE_TYPE(data->readout->image, PS_TYPE_F32, false); 439 439 PS_ASSERT_IMAGE_NON_NULL(data->readout->mask, false); 440 PS_ASSERT_IMAGE_TYPE(data->readout->mask, PS_TYPE_ MASK, false);440 PS_ASSERT_IMAGE_TYPE(data->readout->mask, PS_TYPE_IMAGE_MASK, false); 441 441 PS_ASSERT_IMAGES_SIZE_EQUAL(data->readout->image, data->readout->mask, false); 442 442 *numCols = data->readout->image->numCols; … … 469 469 PS_ASSERT_IMAGE_NON_NULL(data->readout->mask, false); 470 470 PS_ASSERT_IMAGE_TYPE(data->readout->image, PS_TYPE_F32, false); 471 PS_ASSERT_IMAGE_TYPE(data->readout->mask, PS_TYPE_ MASK, false);471 PS_ASSERT_IMAGE_TYPE(data->readout->mask, PS_TYPE_IMAGE_MASK, false); 472 472 PS_ASSERT_IMAGE_SIZE(data->readout->image, *numCols, *numRows, false); 473 473 PS_ASSERT_IMAGES_SIZE_EQUAL(data->readout->image, data->readout->mask, false); … … 562 562 563 563 /// Stack input images 564 bool pmStackCombine(pmReadout *combined, psArray *input, ps MaskType maskVal, psMaskType bad,564 bool pmStackCombine(pmReadout *combined, psArray *input, psImageMaskType maskVal, psImageMaskType bad, 565 565 int kernelSize, int numIter, float rej, float sys, 566 566 bool entire, bool useVariance, bool safe) … … 587 587 PS_ASSERT_IMAGE_TYPE(combined->image, PS_TYPE_F32, false); 588 588 PS_ASSERT_IMAGE_NON_NULL(combined->mask, false); 589 PS_ASSERT_IMAGE_TYPE(combined->mask, PS_TYPE_ MASK, false);589 PS_ASSERT_IMAGE_TYPE(combined->mask, PS_TYPE_IMAGE_MASK, false); 590 590 PS_ASSERT_IMAGES_SIZE_EQUAL(combined->image, combined->mask, false); 591 591 } … … 698 698 psImage *combinedMask = combined->mask; // Combined mask 699 699 if (!combinedMask) { 700 combined->mask = psImageAlloc(numCols, numRows, PS_TYPE_ MASK);700 combined->mask = psImageAlloc(numCols, numRows, PS_TYPE_IMAGE_MASK); 701 701 combinedMask = combined->mask; 702 702 } -
trunk/psModules/src/imcombine/pmStack.h
r20497 r21183 8 8 * @author GLG, MHPCC 9 9 * 10 * @version $Revision: 1. 9$ $Name: not supported by cvs2svn $11 * @date $Date: 200 8-11-01 02:59:33$10 * @version $Revision: 1.10 $ $Name: not supported by cvs2svn $ 11 * @date $Date: 2009-01-27 06:39:38 $ 12 12 * 13 13 * Copyright 2004-2007 Institute for Astronomy, University of Hawaii … … 43 43 bool pmStackCombine(pmReadout *combined,///< Combined readout (output) 44 44 psArray *input, ///< Input array of pmStackData 45 ps MaskType maskVal, ///< Mask value of bad pixels46 ps MaskType bad, ///< Mask value to give rejected pixels45 psImageMaskType maskVal, ///< Mask value of bad pixels 46 psImageMaskType bad, ///< Mask value to give rejected pixels 47 47 int kernelSize, ///< Half-size of the convolution kernel 48 48 int numIter, ///< Number of iterations -
trunk/psModules/src/imcombine/pmStackReject.c
r20838 r21183 61 61 } 62 62 63 int numBytes = (xMax - xMin) * PSELEMTYPE_SIZEOF(PS_TYPE_ MASK); // Number of bytes to copy63 int numBytes = (xMax - xMin) * PSELEMTYPE_SIZEOF(PS_TYPE_IMAGE_MASK); // Number of bytes to copy 64 64 psAssert(convolved->numCols - 2 * box == xMax - xMin, "Bad number of columns"); 65 65 psAssert(convolved->numRows - 2 * box == yMax - yMin, "Bad number of rows"); 66 66 67 67 for (int yTarget = yMin, ySource = box; yTarget < yMax; yTarget++, ySource++) { 68 memcpy(&target->data.PS_TYPE_ MASK_DATA[yTarget][xMin],69 &convolved->data.PS_TYPE_ MASK_DATA[ySource][box], numBytes);68 memcpy(&target->data.PS_TYPE_IMAGE_MASK_DATA[yTarget][xMin], 69 &convolved->data.PS_TYPE_IMAGE_MASK_DATA[ySource][box], numBytes); 70 70 } 71 71 psFree(convolved); 72 72 } else { 73 73 // Just copy over 74 int numBytes = (xMax - xMin) * PSELEMTYPE_SIZEOF(PS_TYPE_ MASK); // Number of bytes to copy74 int numBytes = (xMax - xMin) * PSELEMTYPE_SIZEOF(PS_TYPE_IMAGE_MASK); // Number of bytes to copy 75 75 for (int yTarget = yMin; yTarget < yMax; yTarget++) { 76 memcpy(&target->data.PS_TYPE_ MASK_DATA[yTarget][xMin],77 &source->data.PS_TYPE_ MASK_DATA[yTarget][xMin], numBytes);76 memcpy(&target->data.PS_TYPE_IMAGE_MASK_DATA[yTarget][xMin], 77 &source->data.PS_TYPE_IMAGE_MASK_DATA[yTarget][xMin], numBytes); 78 78 } 79 79 } … … 262 262 bool oldThreads = psImageConvolveSetThreads(false); // Old value of threading for psImageColvolve 263 263 264 psImage *target = psImageRecycle(convolved, numCols, numRows, PS_TYPE_ MASK); // Grown image264 psImage *target = psImageRecycle(convolved, numCols, numRows, PS_TYPE_IMAGE_MASK); // Grown image 265 265 psImageInit(target, 0); 266 266 if (threaded) { -
trunk/psModules/src/imcombine/pmSubtraction.c
r20838 r21183 246 246 psImage *image, // Image to convolve 247 247 psImage *mask, // Mask image 248 ps MaskType maskVal, // Value to mask248 psImageMaskType maskVal, // Value to mask 249 249 const psKernel *kernel, // Kernel by which to convolve 250 250 psRegion region,// Region of interest … … 291 291 psImage *sys, // Systematic error image 292 292 psImage *mask, // Mask image 293 ps MaskType maskVal, // Value to mask293 psImageMaskType maskVal, // Value to mask 294 294 const psKernel *kernel, // Kernel by which to convolve 295 295 psRegion region,// Region of interest … … 373 373 float background, // Background value to apply 374 374 psRegion region, // Region to convolve 375 ps MaskType maskBad, // Value to give bad pixels376 ps MaskType maskPoor, // Value to give poor pixels375 psImageMaskType maskBad, // Value to give bad pixels 376 psImageMaskType maskPoor, // Value to give poor pixels 377 377 float poorFrac, // Fraction for "poor" 378 378 bool useFFT, // Use FFT to convolve? … … 385 385 } 386 386 387 ps MaskType subBad; // Bad pixels in subtraction mask388 ps MaskType subConvBad; // Bad pixels in subtraction mask when convolving389 ps MaskType subConvPoor; // Poor pixels in subtraction mask when convolving387 psImageMaskType subBad; // Bad pixels in subtraction mask 388 psImageMaskType subConvBad; // Bad pixels in subtraction mask when convolving 389 psImageMaskType subConvPoor; // Poor pixels in subtraction mask when convolving 390 390 if (kernels->mode == PM_SUBTRACTION_MODE_1 || (kernels->mode == PM_SUBTRACTION_MODE_DUAL && !wantDual)) { 391 391 subBad = PM_SUBTRACTION_MASK_BAD_1; … … 437 437 for (int yTarget = rowMin, ySource = box; yTarget < rowMax; yTarget++, ySource++) { 438 438 // Dereference images 439 ps MaskType *target = &convMask->data.PS_TYPE_MASK_DATA[yTarget][colMin]; // Target values440 ps MaskType *source = &convolved->data.PS_TYPE_MASK_DATA[ySource][box]; // Source values439 psImageMaskType *target = &convMask->data.PS_TYPE_IMAGE_MASK_DATA[yTarget][colMin]; // Target values 440 psImageMaskType *source = &convolved->data.PS_TYPE_IMAGE_MASK_DATA[ySource][box]; // Source values 441 441 for (int xTarget = colMin; xTarget < colMax; xTarget++, target++, source++) { 442 442 if (*source & subConvBad) { … … 783 783 PS_ASSERT_VECTOR_TYPE(deviations, PS_TYPE_F32, -1); 784 784 PS_ASSERT_IMAGE_NON_EMPTY(subMask, -1); 785 PS_ASSERT_IMAGE_TYPE(subMask, PS_TYPE_ MASK, -1);785 PS_ASSERT_IMAGE_TYPE(subMask, PS_TYPE_IMAGE_MASK, -1); 786 786 787 787 // I used to measure the rms deviation about zero, and use that as the sigma against which to clip, but … … 794 794 795 795 int numStamps = 0; // Number of used stamps 796 psVector *mask = psVectorAlloc(stamps->num, PS_TYPE_ MASK); // Mask, for statistics796 psVector *mask = psVectorAlloc(stamps->num, PS_TYPE_VECTOR_MASK); // Mask, for statistics 797 797 psVectorInit(mask, 0); 798 798 for (int i = 0; i < stamps->num; i++) { 799 799 pmSubtractionStamp *stamp = stamps->stamps->data[i]; // Stamp of interest 800 800 if (stamp->status != PM_SUBTRACTION_STAMP_USED) { 801 mask->data.PS_TYPE_ MASK_DATA[i] = 0xff;801 mask->data.PS_TYPE_VECTOR_MASK_DATA[i] = 0xff; 802 802 continue; 803 803 } … … 869 869 for (int y = stamp->y - footprint; y <= stamp->y + footprint; y++) { 870 870 for (int x = stamp->x - footprint; x <= stamp->x + footprint; x++) { 871 subMask->data.PS_TYPE_ MASK_DATA[y][x] |= PM_SUBTRACTION_MASK_REJ;871 subMask->data.PS_TYPE_IMAGE_MASK_DATA[y][x] |= PM_SUBTRACTION_MASK_REJ; 872 872 } 873 873 } … … 997 997 psImage *sys1, psImage *sys2, // Systematic error images 998 998 psImage *subMask, // Input subtraction mask 999 ps MaskType maskBad, // Mask value to give bad pixels1000 ps MaskType maskPoor, // Mask value to give poor pixels999 psImageMaskType maskBad, // Mask value to give bad pixels 1000 psImageMaskType maskPoor, // Mask value to give poor pixels 1001 1001 float poorFrac, // Fraction for "poor" 1002 1002 const psRegion *region, // Patch to convolve … … 1035 1035 1036 1036 if ((kernels->mode == PM_SUBTRACTION_MODE_1 || kernels->mode == PM_SUBTRACTION_MODE_DUAL) && ro1->mask) { 1037 ps MaskType **target = convMask->data.PS_TYPE_MASK_DATA; // Target mask1038 ps MaskType **source = ro1->mask->data.PS_TYPE_MASK_DATA; // Source mask1037 psImageMaskType **target = convMask->data.PS_TYPE_IMAGE_MASK_DATA; // Target mask 1038 psImageMaskType **source = ro1->mask->data.PS_TYPE_IMAGE_MASK_DATA; // Source mask 1039 1039 1040 1040 for (int y = yMin; y < yMax; y++) { … … 1045 1045 } 1046 1046 if ((kernels->mode == PM_SUBTRACTION_MODE_2 || kernels->mode == PM_SUBTRACTION_MODE_DUAL) && ro2->mask) { 1047 ps MaskType **target = convMask->data.PS_TYPE_MASK_DATA; // Target mask1048 ps MaskType **source = ro2->mask->data.PS_TYPE_MASK_DATA; // Source mask1047 psImageMaskType **target = convMask->data.PS_TYPE_IMAGE_MASK_DATA; // Target mask 1048 psImageMaskType **source = ro2->mask->data.PS_TYPE_IMAGE_MASK_DATA; // Source mask 1049 1049 1050 1050 for (int y = yMin; y < yMax; y++) { … … 1075 1075 psImage *sys2 = args->data[10]; // Systematic error image 2 1076 1076 psImage *subMask = args->data[11]; // Subtraction mask 1077 ps MaskType maskBad = PS_SCALAR_VALUE(args->data[12], U8); // Output mask value for bad pixels1078 ps MaskType maskPoor = PS_SCALAR_VALUE(args->data[13], U8); // Output mask value for poor pixels1077 psImageMaskType maskBad = PS_SCALAR_VALUE(args->data[12], PS_TYPE_IMAGE_MASK_DATA); // Output mask value for bad pixels 1078 psImageMaskType maskPoor = PS_SCALAR_VALUE(args->data[13], PS_TYPE_IMAGE_MASK_DATA); // Output mask value for poor pixels 1079 1079 float poorFrac = PS_SCALAR_VALUE(args->data[14], F32); // Fraction for "poor" 1080 1080 const psRegion *region = args->data[15]; // Region to convolve 1081 1081 const pmSubtractionKernels *kernels = args->data[16]; // Kernels 1082 bool doBG = PS_SCALAR_VALUE(args->data[17], U8); // Do background subtraction?1083 bool useFFT = PS_SCALAR_VALUE(args->data[18], U8); // Use FFT for convolution?1082 bool doBG = PS_SCALAR_VALUE(args->data[17], PS_TYPE_IMAGE_MASK_DATA); // Do background subtraction? 1083 bool useFFT = PS_SCALAR_VALUE(args->data[18], PS_TYPE_IMAGE_MASK_DATA); // Use FFT for convolution? 1084 1084 1085 1085 return subtractionConvolvePatch(numCols, numRows, x0, y0, out1, out2, convMask, ro1, ro2, sys1, sys2, … … 1088 1088 1089 1089 bool pmSubtractionConvolve(pmReadout *out1, pmReadout *out2, const pmReadout *ro1, const pmReadout *ro2, 1090 psImage *subMask, int stride, ps MaskType maskBad, psMaskType maskPoor,1090 psImage *subMask, int stride, psImageMaskType maskBad, psImageMaskType maskPoor, 1091 1091 float poorFrac, float sysError, const psRegion *region, 1092 1092 const pmSubtractionKernels *kernels, bool doBG, bool useFFT) … … 1121 1121 if (subMask) { 1122 1122 PS_ASSERT_IMAGE_NON_NULL(subMask, false); 1123 PS_ASSERT_IMAGE_TYPE(subMask, PS_TYPE_ MASK, false);1123 PS_ASSERT_IMAGE_TYPE(subMask, PS_TYPE_IMAGE_MASK, false); 1124 1124 PS_ASSERT_IMAGE_SIZE(subMask, numCols, numRows, false); 1125 1125 } … … 1182 1182 if (kernels->mode == PM_SUBTRACTION_MODE_1 || kernels->mode == PM_SUBTRACTION_MODE_DUAL) { 1183 1183 if (!out1->mask) { 1184 out1->mask = psImageAlloc(numCols, numRows, PS_TYPE_ MASK);1184 out1->mask = psImageAlloc(numCols, numRows, PS_TYPE_IMAGE_MASK); 1185 1185 } 1186 1186 convMask = out1->mask; … … 1194 1194 } else { 1195 1195 if (!out2->mask) { 1196 out2->mask = psImageAlloc(numCols, numRows, PS_TYPE_ MASK);1196 out2->mask = psImageAlloc(numCols, numRows, PS_TYPE_IMAGE_MASK); 1197 1197 } 1198 1198 convMask = out2->mask; … … 1285 1285 psMutexUnlock(subMask); 1286 1286 } 1287 PS_ARRAY_ADD_SCALAR(args, maskBad, PS_TYPE_ U8);1288 PS_ARRAY_ADD_SCALAR(args, maskPoor, PS_TYPE_ U8);1287 PS_ARRAY_ADD_SCALAR(args, maskBad, PS_TYPE_IMAGE_MASK); 1288 PS_ARRAY_ADD_SCALAR(args, maskPoor, PS_TYPE_IMAGE_MASK); 1289 1289 PS_ARRAY_ADD_SCALAR(args, poorFrac, PS_TYPE_F32); 1290 1290 psArrayAdd(args, 1, subRegion); -
trunk/psModules/src/imcombine/pmSubtraction.h
r20568 r21183 6 6 * @author GLG, MHPCC 7 7 * 8 * @version $Revision: 1.3 4$ $Name: not supported by cvs2svn $9 * @date $Date: 200 8-11-07 00:03:18 $8 * @version $Revision: 1.35 $ $Name: not supported by cvs2svn $ 9 * @date $Date: 2009-01-27 06:39:38 $ 10 10 * Copyright 2004-207 Institute for Astronomy, University of Hawaii 11 11 */ … … 104 104 psImage *subMask, ///< Subtraction mask (or NULL) 105 105 int stride, ///< Size of convolution patches 106 ps MaskType maskBad, ///< Mask value to give bad pixels107 ps MaskType maskPoor, ///< Mask value to give poor pixels106 psImageMaskType maskBad, ///< Mask value to give bad pixels 107 psImageMaskType maskPoor, ///< Mask value to give poor pixels 108 108 float poorFrac, ///< Fraction for "poor" 109 109 float sysError, ///< Relative systematic error -
trunk/psModules/src/imcombine/pmSubtractionMask.c
r20832 r21183 20 20 psImage *weight, // Weight map to mark as blank (or NULL) 21 21 int x, int y, // Coordinates to mark blank 22 ps MaskType blank // Blank mask value22 psImageMaskType blank // Blank mask value 23 23 ) 24 24 { 25 25 image->data.F32[y][x] = NAN; 26 26 if (mask) { 27 mask->data.PS_TYPE_ MASK_DATA[y][x] |= blank;27 mask->data.PS_TYPE_IMAGE_MASK_DATA[y][x] |= blank; 28 28 } 29 29 if (weight) { … … 37 37 ////////////////////////////////////////////////////////////////////////////////////////////////////////////// 38 38 39 psImage *pmSubtractionMask(const psImage *mask1, const psImage *mask2, ps MaskType maskVal,39 psImage *pmSubtractionMask(const psImage *mask1, const psImage *mask2, psImageMaskType maskVal, 40 40 int size, int footprint, float badFrac, bool useFFT) 41 41 { 42 42 PS_ASSERT_IMAGE_NON_NULL(mask1, NULL); 43 PS_ASSERT_IMAGE_TYPE(mask1, PS_TYPE_ MASK, NULL);43 PS_ASSERT_IMAGE_TYPE(mask1, PS_TYPE_IMAGE_MASK, NULL); 44 44 if (mask2) { 45 45 PS_ASSERT_IMAGE_NON_NULL(mask2, NULL); 46 PS_ASSERT_IMAGE_TYPE(mask2, PS_TYPE_ MASK, NULL);46 PS_ASSERT_IMAGE_TYPE(mask2, PS_TYPE_IMAGE_MASK, NULL); 47 47 PS_ASSERT_IMAGES_SIZE_EQUAL(mask2, mask1, NULL); 48 48 } … … 57 57 58 58 // Dereference inputs for convenience 59 ps MaskType **data1 = mask1->data.PS_TYPE_MASK_DATA;60 ps MaskType **data2 = NULL;59 psImageMaskType **data1 = mask1->data.PS_TYPE_IMAGE_MASK_DATA; 60 psImageMaskType **data2 = NULL; 61 61 if (mask2) { 62 data2 = mask2->data.PS_TYPE_ MASK_DATA;62 data2 = mask2->data.PS_TYPE_IMAGE_MASK_DATA; 63 63 } 64 64 … … 86 86 87 87 // Worried about the masks for bad pixels and bad stamps colliding, so make our own mask 88 psImage *mask = psImageAlloc(numCols, numRows, PS_TYPE_ MASK); // The global mask88 psImage *mask = psImageAlloc(numCols, numRows, PS_TYPE_IMAGE_MASK); // The global mask 89 89 psImageInit(mask, 0); 90 ps MaskType **maskData = mask->data.PS_TYPE_MASK_DATA; // Dereference for convenience90 psImageMaskType **maskData = mask->data.PS_TYPE_IMAGE_MASK_DATA; // Dereference for convenience 91 91 92 92 // Block out a border around the edge of the image … … 161 161 162 162 bool pmSubtractionBorder(psImage *image, psImage *weight, psImage *mask, 163 int size, ps MaskType blank)163 int size, psImageMaskType blank) 164 164 { 165 165 PS_ASSERT_IMAGE_NON_NULL(image, false); … … 168 168 PS_ASSERT_IMAGE_NON_NULL(mask, false); 169 169 PS_ASSERT_IMAGES_SIZE_EQUAL(mask, image, false); 170 PS_ASSERT_IMAGE_TYPE(mask, PS_TYPE_ MASK, false);170 PS_ASSERT_IMAGE_TYPE(mask, PS_TYPE_IMAGE_MASK, false); 171 171 } 172 172 if (weight) { … … 211 211 } 212 212 PS_ASSERT_IMAGE_NON_NULL(mask, false); 213 PS_ASSERT_IMAGE_TYPE(mask, PS_TYPE_ MASK, false);213 PS_ASSERT_IMAGE_TYPE(mask, PS_TYPE_IMAGE_MASK, false); 214 214 PS_ASSERT_IMAGES_SIZE_EQUAL(mask, image, false); 215 215 … … 233 233 234 234 int numCols = image->numCols, numRows = image->numRows; // Size of image 235 ps MaskType **maskData = mask->data.PS_TYPE_MASK_DATA; // Dereference mask235 psImageMaskType **maskData = mask->data.PS_TYPE_IMAGE_MASK_DATA; // Dereference mask 236 236 237 237 for (int y = 0; y < numRows; y++) { -
trunk/psModules/src/imcombine/pmSubtractionMask.h
r17729 r21183 7 7 psImage *pmSubtractionMask(const psImage *refMask, ///< Mask for the reference image (will be convolved) 8 8 const psImage *inMask, ///< Mask for the input image, or NULL 9 ps MaskType maskVal, ///< Value to mask out9 psImageMaskType maskVal, ///< Value to mask out 10 10 int size, ///< Half-size of the kernel (pmSubtractionKernels.size) 11 11 int footprint, ///< Half-size of the kernel footprint … … 19 19 psImage *mask, ///< Mask (or NULL) 20 20 int size, ///< Kernel half-size 21 ps MaskType blank ///< Mask value for blank regions21 psImageMaskType blank ///< Mask value for blank regions 22 22 ); 23 23 -
trunk/psModules/src/imcombine/pmSubtractionMatch.c
r21149 r21183 98 98 int inner, int ringsOrder, int binning, float penalty, 99 99 bool optimum, const psVector *optFWHMs, int optOrder, float optThreshold, 100 int iter, float rej, float sysError, ps MaskType maskVal, psMaskType maskBad,101 ps MaskType maskPoor, float poorFrac, float badFrac, pmSubtractionMode subMode)100 int iter, float rej, float sysError, psImageMaskType maskVal, psImageMaskType maskBad, 101 psImageMaskType maskPoor, float poorFrac, float badFrac, pmSubtractionMode subMode) 102 102 { 103 103 if (subMode != PM_SUBTRACTION_MODE_2) { … … 565 565 if (width1 == 0 || width2 == 0) { 566 566 ratios->data.F32[index] = NAN; 567 mask->data.PS_TYPE_ MASK_DATA[index] = 0xff;567 mask->data.PS_TYPE_IMAGE_MASK_DATA[index] = 0xff; 568 568 } else { 569 569 ratios->data.F32[index] = (float)width1 / (float)width2; 570 mask->data.PS_TYPE_ MASK_DATA[index] = 0;570 mask->data.PS_TYPE_IMAGE_MASK_DATA[index] = 0; 571 571 psTrace("psModules.imcombine", 3, "Stamp %d (%.1f,%.1f) widths: %d, %d --> %f\n", 572 572 index, stamp->x, stamp->y, width1, width2, ratios->data.F32[index]); … … 596 596 PM_ASSERT_SUBTRACTION_STAMP_LIST_NON_NULL(stamps, PM_SUBTRACTION_MODE_ERR); 597 597 598 psVector *mask = psVectorAlloc(stamps->num, PS_TYPE_ MASK); // Mask for stamps598 psVector *mask = psVectorAlloc(stamps->num, PS_TYPE_VECTOR_MASK); // Mask for stamps 599 599 psVector *ratios = psVectorAlloc(stamps->num, PS_TYPE_F32); // Ratios of widths 600 600 … … 624 624 pmSubtractionStamp *stamp = stamps->stamps->data[i]; // Stamp of interest 625 625 if (stamp->status != PM_SUBTRACTION_STAMP_CALCULATE && stamp->status != PM_SUBTRACTION_STAMP_USED) { 626 mask->data.PS_TYPE_ MASK_DATA[i] = 0xff;626 mask->data.PS_TYPE_VECTOR_MASK_DATA[i] = 0xff; 627 627 continue; 628 628 } -
trunk/psModules/src/imcombine/pmSubtractionMatch.h
r20568 r21183 40 40 float rej, ///< Rejection threshold 41 41 float sysError, ///< Relative systematic error 42 ps MaskType maskVal, ///< Value to mask for input43 ps MaskType maskBad, ///< Mask for output bad pixels44 ps MaskType maskPoor, ///< Mask for output poor pixels42 psImageMaskType maskVal, ///< Value to mask for input 43 psImageMaskType maskBad, ///< Mask for output bad pixels 44 psImageMaskType maskPoor, ///< Mask for output poor pixels 45 45 float poorFrac, ///< Fraction for "poor" 46 46 float badFrac, ///< Maximum fraction of bad input pixels to accept -
trunk/psModules/src/imcombine/pmSubtractionStamps.c
r20937 r21183 98 98 99 99 // Determine mask value 100 ps MaskType maskVal = PM_SUBTRACTION_MASK_BORDER | PM_SUBTRACTION_MASK_BAD_1 | PM_SUBTRACTION_MASK_BAD_2;100 psImageMaskType maskVal = PM_SUBTRACTION_MASK_BORDER | PM_SUBTRACTION_MASK_BAD_1 | PM_SUBTRACTION_MASK_BAD_2; 101 101 switch (mode) { 102 102 case PM_SUBTRACTION_MODE_1: … … 115 115 116 116 // Check the immediate pixel 117 if (clean && (mask->data.PS_TYPE_ MASK_DATA[y][x] & (maskVal | PM_SUBTRACTION_MASK_REJ))) {117 if (clean && (mask->data.PS_TYPE_IMAGE_MASK_DATA[y][x] & (maskVal | PM_SUBTRACTION_MASK_REJ))) { 118 118 clean = false; 119 119 } … … 126 126 for (int j = yMin; j <= yMax; j++) { 127 127 for (int i = xMin; i <= xMax; i++) { 128 if (mask->data.PS_TYPE_ MASK_DATA[j][i] & maskVal) {128 if (mask->data.PS_TYPE_IMAGE_MASK_DATA[j][i] & maskVal) { 129 129 clean = false; 130 130 goto CHECK_STAMP_MASK_DONE; … … 139 139 for (int j = yMin; j <= yMax; j++) { 140 140 for (int i = xMin; i <= xMax; i++) { 141 mask->data.PS_TYPE_ MASK_DATA[j][i] |= PM_SUBTRACTION_MASK_REJ;141 mask->data.PS_TYPE_IMAGE_MASK_DATA[j][i] |= PM_SUBTRACTION_MASK_REJ; 142 142 } 143 143 } … … 235 235 PS_ASSERT_IMAGE_NON_NULL(subMask, NULL); 236 236 PS_ASSERT_IMAGES_SIZE_EQUAL(image, subMask, NULL); 237 PS_ASSERT_IMAGE_TYPE(subMask, PS_TYPE_ MASK, NULL);237 PS_ASSERT_IMAGE_TYPE(subMask, PS_TYPE_IMAGE_MASK, NULL); 238 238 } 239 239 PS_ASSERT_INT_NONNEGATIVE(footprint, NULL); … … 377 377 if (subMask) { 378 378 PS_ASSERT_IMAGE_NON_NULL(subMask, NULL); 379 PS_ASSERT_IMAGE_TYPE(subMask, PS_TYPE_ MASK, NULL);379 PS_ASSERT_IMAGE_TYPE(subMask, PS_TYPE_IMAGE_MASK, NULL); 380 380 if (image) { 381 381 PS_ASSERT_IMAGE_NON_NULL(image, NULL);
Note:
See TracChangeset
for help on using the changeset viewer.
