Changeset 17297 for trunk/psModules/src/imcombine/pmSubtraction.c
- Timestamp:
- Apr 2, 2008, 3:57:59 PM (18 years ago)
- File:
-
- 1 edited
-
trunk/psModules/src/imcombine/pmSubtraction.c (modified) (9 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/psModules/src/imcombine/pmSubtraction.c
r16607 r17297 4 4 * @author GLG, MHPCC 5 5 * 6 * @version $Revision: 1.8 2$ $Name: not supported by cvs2svn $7 * @date $Date: 2008-0 2-22 19:50:56$6 * @version $Revision: 1.83 $ $Name: not supported by cvs2svn $ 7 * @date $Date: 2008-04-03 01:57:59 $ 8 8 * 9 9 * Copyright 2004-2007 Institute for Astronomy, University of Hawaii … … 472 472 473 473 switch (kernels->mode) { 474 case PM_SUBTRACTION_MODE_TARGET:475 474 case PM_SUBTRACTION_MODE_1: 476 475 stamp->convolutions1 = convolveStamp(stamp->convolutions1, stamp->image1, kernels, footprint); … … 638 637 const pmSubtractionKernels *kernels, bool doBG, bool useFFT) 639 638 { 640 PS_ASSERT_PTR_NON_NULL(out1, false); 641 PS_ASSERT_PTR_NON_NULL(ro1, false); 642 PS_ASSERT_IMAGE_NON_NULL(ro1->image, false); 643 PS_ASSERT_IMAGE_TYPE(ro1->image, PS_TYPE_F32, false); 644 if (ro1->weight) { 645 PS_ASSERT_IMAGE_NON_NULL(ro1->weight, false); 646 PS_ASSERT_IMAGE_TYPE(ro1->weight, PS_TYPE_F32, false); 647 PS_ASSERT_IMAGES_SIZE_EQUAL(ro1->weight, ro1->image, false); 648 } 639 PM_ASSERT_READOUT_NON_NULL(out1, false); 640 PM_ASSERT_READOUT_NON_NULL(out2, false); 641 PM_ASSERT_READOUT_NON_NULL(ro1, false); 642 PM_ASSERT_READOUT_NON_NULL(ro2, false); 643 PM_ASSERT_READOUT_IMAGE(ro1, false); 644 PM_ASSERT_READOUT_IMAGE(ro2, false); 645 PS_ASSERT_IMAGES_SIZE_EQUAL(ro1->image, ro2->image, false); 649 646 PM_ASSERT_SUBTRACTION_KERNELS_NON_NULL(kernels, false); 650 647 PM_ASSERT_SUBTRACTION_KERNELS_SOLUTION(kernels, false); 651 if (kernels->mode == PM_SUBTRACTION_MODE_DUAL) {652 PS_ASSERT_PTR_NON_NULL(out2, false);653 PS_ASSERT_PTR_NON_NULL(ro2, false);654 PS_ASSERT_IMAGE_NON_NULL(ro2->image, false);655 PS_ASSERT_IMAGE_TYPE(ro2->image, PS_TYPE_F32, false);656 if (ro2->weight) {657 PS_ASSERT_IMAGE_NON_NULL(ro2->weight, false);658 PS_ASSERT_IMAGE_TYPE(ro2->weight, PS_TYPE_F32, false);659 PS_ASSERT_IMAGES_SIZE_EQUAL(ro2->weight, ro1->image, false);660 }661 }662 648 if (subMask) { 663 649 PS_ASSERT_IMAGE_NON_NULL(subMask, false); 664 650 PS_ASSERT_IMAGE_TYPE(subMask, PS_TYPE_MASK, false); 665 651 PS_ASSERT_IMAGES_SIZE_EQUAL(subMask, ro1->image, false); 666 }667 if (out1->image) {668 PS_ASSERT_IMAGE_NON_NULL(out1->image, false);669 PS_ASSERT_IMAGES_SIZE_EQUAL(out1->image, ro1->image, false);670 PS_ASSERT_IMAGE_TYPE(out1->image, PS_TYPE_F32, false);671 }672 if (out1->mask) {673 PS_ASSERT_IMAGE_NON_NULL(out1->mask, false);674 PS_ASSERT_IMAGES_SIZE_EQUAL(out1->mask, ro1->image, false);675 PS_ASSERT_IMAGE_TYPE(out1->mask, PS_TYPE_MASK, false);676 PS_ASSERT_IMAGE_NON_NULL(subMask, false);677 }678 if (out1->weight) {679 PS_ASSERT_IMAGE_NON_NULL(out1->weight, false);680 PS_ASSERT_IMAGES_SIZE_EQUAL(out1->weight, ro1->image, false);681 PS_ASSERT_IMAGE_TYPE(out1->weight, PS_TYPE_F32, false);682 652 } 683 653 if (region && psRegionIsNaN(*region)) { … … 688 658 } 689 659 690 const pmReadout *source; // Source for image parameters 691 switch (kernels->mode) { 692 case PM_SUBTRACTION_MODE_TARGET: 693 case PM_SUBTRACTION_MODE_1: 694 case PM_SUBTRACTION_MODE_DUAL: 695 source = ro1; 696 break; 697 case PM_SUBTRACTION_MODE_2: 698 source = ro2; 699 break; 700 default: 701 psAbort("Unsupported subtraction mode: %x", kernels->mode); 702 } 703 psImage *image = source->image, *weight = source->weight; // Image and weight map to convolve 704 int numCols = image->numCols, numRows = image->numRows; // Image dimensions 705 int x0 = source->col0, y0 = source->row0; // Image offset 706 707 psImage *convImage1 = out1->image; // Convolved image 708 if (!convImage1) { 709 convImage1 = out1->image = psImageAlloc(numCols, numRows, PS_TYPE_F32); 710 } 711 psImage *convMask = NULL; // Convolved mask image 712 if (subMask) { 713 if (!out1->mask) { 714 out1->mask = psImageAlloc(numCols, numRows, PS_TYPE_MASK); 715 } 716 convMask = out1->mask; 717 psImageInit(convMask, 0); 718 } 719 psImage *convWeight1 = NULL; // Convolved weight (variance) image 720 if (weight) { 721 if (!out1->weight) { 722 out1->weight = psImageAlloc(numCols, numRows, PS_TYPE_F32); 723 } 724 convWeight1 = out1->weight; 725 psImageInit(convWeight1, 0.0); 726 } 727 728 psImage *convImage2 = NULL; 729 psImage *convWeight2 = NULL; // Convolved products for dual mode 730 if (kernels->mode == PM_SUBTRACTION_MODE_DUAL) { 660 // Inputs 661 psImage *image1 = ro1->image, *weight1 = ro1->weight; // Image and weight map from input 1 662 psImage *image2 = ro2->image, *weight2 = ro2->weight; // Image and weight map from input 2 663 int numCols = image1->numCols, numRows = image1->numRows; // Image dimensions 664 int x0 = image1->col0, y0 = image1->row0; // Image offset 665 666 // Outputs 667 psImage *convImage1 = NULL, *convWeight1 = NULL; // Convolved image and weight from input 1 668 if (kernels->mode == PM_SUBTRACTION_MODE_1 || kernels->mode == PM_SUBTRACTION_MODE_DUAL) { 669 convImage1 = out1->image; 670 if (!convImage1) { 671 convImage1 = out1->image = psImageAlloc(numCols, numRows, PS_TYPE_F32); 672 } 673 if (weight1) { 674 if (!out1->weight) { 675 out1->weight = psImageAlloc(numCols, numRows, PS_TYPE_F32); 676 } 677 convWeight1 = out1->weight; 678 psImageInit(convWeight1, 0.0); 679 } 680 } 681 psImage *convImage2 = NULL, *convWeight2 = NULL; // Convolved image and weight from input 2 682 if (kernels->mode == PM_SUBTRACTION_MODE_2 || kernels->mode == PM_SUBTRACTION_MODE_DUAL) { 731 683 convImage2 = out2->image; 732 684 if (!convImage2) { 733 685 convImage2 = out2->image = psImageAlloc(numCols, numRows, PS_TYPE_F32); 734 686 } 735 convWeight2 = NULL; // Convolved weight (variance) image 736 if (ro2->weight) { 687 if (weight2) { 737 688 if (!out2->weight) { 738 689 out2->weight = psImageAlloc(numCols, numRows, PS_TYPE_F32); … … 741 692 psImageInit(convWeight2, 0.0); 742 693 } 743 if (subMask) { 744 // Copying mask --- they're the same! 694 } 695 psImage *convMask = NULL; // Convolved mask image (common to inputs 1 and 2) 696 if (subMask) { 697 if (!out1->mask) { 698 out1->mask = psImageAlloc(numCols, numRows, PS_TYPE_MASK); 699 } 700 convMask = out1->mask; 701 psImageInit(convMask, 0); 702 if (out2->mask) { 745 703 psFree(out2->mask); 746 out2->mask = psMemIncrRefCounter(convMask); 747 } 748 } 704 } 705 out2->mask = psMemIncrRefCounter(convMask); 706 } 707 749 708 750 709 int size = kernels->size; // Half-size of kernel … … 769 728 psMaskType maskTarget; // Mark these pixels as bad when propagating the subtractionMask 770 729 switch (kernels->mode) { 771 case PM_SUBTRACTION_MODE_TARGET:772 730 case PM_SUBTRACTION_MODE_1: 773 731 maskSource = PM_SUBTRACTION_MASK_BAD_1; … … 806 764 psRegion subRegion = psRegionSet(i, xSubMax, j, ySubMax); // Sub-region to convolve 807 765 808 convolveRegion(convImage1, convWeight1, &kernelImage, &kernelWeight, image, weight, 809 subMask, maskSource, kernels, polyValues, background, subRegion, useFFT, false); 810 811 if (kernels->mode == PM_SUBTRACTION_MODE_DUAL) { 812 convolveRegion(convImage2, convWeight2, &kernelImage, &kernelWeight, ro2->image, ro2->weight, 813 subMask, maskSource, kernels, polyValues, background, subRegion, useFFT, true); 766 if (kernels->mode == PM_SUBTRACTION_MODE_1 || kernels->mode == PM_SUBTRACTION_MODE_DUAL) { 767 convolveRegion(convImage1, convWeight1, &kernelImage, &kernelWeight, image1, weight1, 768 subMask, maskSource, kernels, polyValues, background, subRegion, useFFT, 769 false); 770 } 771 if (kernels->mode == PM_SUBTRACTION_MODE_2 || kernels->mode == PM_SUBTRACTION_MODE_DUAL) { 772 convolveRegion(convImage2, convWeight2, &kernelImage, &kernelWeight, image2, weight2, 773 subMask, maskSource, kernels, polyValues, background, subRegion, useFFT, 774 kernels->mode == PM_SUBTRACTION_MODE_DUAL); 814 775 } 815 776 … … 820 781 if (subMask->data.PS_TYPE_MASK_DATA[y][x] & maskTarget) { 821 782 convMask->data.PS_TYPE_MASK_DATA[y][x] |= blank; 822 convImage1->data.F32[y][x] = NAN;823 if (weight) {824 convWeight1->data.F32[y][x] = NAN;825 }826 783 } 827 784 } 828 785 } 829 786 } 830 831 787 } 832 788 } … … 835 791 psFree(polyValues); 836 792 793 // Copy anything that wasn't convolved 794 switch (kernels->mode) { 795 case PM_SUBTRACTION_MODE_1: 796 out2->image = psMemIncrRefCounter(ro2->image); 797 out2->weight = psMemIncrRefCounter(ro2->weight); 798 out2->mask = psMemIncrRefCounter(ro2->mask); 799 break; 800 case PM_SUBTRACTION_MODE_2: 801 out1->image = psMemIncrRefCounter(ro1->image); 802 out1->weight = psMemIncrRefCounter(ro1->weight); 803 out1->mask = psMemIncrRefCounter(ro1->mask); 804 break; 805 case PM_SUBTRACTION_MODE_DUAL: 806 break; 807 default: 808 psAbort("Should never get here."); 809 } 810 837 811 return true; 838 812 }
Note:
See TracChangeset
for help on using the changeset viewer.
