Changeset 14313 for trunk/psModules/src/imcombine/pmSubtraction.c
- Timestamp:
- Jul 18, 2007, 4:33:33 PM (19 years ago)
- File:
-
- 1 edited
-
trunk/psModules/src/imcombine/pmSubtraction.c (modified) (6 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/psModules/src/imcombine/pmSubtraction.c
r14311 r14313 4 4 * @author GLG, MHPCC 5 5 * 6 * @version $Revision: 1.2 5$ $Name: not supported by cvs2svn $7 * @date $Date: 2007-07-19 02: 03:42$6 * @version $Revision: 1.26 $ $Name: not supported by cvs2svn $ 7 * @date $Date: 2007-07-19 02:33:33 $ 8 8 * 9 9 * Copyright 2004-2007 Institute for Astronomy, University of Hawaii … … 25 25 #include "pmSubtraction.h" 26 26 27 #define USE_FUNCTIONS_INSTEAD_OF_MACROS // 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? 28 28 29 29 ////////////////////////////////////////////////////////////////////////////////////////////////////////////// … … 125 125 } \ 126 126 break; \ 127 } \ 128 case PM_SUBTRACTION_KERNEL_GUNK: { \ 129 if (i < (KERNELS)->inner) { \ 130 /* Using pre-calculated function */ \ 131 psKernel *preCalc = (KERNELS)->preCalc->data[i]; /* Precalculated values */ \ 132 for (int v = -size; v <= size; v++) { \ 133 for (int u = -size; u <= size; u++) { \ 134 (TARGET)->kernel[v][u] += value * FUNC(preCalc->kernel[v][u]); \ 135 } \ 136 } \ 137 } else { \ 138 /* Using delta function */ \ 139 int u = (KERNELS)->u->data.S32[i]; /* Offset in x */ \ 140 int v = (KERNELS)->v->data.S32[i]; /* Offset in y */ \ 141 (TARGET)->kernel[v][u] += value; \ 142 } \ 143 /* The (0,0) kernel is subtracted from other kernels to preserve photometric scaling */ \ 144 if ((KERNELS)->spatialOrder > 0 && i != (KERNELS)->subIndex) { \ 145 (TARGET)->kernel[0][0] += subValue; \ 146 } \ 147 break; \ 127 148 } \ 128 149 case PM_SUBTRACTION_KERNEL_ISIS: { \ … … 309 330 break; \ 310 331 } \ 332 case PM_SUBTRACTION_KERNEL_GUNK: { \ 333 double value; /* The value to return */ \ 334 if ((INDEX) < (KERNELS)->inner) { \ 335 /* Using pre-calculated function */ \ 336 psKernel *kernel = (KERNELS)->preCalc->data[(INDEX)]; /* The convolution kernel */ \ 337 int size = (KERNELS)->size; /* Kernel half-size */ \ 338 double sum = 0.0; /* Accumulated sum from convolution */ \ 339 for (int v = -size; v <= size; v++) { \ 340 for (int u = -size; u <= size; u++) { \ 341 sum += FUNC(kernel->kernel[v][u]) * (IMAGE)->data.F32[(Y) + v][(X) + u]; \ 342 } \ 343 } \ 344 value = FUNC(polyValue) * sum; \ 345 } else { \ 346 /* Using delta function */ \ 347 int u = (KERNELS)->u->data.S32[(INDEX)]; /* Offset in x */ \ 348 int v = (KERNELS)->v->data.S32[(INDEX)]; /* Offset in y */ \ 349 value = FUNC(polyValue) * (IMAGE)->data.F32[(Y) + v][(X) + u]; /* Value of convolution */ \ 350 } \ 351 /* The (0,0) delta function is subtracted from most kernels to preserve photometric scaling */ \ 352 if ((KERNELS)->spatialOrder > 0 && (INDEX) != (KERNELS)->subIndex) { \ 353 value += FUNC(-1.0) * (IMAGE)->data.F32[(Y)][(X)]; \ 354 } \ 355 (TARGET) = value; \ 356 } \ 311 357 case PM_SUBTRACTION_KERNEL_ISIS: { \ 312 358 psKernel *kernel = (KERNELS)->preCalc->data[(INDEX)]; /* The convolution kernel */ \ … … 383 429 int size = kernels->size; // Kernel half-size 384 430 double sum = 0.0; // Accumulated sum from convolution 385 double sub = 0.0; // Accumulated sum to subtract386 431 for (int v = -size; v <= size; v++) { 387 432 for (int u = -size; u <= size; u++) { … … 389 434 } 390 435 } 391 value = weightFunc(polyValue) * sum + weightFunc(-1.0) * sub;436 value = weightFunc(polyValue) * sum; 392 437 } else { 393 438 // Using delta function
Note:
See TracChangeset
for help on using the changeset viewer.
