Changeset 13395
- Timestamp:
- May 15, 2007, 5:53:36 PM (19 years ago)
- File:
-
- 1 edited
-
trunk/psModules/src/imcombine/pmSubtraction.c (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/psModules/src/imcombine/pmSubtraction.c
r13390 r13395 4 4 * @author GLG, MHPCC 5 5 * 6 * @version $Revision: 1. 8$ $Name: not supported by cvs2svn $7 * @date $Date: 2007-05-16 0 1:04:43$6 * @version $Revision: 1.9 $ $Name: not supported by cvs2svn $ 7 * @date $Date: 2007-05-16 03:53:36 $ 8 8 * 9 9 * Copyright 2004-2007 Institute for Astronomy, University of Hawaii … … 621 621 psKernel *kernelWeight = NULL; // Kernel for the weight map 622 622 623 for (int y = size; y < inImage->numRows - size; y++) { 624 for (int x = size; x < inImage->numCols - size; x++) { 625 convImage->data.F32[y][x] = background; 623 for (int j = size; j < inImage->numRows - fullSize; j += fullSize) { 624 for (int i = size; i < inImage->numCols - fullSize; i += fullSize) { 626 625 627 626 // Only generate polynomial values every kernel footprint, since we have already assumed 628 627 // (with the stamps) that it does not vary rapidly on this scale. 629 if (x % fullSize == size) { 630 psFree(polyValues); 631 polyValues = spatialPolyValues(kernels->spatialOrder, 632 2.0 * (float)(x - numCols/2.0) / (float)numCols, 633 2.0 * (float)(y - numRows/2.0) / (float)numRows); 634 kernelImage = solvedKernel(kernelImage, solution, kernels, polyValues, imageWeighting); 635 if (inWeight) { 636 kernelWeight = solvedKernel(kernelWeight, solution, kernels, polyValues, 637 varianceWeighting); 638 } 639 } 640 641 // Check and propagate the kernel footprint, if required 642 if (inMask) { 643 for (int v = -size; v <= size; v++) { 644 for (int u = -size; u <= size; u++) { 645 convMask->data.PS_TYPE_MASK_DATA[y][x] |= 646 inMask->data.PS_TYPE_MASK_DATA[y + v][x + u]; 628 psFree(polyValues); 629 polyValues = spatialPolyValues(kernels->spatialOrder, 630 2.0 * (float)(i + size - numCols/2.0) / (float)numCols, 631 2.0 * (float)(j + size - numRows/2.0) / (float)numRows); 632 kernelImage = solvedKernel(kernelImage, solution, kernels, polyValues, imageWeighting); 633 if (inWeight) { 634 kernelWeight = solvedKernel(kernelWeight, solution, kernels, polyValues, 635 varianceWeighting); 636 } 637 638 for (int y = j; y < j + fullSize; y++) { 639 for (int x = i; x < i + fullSize; x++) { 640 convImage->data.F32[y][x] = background; 641 642 // Check and propagate the kernel footprint, if required 643 if (inMask) { 644 for (int v = -size; v <= size; v++) { 645 for (int u = -size; u <= size; u++) { 646 convMask->data.PS_TYPE_MASK_DATA[y][x] |= 647 inMask->data.PS_TYPE_MASK_DATA[y + v][x + u]; 648 } 649 } 650 if (convMask->data.PS_TYPE_MASK_DATA[y][x] & maskVal) { 651 convImage->data.F32[y][x] = NAN; 652 if (inWeight) { 653 convWeight->data.F32[y][x] = NAN; 654 } 655 continue; 656 } 647 657 } 648 } 649 if (convMask->data.PS_TYPE_MASK_DATA[y][x] & maskVal) { 650 convImage->data.F32[y][x] = NAN; 658 659 // Convolve the image 660 for (int v = -size; v <= size; v++) { 661 for (int u = -size; u <= size; u++) { 662 convImage->data.F32[y][x] += kernelImage->kernel[v][u] * 663 inImage->data.F32[y + v][x + u]; 664 } 665 } 666 667 // Convolve the weight (variance) map 651 668 if (inWeight) { 652 convWeight->data.F32[y][x] = NAN; 653 } 654 continue; 655 } 656 } 657 658 // Convolve the image 659 for (int v = -size; v <= size; v++) { 660 for (int u = -size; u <= size; u++) { 661 convImage->data.F32[y][x] += kernelImage->kernel[v][u] * inImage->data.F32[y + v][x + u]; 662 } 663 } 664 665 // Convolve the weight (variance) map 666 if (inWeight) { 667 for (int v = -size; v <= size; v++) { 668 for (int u = -size; u <= size; u++) { 669 convWeight->data.F32[y][x] += kernelWeight->kernel[v][u] * 670 inWeight->data.F32[y + v][x + u]; 669 for (int v = -size; v <= size; v++) { 670 for (int u = -size; u <= size; u++) { 671 convWeight->data.F32[y][x] += kernelWeight->kernel[v][u] * 672 inWeight->data.F32[y + v][x + u]; 673 } 674 } 671 675 } 672 676 }
Note:
See TracChangeset
for help on using the changeset viewer.
