IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Changeset 3813 for trunk/pois/src


Ignore:
Timestamp:
Apr 29, 2005, 10:53:49 AM (21 years ago)
Author:
rhl
Message:

Make poisRejectStamps return a list of rejected stamps

Location:
trunk/pois/src
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/pois/src/pois.c

    r3797 r3813  
    114114
    115115    // Iterate for a good solution
    116     bool badStamps = true;              // Do we have bad stamps, such that we need to continue to iterate?
     116    psList *badStamps = NULL;           // Do we have bad stamps, such that we need to continue to iterate?
    117117    for (int iterNum = 0; iterNum < config->numIter && badStamps; iterNum++) {
    118118        psTrace("pois", 1, "Iteration %d...\n", iterNum);
    119119
     120        psFree(badStamps);              // left over from last iteration
     121       
    120122        // Find stamps
    121123        stamps = poisFindStamps(stamps, refImage, mask, config);
     
    175177    // If there was rejection on the last round, re-solve the equation using only the good stamps
    176178    if (badStamps) {
     179        psFree(badStamps);
    177180        solution = poisSolveEquation(solution, stamps, config);
    178181    }
  • trunk/pois/src/pois.h

    r3807 r3813  
    173173
    174174// Reject stamps, based on the deviations
    175 bool poisRejectStamps(psArray *stamps,  // Array of stamps
    176                       psImage *mask,    // Mask image
    177                       const psVector *deviations, // Vector of deviations for the stamps
    178                       const poisConfig *config // Configuration
     175psList *restrict poisRejectStamps(psArray *stamps,      // Array of stamps
     176                                  psImage *mask,        // Mask image
     177                                  const psVector *deviations, // Vector of deviations for the stamps
     178                                  const poisConfig *config // Configuration
    179179    );
    180180
  • trunk/pois/src/poisFindStamps.c

    r3802 r3813  
    3333    if (stamps == NULL) {
    3434        stamps = psArrayAlloc(nsx * nsy);
    35         // Initialise
     35                                        // Initialise; should be done by psArrayAlloc
    3636        for (int i = 0; i < nsx * nsy; i++) {
    37             stamps->data[i] = poisStampAlloc();
     37            stamps->data[i] = NULL;
    3838        }
    3939    }
     
    4444        for (int j = 0; j < nsy; j++) {
    4545            poisStamp *stamp = stamps->data[num]; // The stamp
     46            if (stamp == NULL) {
     47                stamp = stamps->data[num] = poisStampAlloc();
     48            }
    4649
    4750            // Only find a new stamp if we need to
  • trunk/pois/src/poisRejectStamps.c

    r3803 r3813  
    66#define SQUARE(x) ((x)*(x))
    77
    8 bool poisRejectStamps(psArray *stamps,  // Array of stamps
    9                       psImage *mask,    // Mask image
    10                       const psVector *deviations, // Vector of deviations for the stamps
    11                       const poisConfig *config // Configuration
     8psList *restrict poisRejectStamps(psArray *stamps, // Array of stamps
     9                                  psImage *mask,        // Mask image
     10                                  const psVector *deviations, // Vector of deviations for the stamps
     11                                  const poisConfig *config // Configuration
    1212    )
    1313{
     
    2121    assert(deviations->type.type == PS_TYPE_F32);
    2222
    23     bool masked = false;                // Have we masked any stamps?
    2423    psVector *devMask = psVectorAlloc(stamps->n, PS_TYPE_U8); // Mask for statistics
    2524
     
    3029        poisStamp *stamp = stamps->data[i];     // The stamp
    3130        // Only interested in the stamps that we're actually using
    32         if (stamp->status == POIS_STAMP_USED) {
     31        if (stamp != NULL && stamp->status == POIS_STAMP_USED) {
    3332            meanDev += SQUARE(deviations->data.F32[i]);
    3433            numDev++;
     
    4140
    4241    // Reject stamps
     42    psList *rejected = NULL;            // rejected stamps
    4343    for (int s = 0; s < deviations->n; s++) {
    4444        poisStamp *stamp = stamps->data[s];
     45        if (stamp == NULL) {
     46            continue;
     47        }
     48       
    4549        if (stamp->status == POIS_STAMP_USED && fabsf(deviations->data.F32[s]) > limit) {
    46             masked = true;
    4750            psTrace("pois.rejectStamps", 1, "Rejecting stamp %d (%d,%d): %f\n", s, stamp->x, stamp->y,
    4851                    deviations->data.F32[s]);
     
    5659           
    5760            // Mark stamp for replacement
    58             stamp->status = POIS_STAMP_RESET;
     61            stamps->data[s] = NULL;
     62           
     63            if (rejected == NULL) {
     64                rejected = psListAlloc(stamp);
     65            } else {
     66                bool failed = psListAdd(rejected, PS_LIST_TAIL, stamp);
     67                assert(!failed);
     68            }
     69            psFree(stamp);
    5970        } // Bad stamps
    6071    } // Iterating over stamps
     
    6273    psFree(devMask);
    6374
    64     return masked;
     75    return rejected;
    6576}
Note: See TracChangeset for help on using the changeset viewer.