IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Changeset 38227


Ignore:
Timestamp:
May 5, 2015, 6:48:51 AM (11 years ago)
Author:
eugene
Message:

overscan region should have measured overscan subtracted

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/psModules/src/detrend/pmOverscan.c

    r23989 r38227  
    295295        psMetadataAddF32(hdu->header, PS_LIST_TAIL, "OVER_SIG", PS_META_REPLACE, "Overscan stdev", NAN);
    296296
    297         (void)psBinaryOp(image, image, "-", psScalarAlloc((float)reduced, PS_TYPE_F32));
     297        psScalar *reducedScalar = psScalarAlloc(reduced, PS_TYPE_F32);
     298        (void)psBinaryOp (image, image, "-", , reducedScalar);
     299
     300        // subtract the measured value from each overscan region as well
     301        iter = psListIteratorAlloc(overscans, PS_LIST_HEAD, false); // Iterator
     302        overscan = NULL;   // Overscan image from iterator
     303        while ((overscan = psListGetAndIncrement(iter))) {
     304          (void)psBinaryOp(overscan, overscan, "-", reducedScalar);
     305        }
     306        psFree(iter);
     307
    298308        psFree(stats);
    299309        return true;
     
    375385            }
    376386        }
     387
     388        // subtract from the overscan regions
     389        {
     390          psListIterator *iter = psListIteratorAlloc(overscans, PS_LIST_HEAD, false); // Iterator
     391          psImage *overscan = NULL; // Overscan image from iterator
     392          while ((overscan = psListGetAndIncrement(iter))) {
     393            // the overscan and image might not be aligned.
     394            int diff = overscan->row0 - image->row0; // Offset between the two regions
     395            for (int i = PS_MAX(0,diff); i < PS_MIN(image->numRows, overscan->numRows + diff); i++) {
     396              int j = i - diff;
     397              // i is row on image
     398              // j is row on overscan
     399              for (int k = 0; i < overscan->numCols; k++) {
     400                overscan->data.F32[j][k] -= reduced->data.F32[j];
     401              }
     402            }
     403          }
     404          psFree(iter);
     405        }
    377406        psFree(reduced);
    378407    }
     
    441470            }
    442471        }
     472
     473        // subtract from the overscan regions
     474        {
     475          psListIterator *iter = psListIteratorAlloc(overscans, PS_LIST_HEAD, false); // Iterator
     476          psImage *overscan = NULL; // Overscan image from iterator
     477          while ((overscan = psListGetAndIncrement(iter))) {
     478            // the overscan and image might not be aligned.
     479            int diff = overscan->col0 - image->col0; // Offset between the two regions
     480            for (int i = PS_MAX(0,diff); i < PS_MIN(image->numCols, overscan->numCols + diff); i++) {
     481              int j = i - diff;
     482              // i is col on image
     483              // j is col on overscan
     484              for (int k = 0; i < overscan->numRows; k++) {
     485                overscan->data.F32[k][j] -= reduced->data.F32[j];
     486              }
     487            }
     488          }
     489          psFree(iter);
     490        }
     491
    443492        psFree(reduced);
    444493    }
Note: See TracChangeset for help on using the changeset viewer.