Changeset 27365 for trunk/psModules/src/imcombine/pmSubtractionMatch.c
- Timestamp:
- Mar 19, 2010, 5:09:20 PM (16 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/psModules/src/imcombine/pmSubtractionMatch.c
r27086 r27365 132 132 if (subMode != PM_SUBTRACTION_MODE_2) { 133 133 PM_ASSERT_READOUT_NON_NULL(conv1, false); 134 PM_ASSERT_READOUT_NON_NULL(ro1, false); 135 PM_ASSERT_READOUT_IMAGE(ro1, false); 134 136 if (conv1->image) { 135 137 psFree(conv1->image); … … 147 149 if (subMode != PM_SUBTRACTION_MODE_1) { 148 150 PM_ASSERT_READOUT_NON_NULL(conv2, false); 151 PM_ASSERT_READOUT_NON_NULL(ro2, false); 152 PM_ASSERT_READOUT_IMAGE(ro2, false); 149 153 if (conv2->image) { 150 154 psFree(conv2->image); … … 161 165 } 162 166 163 PM_ASSERT_READOUT_NON_NULL(ro1, false); 164 PM_ASSERT_READOUT_NON_NULL(ro2, false); 165 PM_ASSERT_READOUT_IMAGE(ro1, false); 166 PM_ASSERT_READOUT_IMAGE(ro2, false); 167 PS_ASSERT_IMAGES_SIZE_EQUAL(ro1->image, ro2->image, false); 167 if (ro1 && ro2) { 168 PS_ASSERT_IMAGES_SIZE_EQUAL(ro1->image, ro2->image, false); 169 } 168 170 PS_ASSERT_INT_NONNEGATIVE(stride, false); 169 171 if (isfinite(normFrac)) { … … 379 381 } 380 382 383 int numCols, numRows; // Size of image 384 if (ro1) { 385 numCols = ro1->image->numCols; 386 numRows = ro1->image->numRows; 387 } else if (ro2) { 388 numCols = ro2->image->numCols; 389 numRows = ro2->image->numRows; 390 } else { 391 psAbort("No input image provided."); 392 } 393 381 394 pmSubtractionMaskInvalid(ro1, maskVal); 382 395 pmSubtractionMaskInvalid(ro2, maskVal); 396 397 // General background subtraction, since this is done in pmSubtractionMatch 398 { 399 psRandom *rng = psRandomAlloc(PS_RANDOM_TAUS); // Random number generator 400 psStats *bg = psStatsAlloc(PS_STAT_ROBUST_MEDIAN); // Statistics for background 401 if (ro1) { 402 psStatsInit(bg); 403 if (!psImageBackground(bg, NULL, ro1->image, ro1->mask, maskVal, rng)) { 404 psError(PM_ERR_DATA, false, "Unable to measure background statistics."); 405 psFree(bg); 406 psFree(rng); 407 return false; 408 } 409 psBinaryOp(ro1->image, ro1->image, "-", psScalarAlloc((float)bg->robustMedian, PS_TYPE_F32)); 410 } 411 if (ro2) { 412 psStatsInit(bg); 413 if (!psImageBackground(bg, NULL, ro2->image, ro2->mask, maskVal, rng)) { 414 psError(PM_ERR_DATA, false, "Unable to measure background statistics."); 415 psFree(bg); 416 psFree(rng); 417 return false; 418 } 419 psBinaryOp(ro2->image, ro2->image, "-", psScalarAlloc((float)bg->robustMedian, PS_TYPE_F32)); 420 } 421 psFree(bg); 422 psFree(rng); 423 } 383 424 384 425 psRegion bounds = psRegionSet(NAN, NAN, NAN, NAN); // Bounds of valid pixels … … 396 437 psMetadata *outHeader = psMetadataAlloc(); // Output header values 397 438 398 int numCols = ro1->image->numCols, numRows = ro1->image->numRows; // Size of image399 439 subtractionMatchAlloc(conv1, conv2, ro1, ro2, subMask, maskBad, mode, numCols, numRows); 400 440 … … 404 444 psRegion *region = regions->data[i]; // Region of interest 405 445 406 if (!pmSubtractionAnalysis(outAnalysis, outHeader, kernel, region, 407 ro1->image->numCols, ro1->image->numRows)) { 446 if (!pmSubtractionAnalysis(outAnalysis, outHeader, kernel, region, numCols, numRows)) { 408 447 psError(psErrorCodeLast(), false, "Unable to generate QA data"); 409 448 psFree(outAnalysis); … … 454 493 return false; 455 494 } 495 496 // We need both inputs 497 PM_ASSERT_READOUT_NON_NULL(ro1, false); 498 PM_ASSERT_READOUT_NON_NULL(ro2, false); 456 499 457 500 PS_ASSERT_INT_NONNEGATIVE(footprint, false);
Note:
See TracChangeset
for help on using the changeset viewer.
