Changeset 18043 for trunk/psLib
- Timestamp:
- Jun 9, 2008, 4:43:01 PM (18 years ago)
- File:
-
- 1 edited
-
trunk/psLib/src/imageops/psImageInterpolate.c (modified) (5 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
Note:
See TracChangeset
for help on using the changeset viewer.
