Changeset 20325 for trunk/psLib/src/imageops/psImageInterpolate.c
- Timestamp:
- Oct 22, 2008, 8:40:36 AM (18 years ago)
- File:
-
- 1 edited
-
trunk/psLib/src/imageops/psImageInterpolate.c (modified) (8 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/psLib/src/imageops/psImageInterpolate.c
r20317 r20325 7 7 * @author Paul Price, IfA 8 8 * 9 * @version $Revision: 1.2 7$ $Name: not supported by cvs2svn $10 * @date $Date: 2008-10-22 03:53:10$9 * @version $Revision: 1.28 $ $Name: not supported by cvs2svn $ 10 * @date $Date: 2008-10-22 18:40:36 $ 11 11 * 12 12 * Copyright 2004-2007 Institute for Astronomy, University of Hawaii … … 429 429 *imageValue = sumImage / sumKernel; \ 430 430 if (wantVariance) { \ 431 *varianceValue = sumVariance / sumKernel2; \431 *varianceValue = sumVariance / (sumKernel2 - sumBad); \ 432 432 } \ 433 433 if (sumBad == 0) { \ 434 434 /* Completely good pixel */ \ 435 435 status = PS_INTERPOLATE_STATUS_GOOD; \ 436 } else if (sumBad < PS_SQR(interp->poorFrac) * (sumBad + sumKernel2)) { \436 } else if (sumBad < PS_SQR(interp->poorFrac) * sumKernel2) { \ 437 437 /* Some pixels masked: poor pixel */ \ 438 438 if (haveMask && maskValue) { \ … … 535 535 536 536 if (offImage) { 537 // Add contributions in an area outside the image538 #define INTERPOLATE_SEPARATE_SETUP_OFFIMAGE_COL() \539 float xSumBad = 0.0;540 #define INTERPOLATE_SEPARATE_ADD_OFFIMAGE_COL() { \541 xSumBad += xKernel2[i]; \542 }543 #define INTERPOLATE_SEPARATE_ADD_OFFIMAGE_ROW() { \544 sumBad += yKernel2[j] * xSumBad; \545 }546 547 537 // Bottom rows 548 if (!yExact) { 549 for (int j = 0; j < jMin; j++) { 550 INTERPOLATE_SEPARATE_SETUP_OFFIMAGE_COL(); 551 for (int i = 0; i < size; i++) { 552 INTERPOLATE_SEPARATE_ADD_OFFIMAGE_COL(); 553 } 554 INTERPOLATE_SEPARATE_ADD_OFFIMAGE_ROW(); 538 for (int j = 0; j < jMin; j++) { 539 sumBad += yKernel2[j] * xSumKernel2; 540 } 541 // Two sides 542 for (int j = jMin; j < jMax; j++) { 543 float xSumBad = 0.0; 544 for (int i = 0; i < iMin; i++) { 545 xSumBad += xKernel2[i]; 555 546 } 556 } 557 // Two sides 558 if (!xExact) { 559 for (int j = jMin; j < jMax; j++) { 560 INTERPOLATE_SEPARATE_SETUP_OFFIMAGE_COL(); 561 for (int i = 0; i < iMin; i++) { 562 INTERPOLATE_SEPARATE_ADD_OFFIMAGE_COL(); 563 } 564 for (int i = iMax; i < size; i++) { 565 INTERPOLATE_SEPARATE_ADD_OFFIMAGE_COL(); 566 } 567 INTERPOLATE_SEPARATE_ADD_OFFIMAGE_ROW(); 547 for (int i = iMax; i < size; i++) { 548 xSumBad += xKernel2[i]; 568 549 } 550 sumBad += ySumKernel2 * xSumBad; 569 551 } 570 552 // Top rows 571 if (!yExact) { 572 for (int j = jMax; j < size; j++) { 573 if (!xExact) { 574 INTERPOLATE_SEPARATE_SETUP_OFFIMAGE_COL(); 575 for (int i = 0; i < size; i++) { 576 INTERPOLATE_SEPARATE_ADD_OFFIMAGE_COL(); 577 } 578 INTERPOLATE_SEPARATE_ADD_OFFIMAGE_ROW(); 579 } 580 } 581 } 582 } 553 for (int j = jMax; j < size; j++) { 554 sumBad += yKernel2[j] * xSumKernel2; 555 } 556 } 557 558 yKernel += jMin; 559 yKernel2 += jMin; 560 xKernel += iMin; 561 xKernel2 += iMin; 583 562 584 563 #define INTERPOLATE_SEPARATE_CASE(TYPE) \ … … 600 579 const psF32 *xKernelData = xKernel; \ 601 580 const psF32 *xKernel2Data = xKernel2; \ 602 for (int i = iMin, xPix = xMin; i < iMax; \ 603 i++, xPix++, imageData++, varianceData++, maskData++, \ 604 xKernelData++, xKernel2Data++) { \ 581 for (int i = iMin; i < iMax; i++, imageData++, varianceData++, maskData++, \ 582 xKernelData++, xKernel2Data++) { \ 605 583 float kernelValue = *xKernelData; /* Value of kernel in x */ \ 606 584 float kernelValue2 = *xKernel2Data; /* Square of kernel in x */ \ … … 613 591 } \ 614 592 } \ 615 float kernelValue = *yKernel ; /* Value of kernel in y */ \593 float kernelValue = *yKernelData; /* Value of kernel in y */ \ 616 594 float kernelValue2 = *yKernel2Data; /* Value of kernel-squared in y */ \ 617 595 sumImage += kernelValue * xSumImage; \ … … 633 611 const psF32 *xKernelData = xKernel; \ 634 612 const psF32 *xKernel2Data = xKernel2; \ 635 for (int i = iMin , xPix = xMin; i < iMax;\636 i++, xPix++, imageData++, varianceData++,xKernelData++, xKernel2Data++) { \613 for (int i = iMin; i < iMax; i++, imageData++, varianceData++, \ 614 xKernelData++, xKernel2Data++) { \ 637 615 float kernelValue = *xKernelData; /* Value of kernel */ \ 638 616 float kernelValue2 = *xKernel2Data; /* Square of kernel */ \ … … 661 639 const psF32 *xKernelData = xKernel; \ 662 640 const psF32 *xKernel2Data = xKernel2; \ 663 for (int i = iMin, xPix = xMin; i < iMax; \ 664 i++, xPix++, imageData++, maskData++, xKernelData++, xKernel2Data++) { \ 641 for (int i = iMin; i < iMax; i++, imageData++, maskData++, xKernelData++, xKernel2Data++) { \ 665 642 float kernelValue = *xKernelData; /* Value of kernel */ \ 666 643 float kernelValue2 = *xKernel2Data; /* Value of kernel-squared */ \ … … 687 664 const ps##TYPE *imageData = &image->data.TYPE[yPix][xMin]; \ 688 665 const psF32 *xKernelData = xKernel; \ 689 for (int i = iMin , xPix = xMin; i < iMax; i++, xPix++, imageData++, xKernelData++) { \666 for (int i = iMin; i < iMax; i++, imageData++, xKernelData++) { \ 690 667 float kernelValue = *xKernelData; /* Value of kernel */ \ 691 668 xSumImage += kernelValue * *imageData; \
Note:
See TracChangeset
for help on using the changeset viewer.
