IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Ignore:
Timestamp:
Jul 20, 2007, 6:30:57 PM (19 years ago)
Author:
Paul Price
Message:

Adding RINGS kernel --- a series of rings, modified by polynomials.

File:
1 edited

Legend:

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

    r14340 r14360  
    44 *  @author GLG, MHPCC
    55 *
    6  *  @version $Revision: 1.31 $ $Name: not supported by cvs2svn $
    7  *  @date $Date: 2007-07-20 21:18:50 $
     6 *  @version $Revision: 1.32 $ $Name: not supported by cvs2svn $
     7 *  @date $Date: 2007-07-21 04:30:57 $
    88 *
    99 *  Copyright 2004-2007 Institute for Astronomy, University of Hawaii
     
    170170              break; \
    171171          } \
     172          case PM_SUBTRACTION_KERNEL_RINGS: { \
     173              if (i == (KERNELS)->subIndex) { \
     174                  (TARGET)->kernel[0][0] += value; \
     175                  break; \
     176              } \
     177              psArray *preCalc = (KERNELS)->preCalc->data[i]; /* Precalculated data */ \
     178              psVector *uCoords = preCalc->data[0]; /* u coordinates */ \
     179              psVector *vCoords = preCalc->data[1]; /* v coordinates */ \
     180              psVector *poly = preCalc->data[2]; /* Polynomial values */ \
     181              int num = uCoords->n;     /* Number of pixels */ \
     182              for (int j = 0; j < num; j++) { \
     183                  int u = uCoords->data.S32[j], v = vCoords->data.S32[j]; /* Kernel coordinates */ \
     184                  (TARGET)->kernel[v][u] += value * FUNC(poly->data.F32[j]); \
     185              } \
     186              /* The (0,0) kernel is subtracted from other kernels to preserve photometric scaling */ \
     187              if (kernels->spatialOrder > 0) { \
     188                  kernel->kernel[0][0] += subValue; \
     189              } \
     190              break; \
     191          } \
    172192          default: \
    173193            psAbort("Should never get here."); \
     
    274294              break;
    275295          }
     296          case PM_SUBTRACTION_KERNEL_RINGS: {
     297              if (i == kernels->subIndex) {
     298                  kernel->kernel[0][0] += value;
     299                  break;
     300              }
     301              psArray *preCalc = kernels->preCalc->data[i]; // Precalculated data
     302              psVector *uCoords = preCalc->data[0]; // u coordinates
     303              psVector *vCoords = preCalc->data[1]; // v coordinates
     304              psVector *poly = preCalc->data[2]; // Polynomial values
     305              int num = uCoords->n;     // Number of pixels
     306
     307              for (int j = 0; j < num; j++) {
     308                  int u = uCoords->data.S32[j], v = vCoords->data.S32[j]; // Kernel coordinates
     309                  kernel->kernel[v][u] += value * weightFunc(poly->data.F32[j]);
     310              }
     311
     312              // The (0,0) kernel is subtracted from other kernels to preserve photometric scaling
     313              if (kernels->spatialOrder > 0) {
     314                  kernel->kernel[0][0] += subValue;
     315              }
     316              break;
     317          }
    276318          default:
    277319            psAbort("Should never get here.");
     
    367409          }
    368410          return polyValue * sum - sub;
     411      }
     412      case PM_SUBTRACTION_KERNEL_RINGS: {
     413          if (index == kernels->subIndex) {
     414              return image->data.F32[0][0];
     415          }
     416          psArray *preCalc = kernels->preCalc->data[index]; // Precalculated data
     417          psVector *uCoords = preCalc->data[0]; // u coordinates
     418          psVector *vCoords = preCalc->data[1]; // v coordinates
     419          psVector *poly = preCalc->data[2]; // Polynomial values
     420          int num = uCoords->n;         // Number of pixels
     421          double sum = 0.0;             // Accumulated sum from convolution
     422          for (int j = 0; j < num; j++) {
     423              int u = uCoords->data.S32[j], v = vCoords->data.S32[j]; // Kernel coordinates
     424              sum += image->data.F32[y + v][x + u] * poly->data.F32[j];
     425          }
     426          // The (0,0) kernel is subtracted from other kernels to preserve photometric scaling
     427          return polyValue * sum - image->data.F32[0][0];
    369428      }
    370429      default:
Note: See TracChangeset for help on using the changeset viewer.