Changeset 27365 for trunk/psModules/src/imcombine/pmSubtractionMask.c
- Timestamp:
- Mar 19, 2010, 5:09:20 PM (16 years ago)
- File:
-
- 1 edited
-
trunk/psModules/src/imcombine/pmSubtractionMask.c (modified) (6 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/psModules/src/imcombine/pmSubtractionMask.c
r27086 r27365 42 42 pmSubtractionMode mode) 43 43 { 44 PM_ASSERT_READOUT_NON_NULL(ro1, NULL); 45 PM_ASSERT_READOUT_IMAGE(ro1, NULL); 46 PM_ASSERT_READOUT_MASK(ro1, NULL); 47 PM_ASSERT_READOUT_NON_NULL(ro2, NULL); 48 PM_ASSERT_READOUT_IMAGE(ro2, NULL); 49 PM_ASSERT_READOUT_MASK(ro2, NULL); 50 PS_ASSERT_IMAGES_SIZE_EQUAL(ro1->image, ro2->image, NULL); 44 int numCols = 0, numRows = 0; // Size of the images 45 if (ro1) { 46 PM_ASSERT_READOUT_NON_NULL(ro1, NULL); 47 PM_ASSERT_READOUT_IMAGE(ro1, NULL); 48 PM_ASSERT_READOUT_MASK(ro1, NULL); 49 numCols = ro1->image->numCols; 50 numRows = ro1->image->numRows; 51 } 52 if (ro2) { 53 PM_ASSERT_READOUT_NON_NULL(ro2, NULL); 54 PM_ASSERT_READOUT_IMAGE(ro2, NULL); 55 PM_ASSERT_READOUT_MASK(ro2, NULL); 56 numCols = ro2->image->numCols; 57 numRows = ro2->image->numRows; 58 } 59 if (ro1 && ro2) { 60 PS_ASSERT_IMAGES_SIZE_EQUAL(ro1->image, ro2->image, NULL); 61 } 62 if (!ro1 && !ro2) { 63 psError(PS_ERR_UNEXPECTED_NULL, true, "No image provided."); 64 return false; 65 } 66 psAssert(numCols > 0 && numRows > 0, "There should be an image provided"); 51 67 PS_ASSERT_INT_NONNEGATIVE(size, NULL); 52 68 PS_ASSERT_INT_NONNEGATIVE(footprint, NULL); … … 56 72 } 57 73 58 int numCols = ro1->image->numCols, numRows = ro1->image->numRows; // Size of the images59 60 74 // Dereference inputs for convenience 61 psF32 **imageData1 = ro1->image->data.F32, **imageData2 = ro2->image->data.F32; 62 psImageMaskType **maskData1 = ro1->mask->data.PS_TYPE_IMAGE_MASK_DATA, 63 **maskData2 = ro2->mask->data.PS_TYPE_IMAGE_MASK_DATA; 75 psF32 **imageData1 = ro1 ? ro1->image->data.F32 : NULL; 76 psF32 **imageData2 = ro2 ? ro2->image->data.F32 : NULL; 77 psImageMaskType **maskData1 = ro1 ? ro1->mask->data.PS_TYPE_IMAGE_MASK_DATA : NULL; 78 psImageMaskType **maskData2 = ro2 ? ro2->mask->data.PS_TYPE_IMAGE_MASK_DATA : NULL; 64 79 65 80 // First, a pass through to determine the fraction of bad pixels … … 69 84 for (int y = 0; y < numRows; y++) { 70 85 for (int x = 0; x < numCols; x++) { 71 if ( (maskData1[y][x] & maskVal) || !isfinite(imageData1[y][x])) {86 if (ro1 && ((maskData1[y][x] & maskVal) || !isfinite(imageData1[y][x]))) { 72 87 numBad++; 73 88 continue; 74 89 } 75 if ( (maskData2[y][x] & maskVal) || !isfinite(imageData2[y][x])) {90 if (ro2 && ((maskData2[y][x] & maskVal) || !isfinite(imageData2[y][x]))) { 76 91 numBad++; 77 92 continue; … … 128 143 for (int y = 0; y < numRows; y++) { 129 144 for (int x = 0; x < numCols; x++) { 130 if ( maskData1[y][x] & maskVal) {145 if (ro1 && maskData1[y][x] & maskVal) { 131 146 maskData[y][x] |= PM_SUBTRACTION_MASK_BAD_1; 132 147 } 133 if ( maskData2[y][x] & maskVal) {148 if (ro2 && maskData2[y][x] & maskVal) { 134 149 maskData[y][x] |= PM_SUBTRACTION_MASK_BAD_2; 135 150 } … … 144 159 145 160 // Pixels that will be bad (or poor) if we convolve with a bad reference pixel 146 if ( !psImageConvolveMask(mask, mask, PM_SUBTRACTION_MASK_BAD_1, PM_SUBTRACTION_MASK_CONVOLVE_1,147 -size, size, -size, size)) {161 if (ro1 && !psImageConvolveMask(mask, mask, PM_SUBTRACTION_MASK_BAD_1, PM_SUBTRACTION_MASK_CONVOLVE_1, 162 -size, size, -size, size)) { 148 163 psError(psErrorCodeLast(), false, "Unable to convolve bad pixels from mask 1."); 149 164 psFree(mask); 150 165 return NULL; 151 166 } 152 if ( !psImageConvolveMask(mask, mask, PM_SUBTRACTION_MASK_BAD_2, PM_SUBTRACTION_MASK_CONVOLVE_2,153 -size, size, -size, size)) {167 if (ro2 && !psImageConvolveMask(mask, mask, PM_SUBTRACTION_MASK_BAD_2, PM_SUBTRACTION_MASK_CONVOLVE_2, 168 -size, size, -size, size)) { 154 169 psError(psErrorCodeLast(), false, "Unable to convolve bad pixels from mask 2."); 155 170 psFree(mask); … … 174 189 psAbort("Unsupported subtraction mode: %x", mode); 175 190 } 176 if ( !psImageConvolveMask(mask, mask, maskRej, PM_SUBTRACTION_MASK_REJ,177 -footprint, footprint, -footprint, footprint)) {191 if (ro1 && ro2 && !psImageConvolveMask(mask, mask, maskRej, PM_SUBTRACTION_MASK_REJ, 192 -footprint, footprint, -footprint, footprint)) { 178 193 psError(psErrorCodeLast(), false, "Unable to convolve bad pixels."); 179 194 psFree(mask);
Note:
See TracChangeset
for help on using the changeset viewer.
