IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Changeset 14197


Ignore:
Timestamp:
Jul 13, 2007, 10:55:26 AM (19 years ago)
Author:
Paul Price
Message:

Fixing FRIES and SPAM kernels.

File:
1 edited

Legend:

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

    r14195 r14197  
    44 *  @author GLG, MHPCC
    55 *
    6  *  @version $Revision: 1.17 $ $Name: not supported by cvs2svn $
    7  *  @date $Date: 2007-07-13 20:28:28 $
     6 *  @version $Revision: 1.18 $ $Name: not supported by cvs2svn $
     7 *  @date $Date: 2007-07-13 20:55:26 $
    88 *
    99 *  Copyright 2004-2007 Institute for Astronomy, University of Hawaii
     
    2525#include "pmSubtraction.h"
    2626
    27 //#define CAN_PASS_STATIC_INLINE          // Can I pass the address of a static inline function?
     27#define USE_FUNCTIONS_INSTEAD_OF_MACROS          // Can I pass the address of a static inline function?
    2828
    2929//////////////////////////////////////////////////////////////////////////////////////////////////////////////
     
    5555}
    5656
    57 #ifndef CAN_PASS_STATIC_INLINE
     57#ifndef USE_FUNCTIONS_INSTEAD_OF_MACROS
    5858// Generate an image of the solved kernel
    5959// Meant to replace the following function declaration:
     
    193193          /* SPAM and FRIES use the same method */
    194194          case PM_SUBTRACTION_KERNEL_SPAM:
    195           case PM_SUBTRACTION_KERNEL_FRIES:
    196             int uStart = kernels->u->data.S32[i];
    197             int uStop = kernels->uStop->data.S32[i];
    198             int vStart = kernels->v->data.S32[i];
    199             int vStop = kernels->vStop->data.S32[i];
    200             for (int v = vStart; v <= vStop; v++) {
    201                 for (int u = uStart; u <= uStop; u++) {
    202                     kernel->kernel[v][u] += value;
    203                 }
    204             }
    205             if (kernels->spatialOrder > 0 && i != kernels->subIndex) {
    206                 /* The (0,0) element is subtracted from most kernels to preserve photometric scaling */
    207                 kernel->kernel[0][0] += subValue;
    208             }
    209             break;
     195          case PM_SUBTRACTION_KERNEL_FRIES: {
     196              int uStart = kernels->u->data.S32[i];
     197              int uStop = kernels->uStop->data.S32[i];
     198              int vStart = kernels->v->data.S32[i];
     199              int vStop = kernels->vStop->data.S32[i];
     200              for (int v = vStart; v <= vStop; v++) {
     201                  for (int u = uStart; u <= uStop; u++) {
     202                      kernel->kernel[v][u] += value;
     203                  }
     204              }
     205              if (kernels->spatialOrder > 0 && i != kernels->subIndex) {
     206                  /* The (0,0) element is subtracted from most kernels to preserve photometric scaling */
     207                  kernel->kernel[0][0] += subValue;
     208              }
     209              break;
     210          }
    210211          case PM_SUBTRACTION_KERNEL_ISIS: {
    211212              psKernel *preCalc = kernels->preCalc->data[i];// Precalculated values
     
    231232#endif
    232233
    233 #ifndef CAN_PASS_STATIC_INLINE
     234#ifndef USE_FUNCTIONS_INSTEAD_OF_MACROS
    234235// Generate the convolved pixel value
    235236// Meant to replace the following function declaration:
     
    274275          int vStart = (KERNELS)->v->data.S32[(INDEX)]; \
    275276          int vStop = (KERNELS)->vStop->data.S32[(INDEX)]; \
     277          double sum = 0.0; \
    276278          for (int v = vStart; v <= vStop; v++) { \
    277279              for (int u = uStart; u <= uStop; u++) { \
    278                   (TARGET) += FUNC(polyValue) * (IMAGE)->data.F32[(Y) + v][(X) + u]; \
     280                  sum += FUNC(polyValue) * (IMAGE)->data.F32[(Y) + v][(X) + u]; \
    279281              } \
    280282          } \
    281283          if ((KERNELS)->spatialOrder > 0 && (INDEX) != (KERNELS)->subIndex) { \
    282284              /* The (0,0) element is subtracted from most kernels to preserve photometric scaling */ \
    283               (TARGET) += FUNC(-1.0) * (IMAGE)->data.F32[(Y)][(X)]; \
     285              sum += FUNC(-1.0) * (IMAGE)->data.F32[(Y)][(X)]; \
    284286          } \
     287          (TARGET) = sum;
    285288          break; \
    286289      } \
     
    340343          int vStart = kernels->v->data.S32[index];
    341344          int vStop = kernels->vStop->data.S32[index];
     345          double sum = 0.0;
    342346          for (int v = vStart; v <= vStop; v++) {
    343347              for (int u = uStart; u <= uStop; u++) {
    344                   value += weightFunc(polyValue) * image->data.F32[y + v][x + u];
     348                  sum += weightFunc(polyValue) * image->data.F32[y + v][x + u];
    345349              }
    346350          }
    347351          if (kernels->spatialOrder > 0 && index != kernels->subIndex) {
    348352              /* The (0,0) element is subtracted from most kernels to preserve photometric scaling */
    349               value += weightFunc(-1.0) * image->data.F32[y][x];
     353              sum += weightFunc(-1.0) * image->data.F32[y][x];
    350354          }
    351           break;
     355          return sum;
    352356      }
    353357      case PM_SUBTRACTION_KERNEL_ISIS: {
     
    582586                    // Generate the convolutions
    583587                    for (int i = 0; i < numKernels; i++) {
    584 #ifdef CAN_PASS_STATIC_INLINE
     588#ifdef USE_FUNCTIONS_INSTEAD_OF_MACROS
    585589                        convolutions->data.F64[i] = convolvePixel(kernels, i, x, y, reference, polyValues,
    586590                                                                  imageWeighting);
     
    785789                for (int x = footprint; x <= footprint; x++) {
    786790                    for (int k = 0; k < numKernels; k++) {
    787 #ifdef CAN_PASS_STATIC_INLINE
     791#ifdef USE_FUNCTIONS_INSTEAD_OF_MACROS
    788792                        convolvedStamp->data.F32[y + footprint][x + footprint] +=
    789793                            convolvePixel(kernels, k, xStamp + x, yStamp + y, refImage, polyValues,
     
    872876
    873877    // The appropriate kernel
    874 #ifdef CAN_PASS_STATIC_INLINE
     878#ifdef USE_FUNCTIONS_INSTEAD_OF_MACROS
    875879    psKernel *kernel = solvedKernel(NULL, solution, kernels, polyValues, imageWeighting);
    876880#else
     
    974978                                           2.0 * (float)(i + size - numCols/2.0) / (float)numCols,
    975979                                           2.0 * (float)(j + size - numRows/2.0) / (float)numRows);
    976 #ifdef CAN_PASS_STATIC_INLINE
     980#ifdef USE_FUNCTIONS_INSTEAD_OF_MACROS
    977981            kernelImage = solvedKernel(kernelImage, solution, kernels, polyValues, imageWeighting);
    978982            if (inWeight) {
Note: See TracChangeset for help on using the changeset viewer.