Changeset 14305 for trunk/psModules/src/imcombine/pmSubtraction.c
- Timestamp:
- Jul 18, 2007, 3:39:28 PM (19 years ago)
- File:
-
- 1 edited
-
trunk/psModules/src/imcombine/pmSubtraction.c (modified) (4 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/psModules/src/imcombine/pmSubtraction.c
r14304 r14305 4 4 * @author GLG, MHPCC 5 5 * 6 * @version $Revision: 1.2 3$ $Name: not supported by cvs2svn $7 * @date $Date: 2007-07-19 01: 10:57$6 * @version $Revision: 1.24 $ $Name: not supported by cvs2svn $ 7 * @date $Date: 2007-07-19 01:39:28 $ 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 ////////////////////////////////////////////////////////////////////////////////////////////////////////////// … … 209 209 break; 210 210 } 211 case PM_SUBTRACTION_KERNEL_GUNK: { 212 if (i < kernels->inner) { 213 // Using pre-calculated function 214 psKernel *preCalc = kernels->preCalc->data[i]; // Precalculated values 215 for (int v = -size; v <= size; v++) { 216 for (int u = -size; u <= size; u++) { 217 kernel->kernel[v][u] += value * weightFunc(preCalc->kernel[v][u]); 218 } 219 } 220 } else { 221 // Using delta function 222 int u = kernels->u->data.S32[i]; // Offset in x 223 int v = kernels->v->data.S32[i]; // Offset in y 224 kernel->kernel[v][u] += value; 225 } 226 // The (0,0) kernel is subtracted from other kernels to preserve photometric scaling 227 if (kernels->spatialOrder > 0 && i != kernels->subIndex) { 228 kernel->kernel[0][0] += subValue; 229 } 230 break; 231 } 211 232 case PM_SUBTRACTION_KERNEL_ISIS: { 212 233 psKernel *preCalc = kernels->preCalc->data[i];// Precalculated values … … 355 376 return sum; 356 377 } 378 case PM_SUBTRACTION_KERNEL_GUNK: { 379 double value; // The value to return 380 if (index < kernels->inner) { 381 // Using pre-calculated function 382 psKernel *kernel = kernels->preCalc->data[index]; // The convolution kernel 383 int size = kernels->size; // Kernel half-size 384 double sum = 0.0; // Accumulated sum from convolution 385 double sub = 0.0; // Accumulated sum to subtract 386 for (int v = -size; v <= size; v++) { 387 for (int u = -size; u <= size; u++) { 388 sum += weightFunc(kernel->kernel[v][u]) * image->data.F32[y + v][x + u]; 389 } 390 } 391 value = weightFunc(polyValue) * sum + weightFunc(-1.0) * sub; 392 } else { 393 // Using delta function 394 int u = kernels->u->data.S32[index]; // Offset in x 395 int v = kernels->v->data.S32[index]; // Offset in y 396 value = weightFunc(polyValue) * image->data.F32[y + v][x + u]; // Value of convolution 397 } 398 /* The (0,0) delta function is subtracted from most kernels to preserve photometric scaling */ 399 if (kernels->spatialOrder > 0 && index != kernels->subIndex) { 400 value += weightFunc(-1.0) * image->data.F32[y][x]; 401 } 402 return value; 403 } 357 404 case PM_SUBTRACTION_KERNEL_ISIS: { 358 405 psKernel *kernel = kernels->preCalc->data[index]; // The convolution kernel
Note:
See TracChangeset
for help on using the changeset viewer.
