IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Changeset 13398


Ignore:
Timestamp:
May 16, 2007, 11:13:51 AM (19 years ago)
Author:
Paul Price
Message:

Optimising the creating of convolution kernels: moved operations that were needlessly performed many times outside the loop.

File:
1 edited

Legend:

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

    r13395 r13398  
    44 *  @author GLG, MHPCC
    55 *
    6  *  @version $Revision: 1.9 $ $Name: not supported by cvs2svn $
    7  *  @date $Date: 2007-05-16 03:53:36 $
     6 *  @version $Revision: 1.10 $ $Name: not supported by cvs2svn $
     7 *  @date $Date: 2007-05-16 21:13:51 $
    88 *
    99 *  Copyright 2004-2007 Institute for Astronomy, University of Hawaii
     
    5454
    5555// Generate an image of the solved kernel
    56 static psKernel *solvedKernel(psKernel *kernel, // Kernel, to return
    57                               const psVector *solution, // Solution to the least-squares problem
    58                               const pmSubtractionKernels *kernels, // Kernel basis functions
    59                               const psImage *polyValues, // Spatial polynomial values
    60                               double (*weightFunc)(double value) // Function for weighting
     56static inline psKernel *solvedKernel(psKernel *kernel, // Kernel, to return
     57                                     const psVector *solution, // Solution to the least-squares problem
     58                                     const pmSubtractionKernels *kernels, // Kernel basis functions
     59                                     const psImage *polyValues, // Spatial polynomial values
     60                                     double (*weightFunc)(double value) // Function for weighting
    6161    )
    6262{
     
    8282        int xOrder = kernels->xOrder->data.S32[i]; // Polynomial order in x
    8383        int yOrder = kernels->yOrder->data.S32[i]; // Polynomial order in y
    84         double polyValue = polyValues->data.F64[yOrder][xOrder]; // Value of spatial polynomial
     84        float value = weightFunc(polyValues->data.F64[yOrder][xOrder] *
     85                                 solution->data.F64[i]); // Value to sum
     86        float subValue = weightFunc(-solution->data.F64[i]); // Value to subtract (actually add, because of -)
    8587        switch (kernels->type) {
    8688          case PM_SUBTRACTION_KERNEL_POIS: {
    8789              int u = kernels->u->data.S32[i]; // Offset in x
    8890              int v = kernels->v->data.S32[i]; // Offset in y
    89               kernel->kernel[v][u] += weightFunc(polyValue * solution->data.F64[i]);
     91              kernel->kernel[v][u] += value;
    9092              if (kernels->spatialOrder > 0 && i != kernels->subIndex) {
    9193                  // The (0,0) element is subtracted from most kernels to preserve photometric scaling
    92                   kernel->kernel[0][0] += weightFunc(-solution->data.F64[i]);
     94                  kernel->kernel[0][0] += subValue;
    9395              }
    9496              break;
     
    99101              for (int v = -size; v <= size; v++) {
    100102                  for (int u = -size; u <= size; u++) {
    101                       kernel->kernel[v][u] += weightFunc(solution->data.F64[i] * polyValue *
    102                                                          preCalc->kernel[v][u]);
     103                      kernel->kernel[v][u] += value * weightFunc(preCalc->kernel[v][u]);
    103104                      // The (0,0) kernel is subtracted from other kernels to preserve photometric scaling
    104105                      if (kernels->spatialOrder > 0 && i != kernels->subIndex) {
    105                           kernel->kernel[v][u] += weightFunc(-solution->data.F64[i] *
    106                                                              subKernel->kernel[v][u]);
     106                          kernel->kernel[v][u] += subValue * weightFunc(subKernel->kernel[v][u]);
    107107                      }
    108108                  }
Note: See TracChangeset for help on using the changeset viewer.