Changeset 21297
- Timestamp:
- Feb 4, 2009, 2:01:25 PM (17 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/pap_branch_20090128/psModules/src/imcombine/pmSubtraction.c
r21293 r21297 997 997 998 998 // XXX Put kernelImage, kernelVariance and polyValues on thread-dependent data 999 static bool subtractionConvolvePatch(int numCols, int numRows, // Size of image 999 static bool subtractionConvolvePatch(psKernel **covar1, psKernel **covar2, // Covariance matrices 1000 int numCols, int numRows, // Size of image 1000 1001 int x0, int y0, // Offsets for image 1001 1002 pmReadout *out1, pmReadout *out2, // Output readouts … … 1030 1031 ro1->image, ro1->variance, sys1, subMask, kernels, polyValues, background, *region, 1031 1032 maskBad, maskPoor, poorFrac, useFFT, false); 1033 *covar1 = psImageCovarianceCalculate(kernelImage, ro1->covariance); 1032 1034 } 1033 1035 if (kernels->mode == PM_SUBTRACTION_MODE_2 || kernels->mode == PM_SUBTRACTION_MODE_DUAL) { … … 1035 1037 ro2->image, ro2->variance, sys2, subMask, kernels, polyValues, background, *region, 1036 1038 maskBad, maskPoor, poorFrac, useFFT, kernels->mode == PM_SUBTRACTION_MODE_DUAL); 1039 *covar2 = psImageCovarianceCalculate(kernelImage, ro2->covariance); 1037 1040 } 1038 1041 … … 1090 1093 bool useFFT = PS_SCALAR_VALUE(args->data[18], PS_TYPE_IMAGE_MASK_DATA); // Use FFT for convolution? 1091 1094 1092 return subtractionConvolvePatch(numCols, numRows, x0, y0, out1, out2, convMask, ro1, ro2, sys1, sys2, 1093 subMask, maskBad, maskPoor, poorFrac, region, kernels, doBG, useFFT); 1095 psKernel *covar1 = NULL, *covar2 = NULL; // Covariance matrices to return 1096 1097 if (!subtractionConvolvePatch(&covar1, &covar2, numCols, numRows, x0, y0, out1, out2, convMask, ro1, ro2, 1098 sys1, sys2, subMask, maskBad, maskPoor, poorFrac, region, kernels, doBG, 1099 useFFT)) { 1100 return false; 1101 } 1102 psArrayAdd(job->results, 1, covar1); 1103 psArrayAdd(job->results, 1, covar2); 1104 psFree(covar1); 1105 psFree(covar2); 1106 1107 return true; 1094 1108 } 1095 1109 … … 1251 1265 stride = 2 * size + 1; 1252 1266 } 1267 1268 psList *covariances1 = psListAlloc(NULL), *covariances2 = psListAlloc(NULL); // List of covariances 1253 1269 1254 1270 for (int j = yMin; j < yMax; j += stride) { … … 1306 1322 psFree(job); 1307 1323 } else { 1308 subtractionConvolvePatch(numCols, numRows, x0, y0, out1, out2, convMask, ro1, ro2, 1309 sys1, sys2, subMask, maskBad, maskPoor, poorFrac, subRegion, 1310 kernels, doBG, useFFT); 1324 psKernel *covar1 = NULL, *covar2 = NULL; // Covariance matrices 1325 subtractionConvolvePatch(&covar1, &covar2, numCols, numRows, x0, y0, out1, out2, convMask, 1326 ro1, ro2, sys1, sys2, subMask, maskBad, maskPoor, poorFrac, 1327 subRegion, kernels, doBG, useFFT); 1328 if (covar1) { 1329 psListAdd(covariances1, PS_LIST_TAIL, covar1); 1330 } 1331 if (covar2) { 1332 psListAdd(covariances2, PS_LIST_TAIL, covar2); 1333 } 1334 psFree(covar1); 1335 psFree(covar2); 1311 1336 } 1312 1337 psFree(subRegion); … … 1328 1353 psAssert(strcmp(job->type, "PSMODULES_SUBTRACTION_CONVOLVE") == 0, 1329 1354 "Job has incorrect type: %s", job->type); 1355 psAssert(job->results->n == 2, "Job has insufficient results: %ld", job->results->n); 1356 if (job->results->data[0]) { 1357 psListAdd(covariances1, PS_LIST_TAIL, job->results->data[0]); 1358 } 1359 if (job->results->data[1]) { 1360 psListAdd(covariances2, PS_LIST_TAIL, job->results->data[1]); 1361 } 1330 1362 psFree(job); 1331 1363 } … … 1341 1373 } 1342 1374 } 1343 1344 1375 psImageConvolveSetThreads(oldThreads); 1345 1376 1346 1377 psFree(sys1); 1347 1378 psFree(sys2); 1379 1380 if (psListLength(covariances1) > 0) { 1381 psArray *covar = psListToArray(covariances1); 1382 out1->covariance = psImageCovarianceAverage(covar); 1383 psFree(covar); 1384 } 1385 if (psListLength(covariances2) > 0) { 1386 psArray *covar = psListToArray(covariances2); 1387 out2->covariance = psImageCovarianceAverage(covar); 1388 psFree(covar); 1389 } 1390 psFree(covariances1); 1391 psFree(covariances2); 1348 1392 1349 1393 // Copy anything that wasn't convolved
Note:
See TracChangeset
for help on using the changeset viewer.
