IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Ignore:
Timestamp:
Nov 4, 2009, 4:52:05 PM (17 years ago)
Author:
Paul Price
Message:

Soften errors, both in the least-squares matrix/vector construction and in the rejection stage. Softening in the rejection stage seems to be very important so that bright stamps aren't rejected (after which the solution can go crazy). Now carrying around a weight image = 1/variance instead of the variance image. This can be softened, saving many divisions in the matrix/vector construction.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/psModules/src/imcombine/pmSubtractionMatch.c

    r25464 r26035  
    6868                                 float thresh2,  // Threshold for stamp finding on readout 2
    6969                                 float stampSpacing, // Spacing between stamps
     70                                 float sysError,     // Relative systematic error in images
    7071                                 int size,         // Kernel half-size
    7172                                 int footprint,     // Convolution footprint for stamps
     
    7879
    7980    *stamps = pmSubtractionStampsFind(*stamps, image1, image2, subMask, region, thresh1, thresh2,
    80                                       size, footprint, stampSpacing, mode);
     81                                      size, footprint, stampSpacing, sysError, mode);
    8182    if (!*stamps) {
    8283        psError(psErrorCodeLast(), false, "Unable to find stamps.");
     
    101102                                  const pmReadout *ro1, const pmReadout *ro2, // Input images
    102103                                  int stride, // Size for convolution patches
    103                                   float sysError, // Relative systematic error
     104                                  float sysError,           // Systematic error in images
     105                                  float kernelError, // Systematic error in kernel
    104106                                  psImageMaskType maskVal, // Value to mask for input
    105107                                  psImageMaskType maskBad, // Mask for output bad pixels
     
    151153        PS_ASSERT_FLOAT_LESS_THAN(sysError, 1.0, false);
    152154    }
     155    if (isfinite(kernelError)) {
     156        PS_ASSERT_FLOAT_LARGER_THAN_OR_EQUAL(kernelError, 0.0, false);
     157        PS_ASSERT_FLOAT_LESS_THAN(kernelError, 1.0, false);
     158    }
    153159    // Don't care about maskVal
    154160    // Don't care about maskBad
     
    194200
    195201bool pmSubtractionMatchPrecalc(pmReadout *conv1, pmReadout *conv2, const pmReadout *ro1, const pmReadout *ro2,
    196                                psMetadata *analysis, int stride, float sysError,
     202                               psMetadata *analysis, int stride, float kernelError,
    197203                               psImageMaskType maskVal, psImageMaskType maskBad, psImageMaskType maskPoor,
    198204                               float poorFrac, float badFrac)
     
    264270    }
    265271
    266     if (!subtractionMatchCheck(conv1, conv2, ro1, ro2, stride, sysError, maskVal, maskBad, maskPoor,
    267                                poorFrac, badFrac, mode)) {
     272    if (!subtractionMatchCheck(conv1, conv2, ro1, ro2, stride, NAN, kernelError,
     273                               maskVal, maskBad, maskPoor, poorFrac, badFrac, mode)) {
    268274        psFree(kernels);
    269275        psFree(regions);
     
    300306
    301307        if (!pmSubtractionConvolve(conv1, conv2, ro1, ro2, subMask, stride, maskBad, maskPoor, poorFrac,
    302                                    sysError, region, kernel, true, useFFT)) {
     308                                   kernelError, region, kernel, true, useFFT)) {
    303309            psError(PS_ERR_UNKNOWN, false, "Unable to convolve image.");
    304310            psFree(outAnalysis);
     
    330336                        int inner, int ringsOrder, int binning, float penalty,
    331337                        bool optimum, const psVector *optFWHMs, int optOrder, float optThreshold,
    332                         int iter, float rej, float sysError, psImageMaskType maskVal, psImageMaskType maskBad,
    333                         psImageMaskType maskPoor, float poorFrac, float badFrac, pmSubtractionMode subMode)
    334 {
    335     if (!subtractionMatchCheck(conv1, conv2, ro1, ro2, stride, sysError, maskVal, maskBad, maskPoor,
    336                                poorFrac, badFrac, subMode)) {
     338                        int iter, float rej, float sysError, float kernelError, psImageMaskType maskVal,
     339                        psImageMaskType maskBad, psImageMaskType maskPoor, float poorFrac,
     340                        float badFrac, pmSubtractionMode subMode)
     341{
     342    if (!subtractionMatchCheck(conv1, conv2, ro1, ro2, stride, sysError, kernelError,
     343                               maskVal, maskBad, maskPoor, poorFrac, badFrac, subMode)) {
    337344        return false;
    338345    }
     
    463470            if (stampsName && strlen(stampsName) > 0) {
    464471                stamps = pmSubtractionStampsSetFromFile(stampsName, ro1->image, subMask, region, size,
    465                                                         footprint, stampSpacing, subMode);
     472                                                        footprint, stampSpacing, sysError, subMode);
    466473            } else if (sources) {
    467474                stamps = pmSubtractionStampsSetFromSources(sources, ro1->image, subMask, region, size,
    468                                                            footprint, stampSpacing, subMode);
     475                                                           footprint, stampSpacing, sysError, subMode);
    469476            }
    470477
     
    472479            // doesn't matter.
    473480            if (!subtractionGetStamps(&stamps, ro1, ro2, subMask, variance, NULL, stampThresh1, stampThresh2,
    474                            stampSpacing, size, footprint, subMode)) {
     481                                      stampSpacing, sysError, size, footprint, subMode)) {
    475482                goto MATCH_ERROR;
    476483            }
     
    538545
    539546                if (!subtractionGetStamps(&stamps, ro1, ro2, subMask, variance, region,
    540                                           stampThresh1, stampThresh2, stampSpacing,
     547                                          stampThresh1, stampThresh2, stampSpacing, sysError,
    541548                                          size, footprint, subMode)) {
    542549                    goto MATCH_ERROR;
     
    608615            psTrace("psModules.imcombine", 2, "Convolving...\n");
    609616            if (!pmSubtractionConvolve(conv1, conv2, ro1, ro2, subMask, stride, maskBad, maskPoor, poorFrac,
    610                                        sysError, region, kernels, true, useFFT)) {
     617                                       kernelError, region, kernels, true, useFFT)) {
    611618                psError(PS_ERR_UNKNOWN, false, "Unable to convolve image.");
    612619                goto MATCH_ERROR;
Note: See TracChangeset for help on using the changeset viewer.