Changeset 18043
- Timestamp:
- Jun 9, 2008, 4:43:01 PM (18 years ago)
- Location:
- trunk
- Files:
-
- 2 edited
-
psLib/src/imageops/psImageInterpolate.c (modified) (5 diffs)
-
psModules/src/imcombine/pmSubtraction.c (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/psLib/src/imageops/psImageInterpolate.c
r16351 r18043 7 7 * @author Paul Price, IfA 8 8 * 9 * @version $Revision: 1.1 0$ $Name: not supported by cvs2svn $10 * @date $Date: 2008-0 2-07 04:03:22$9 * @version $Revision: 1.11 $ $Name: not supported by cvs2svn $ 10 * @date $Date: 2008-06-10 02:42:41 $ 11 11 * 12 12 * Copyright 2004-2007 Institute for Astronomy, University of Hawaii … … 312 312 #define KERNEL_VARIANCE_CASE(TYPE) \ 313 313 case PS_TYPE_##TYPE: { \ 314 double sumKernel2 = 0.0; /* Sum of kernel squares */ \ 314 315 for (int j = 0, yPix = yCentral - (yNum - 1) / 2; j < yNum; j++, yPix++) { \ 315 316 for (int i = 0, xPix = xCentral - (xNum - 1) / 2; i < xNum; i++, xPix++) { \ 316 *varianceValue += PS_SQR(kernel[j][i]) * variance->data.TYPE[yPix][xPix]; \ 317 double kernel2 = PS_SQR(kernel[j][i]); /* Kernel squared */ \ 318 sumKernel2 += kernel2; \ 319 *varianceValue += kernel2 * variance->data.TYPE[yPix][xPix]; \ 317 320 } \ 318 321 } \ 322 *varianceValue /= sumKernel2; /* Normalise so that sum of kernel squares is unity */ \ 319 323 break; \ 320 324 } … … 542 546 #define SEPARATE_VARIANCE_CASE(TYPE) \ 543 547 case PS_TYPE_##TYPE: { \ 548 double ySumKernel2 = 0.0; /* Sum of kernel squared in y */ \ 544 549 for (int j = 0, yPix = yCentral - (yNum - 1) / 2; j < yNum; j++, yPix++) { \ 550 double xSumKernel2 = 0.0; /* Sum of kernel squared in x */ \ 545 551 double xInterpValue = 0.0; /* Interpolation in x */ \ 546 552 for (int i = 0, xPix = xCentral - (xNum - 1) / 2; i < xNum; i++, xPix++) { \ 547 xInterpValue += PS_SQR(xKernel[i]) * variance->data.TYPE[yPix][xPix]; \ 553 double kernel2 = PS_SQR(xKernel[i]); /* Kernel squared */ \ 554 xSumKernel2 += kernel2; \ 555 xInterpValue += kernel2 * variance->data.TYPE[yPix][xPix]; \ 548 556 } \ 549 *varianceValue += xInterpValue * PS_SQR(yKernel[j]); /* Interpolating in y */ \ 557 double kernel2 = PS_SQR(yKernel[j]); /* Kernel squared */ \ 558 ySumKernel2 += xSumKernel2 * kernel2; \ 559 *varianceValue += xInterpValue * kernel2; /* Interpolating in y */ \ 550 560 } \ 551 561 break; \ … … 576 586 577 587 psImageInterpolateStatus psImageInterpolate(double *imageValue, double *varianceValue, psMaskType *maskValue, 578 float x, float y, const psImageInterpolateOptions *options)588 float x, float y, const psImageInterpolateOptions *options) 579 589 { 580 590 PS_ASSERT_PTR_NON_NULL(options, PS_INTERPOLATE_STATUS_ERROR); … … 588 598 PS_ASSERT_IMAGE_NON_NULL(variance, PS_INTERPOLATE_STATUS_ERROR); 589 599 PS_ASSERT_IMAGE_TYPE(variance, image->type.type, PS_INTERPOLATE_STATUS_ERROR); 590 PS_ASSERT_IMAGES_SIZE_EQUAL(variance, image, PS_INTERPOLATE_STATUS_ERROR); 600 psAssert(image->numCols == variance->numCols && image->numRows == variance->numRows, 601 "Image and variance sizes"); 591 602 } 592 603 if (maskValue && mask) { 593 604 PS_ASSERT_IMAGE_NON_NULL(mask, PS_INTERPOLATE_STATUS_ERROR); 594 605 PS_ASSERT_IMAGE_TYPE(mask, PS_TYPE_MASK, PS_INTERPOLATE_STATUS_ERROR); 595 if ((image->numCols != mask->numCols) || (image->numRows != mask->numRows)) { 596 psAbort ("programming error"); 597 } 598 PS_ASSERT_IMAGES_SIZE_EQUAL(mask, image, PS_INTERPOLATE_STATUS_ERROR); 599 // XXX these should probably be asserts, not PS_ASSERTS 606 psAssert(image->numCols == mask->numCols && image->numRows == mask->numRows, "Image and mask sizes"); 600 607 } 601 608 -
trunk/psModules/src/imcombine/pmSubtraction.c
r17811 r18043 4 4 * @author GLG, MHPCC 5 5 * 6 * @version $Revision: 1.9 2$ $Name: not supported by cvs2svn $7 * @date $Date: 2008-0 5-24 23:24:15$6 * @version $Revision: 1.93 $ $Name: not supported by cvs2svn $ 7 * @date $Date: 2008-06-10 02:43:01 $ 8 8 * 9 9 * Copyright 2004-2007 Institute for Astronomy, University of Hawaii … … 50 50 51 51 // Take the square of the normal kernel 52 double sumNormal = 0.0, sumVariance = 0.0; // Sum of the normal and variance kernels 52 53 for (int v = yMin; v <= yMax; v++) { 53 54 for (int u = xMin; u <= xMax; u++) { 54 out->kernel[v][u] = PS_SQR(normalKernel->kernel[v][u]); 55 } 56 } 55 float value = normalKernel->kernel[v][u]; // Value of interest 56 float value2 = PS_SQR(value); // Value squared 57 sumNormal += value; 58 sumVariance += value2; 59 out->kernel[v][u] = value2; 60 } 61 } 62 63 // Normalise so that the sum of the variance kernel is the square of the sum of the normal kernel 64 // This is required to keep the relative scaling between the image and the weight map 65 psBinaryOp(out->image, out->image, "*", psScalarAlloc(PS_SQR(sumNormal) / sumVariance, PS_TYPE_F32)); 57 66 58 67 return out;
Note:
See TracChangeset
for help on using the changeset viewer.
