Changeset 14360 for trunk/psModules/src/imcombine/pmSubtraction.c
- Timestamp:
- Jul 20, 2007, 6:30:57 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
r14340 r14360 4 4 * @author GLG, MHPCC 5 5 * 6 * @version $Revision: 1.3 1$ $Name: not supported by cvs2svn $7 * @date $Date: 2007-07-2 0 21:18:50$6 * @version $Revision: 1.32 $ $Name: not supported by cvs2svn $ 7 * @date $Date: 2007-07-21 04:30:57 $ 8 8 * 9 9 * Copyright 2004-2007 Institute for Astronomy, University of Hawaii … … 170 170 break; \ 171 171 } \ 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 } \ 172 192 default: \ 173 193 psAbort("Should never get here."); \ … … 274 294 break; 275 295 } 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 } 276 318 default: 277 319 psAbort("Should never get here."); … … 367 409 } 368 410 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]; 369 428 } 370 429 default:
Note:
See TracChangeset
for help on using the changeset viewer.
