- Timestamp:
- Jan 31, 2010, 5:00:42 PM (16 years ago)
- Location:
- branches/eam_branches/psModules.stack.20100120
- Files:
-
- 2 edited
-
. (modified) (1 prop)
-
src/imcombine/pmSubtraction.c (modified) (7 diffs)
Legend:
- Unmodified
- Added
- Removed
-
branches/eam_branches/psModules.stack.20100120
- Property svn:mergeinfo changed
/branches/eam_branches/20091201/psModules (added) merged: 26686-26687,26693,26702-26703,26731-26735,26737,26739,26741-26743
- Property svn:mergeinfo changed
-
branches/eam_branches/psModules.stack.20100120/src/imcombine/pmSubtraction.c
r26667 r26747 424 424 } else if (*source & subConvPoor) { 425 425 *target |= maskPoor; 426 } else { 427 *target &= ~maskBad & ~maskPoor; 426 428 } 427 429 } … … 574 576 } 575 577 578 void p_pmSubtractionPolynomialNormCoords(float *xOut, float *yOut, float xIn, float yIn, 579 int xMin, int xMax, int yMin, int yMax) 580 { 581 float xNormSize = xMax - xMin, yNormSize = yMax - yMin; // Size to use for normalisation 582 *xOut = 2.0 * (float)(xIn - xMin - xNormSize/2.0) / xNormSize; 583 *yOut = 2.0 * (float)(yIn - yMin - yNormSize/2.0) / yNormSize; 584 return; 585 } 586 576 587 psImage *p_pmSubtractionPolynomialFromCoords(psImage *output, const pmSubtractionKernels *kernels, 577 int numCols, int numRows, intx, int y)588 int x, int y) 578 589 { 579 590 assert(kernels); 580 assert(numCols > 0 && numRows > 0); 581 582 // Size to use when calculating normalised coordinates (different from actual size when convolving 583 // subimage) 584 int xNormSize = (kernels->numCols > 0 ? kernels->numCols : numCols); 585 int yNormSize = (kernels->numRows > 0 ? kernels->numRows : numRows); 586 587 // Normalised coordinates 588 float yNorm = 2.0 * (float)(y - yNormSize/2.0) / (float)yNormSize; 589 float xNorm = 2.0 * (float)(x - xNormSize/2.0) / (float)xNormSize; 590 591 592 float xNorm, yNorm; // Normalised coordinates 593 p_pmSubtractionPolynomialNormCoords(&xNorm, &yNorm, x, y, 594 kernels->xMin, kernels->xMax, kernels->yMin, kernels->yMax); 591 595 return p_pmSubtractionPolynomial(output, kernels->spatialOrder, xNorm, yNorm); 592 596 } … … 1072 1076 // Only generate polynomial values every kernel footprint, since we have already assumed 1073 1077 // (with the stamps) that it does not vary rapidly on this scale. 1074 psImage *polyValues = p_pmSubtractionPolynomialFromCoords(NULL, kernels, numCols, numRows, 1075 xMin + x0 + size + 1, 1076 yMin + y0 + size + 1); 1078 psImage *polyValues = p_pmSubtractionPolynomialFromCoords(NULL, kernels, xMin + x0 + size + 1, 1079 yMin + y0 + size + 1); // Polynomial 1077 1080 float background = doBG ? p_pmSubtractionSolutionBackground(kernels, polyValues) : 0.0; // Background term 1078 1081 … … 1158 1161 PM_ASSERT_READOUT_NON_NULL(ro1, false); 1159 1162 PM_ASSERT_READOUT_IMAGE(ro1, false); 1163 PM_ASSERT_READOUT_IMAGE(out1, false); 1160 1164 numCols = ro1->image->numCols; 1161 1165 numRows = ro1->image->numRows; … … 1167 1171 PM_ASSERT_READOUT_NON_NULL(ro2, false); 1168 1172 PM_ASSERT_READOUT_IMAGE(ro2, false); 1173 PM_ASSERT_READOUT_IMAGE(out2, false); 1169 1174 if (numCols == 0 && numRows == 0) { 1170 1175 numCols = ro2->image->numCols; … … 1200 1205 bool threaded = pmSubtractionThreaded(); // Running threaded? 1201 1206 1202 // Outputs1203 if (kernels->mode == PM_SUBTRACTION_MODE_1 || kernels->mode == PM_SUBTRACTION_MODE_DUAL) {1204 if (!out1->image) {1205 out1->image = psImageAlloc(numCols, numRows, PS_TYPE_F32);1206 }1207 if (ro1->variance) {1208 if (!out1->variance) {1209 out1->variance = psImageAlloc(numCols, numRows, PS_TYPE_F32);1210 }1211 psImageInit(out1->variance, 0.0);1212 }1213 }1214 if (kernels->mode == PM_SUBTRACTION_MODE_2 || kernels->mode == PM_SUBTRACTION_MODE_DUAL) {1215 if (!out2->image) {1216 out2->image = psImageAlloc(numCols, numRows, PS_TYPE_F32);1217 }1218 if (ro2->variance) {1219 if (!out2->variance) {1220 out2->variance = psImageAlloc(numCols, numRows, PS_TYPE_F32);1221 }1222 psImageInit(out2->variance, 0.0);1223 }1224 }1225 1207 psImage *convMask = NULL; // Convolved mask image (common to inputs 1 and 2) 1226 1208 if (subMask) { 1227 1209 if (kernels->mode == PM_SUBTRACTION_MODE_1 || kernels->mode == PM_SUBTRACTION_MODE_DUAL) { 1228 if (!out1->mask) {1229 out1->mask = psImageAlloc(numCols, numRows, PS_TYPE_IMAGE_MASK);1230 }1231 psImageInit(out1->mask, 0);1232 1210 convMask = out1->mask; 1233 1211 } 1234 1212 if (kernels->mode == PM_SUBTRACTION_MODE_2 || kernels->mode == PM_SUBTRACTION_MODE_DUAL) { 1235 if (!out2->mask) {1236 out2->mask = psImageAlloc(numCols, numRows, PS_TYPE_IMAGE_MASK);1237 }1238 psImageInit(out2->mask, 0);1239 1213 if (!convMask) { 1240 1214 convMask = out2->mask; … … 1256 1230 1257 1231 // Get region for convolution: [xMin:xMax,yMin:yMax] 1258 int xMin = size, xMax = numCols- size;1259 int yMin = size, yMax = numRows- size;1232 int xMin = kernels->xMin + size, xMax = kernels->xMax - size; 1233 int yMin = kernels->yMin + size, yMax = kernels->yMax - size; 1260 1234 if (region) { 1261 1235 xMin = PS_MAX(region->x0, xMin);
Note:
See TracChangeset
for help on using the changeset viewer.
