Changeset 28894
- Timestamp:
- Aug 11, 2010, 9:18:20 AM (16 years ago)
- Location:
- branches/eam_branches/ipp-20100621/psModules/src/imcombine
- Files:
-
- 5 edited
-
pmSubtractionEquation.c (modified) (2 diffs)
-
pmSubtractionKernels.c (modified) (2 diffs)
-
pmSubtractionStamps.c (modified) (4 diffs)
-
pmSubtractionStamps.h (modified) (1 diff)
-
pmSubtractionVisual.c (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
branches/eam_branches/ipp-20100621/psModules/src/imcombine/pmSubtractionEquation.c
r28866 r28894 603 603 matrix->data.F64[index][index] += norm * penalties1->data.F32[i]; 604 604 if (kernels->mode == PM_SUBTRACTION_MODE_DUAL) { 605 fprintf (stderr, "penalty: %f + %f (%f * %f)\n", matrix->data.F64[index + numParams + 2][index + numParams + 2], norm * penalties2->data.F32[i], norm, penalties2->data.F32[i]); 605 fprintf (stderr, "penalty: (x^%d y^%d fwhm %f) : %f + %f (%f * %f)\n", kernels->u->data.S32[index], kernels->v->data.S32[index], kernels->widths->data.F32[index], 606 matrix->data.F64[index + numParams + 2][index + numParams + 2], norm * penalties2->data.F32[i], norm, penalties2->data.F32[i]); 606 607 matrix->data.F64[index + numParams + 2][index + numParams + 2] += norm * penalties2->data.F32[i]; 607 608 // matrix[i][i] is ~ (k_i * I_1)(k_i * I_1) … … 1116 1117 1117 1118 int normIndex = PM_SUBTRACTION_INDEX_NORM(kernels); // Index for normalisation 1118 calculatePenalty(sumMatrix, sumVector, kernels, sumMatrix->data.F64[normIndex][normIndex] / 100 00.0);1119 calculatePenalty(sumMatrix, sumVector, kernels, sumMatrix->data.F64[normIndex][normIndex] / 100.0); 1119 1120 #endif 1120 1121 -
branches/eam_branches/ipp-20100621/psModules/src/imcombine/pmSubtractionKernels.c
r28866 r28894 218 218 if (uOrder % 2 == 0 && vOrder % 2 == 0) { 219 219 // Even functions: normalise to unit sum and subtract null pixel so that sum is zero 220 scale2D = 1.0 / fabs(sum); 220 // Re-normalize 221 // scale2D = 1.0 / fabs(sum); 222 scale2D = 1.0 / sqrt(sum2); 221 223 zeroNull = true; 222 224 } else { … … 252 254 253 255 if (zeroNull) { 254 preCalc->kernel->kernel[0][0] -= 1.0; 255 } 256 257 #if 0 256 // preCalc->kernel->kernel[0][0] -= 1.0; 257 preCalc->kernel->kernel[0][0] -= sum / sqrt (sum2); 258 } 259 260 #if 1 258 261 { 259 double sum = 0.0; // Sum of kernel component 262 double Sum = 0.0; // Sum of kernel component 263 double Sum2 = 0.0; // Sum of kernel component 260 264 float min = INFINITY, max = -INFINITY; // Minimum and maximum kernel value 261 265 for (int v = preCalc->kernel->yMin; v <= preCalc->kernel->yMax; v++) { 262 266 for (int u = preCalc->kernel->xMin; u <= preCalc->kernel->xMax; u++) { 263 sum += preCalc->kernel->kernel[v][u]; 267 double value = preCalc->kernel->kernel[v][u]; 268 Sum += value; 269 Sum2 += PS_SQR(value); 264 270 min = PS_MIN(preCalc->kernel->kernel[v][u], min); 265 271 max = PS_MAX(preCalc->kernel->kernel[v][u], max); 266 272 } 267 273 } 268 fprintf(stderr, "%d mod: %lf, null: %f, min: %lf, max: %lf, scale: %f\n", index, sum, preCalc->kernel->kernel[0][0], min, max, scale2D);274 fprintf(stderr, "%d sum: %lf, sum2: %lf, null: %f, min: %lf, max: %lf, scale: %f\n", index, Sum, Sum2, preCalc->kernel->kernel[0][0], min, max, scale2D); 269 275 } 270 276 #endif -
branches/eam_branches/ipp-20100621/psModules/src/imcombine/pmSubtractionStamps.c
r28866 r28894 891 891 pmSubtractionGetFWHMs(&fwhm1, &fwhm2); 892 892 893 bool zeroNull = false; 894 int uOrder = kernels->u->data.S32[index]; 895 int vOrder = kernels->v->data.S32[index]; 896 if (uOrder % 2 == 0 && vOrder % 2 == 0) zeroNull = true; 897 893 898 if (EMPIRICAL) { 894 899 psKernel *convolution1 = stamp->convolutions1->data[index]; 895 penalty1 = pmSubtractionKernelPenaltySingle(convolution1 );900 penalty1 = pmSubtractionKernelPenaltySingle(convolution1, zeroNull); 896 901 897 902 psKernel *convolution2 = stamp->convolutions2->data[index]; 898 penalty2 = pmSubtractionKernelPenaltySingle(convolution2 );903 penalty2 = pmSubtractionKernelPenaltySingle(convolution2, zeroNull); 899 904 } else { 900 905 pmSubtractionKernelPreCalc *kernel = kernels->preCalc->data[index]; 901 float M2 = pmSubtractionKernelPenaltySingle(kernel->kernel );902 903 penalty1 = M2 *PS_SQR(fwhm1 / 2.35); // rescale the unconvolved second-moment by the image second moment904 penalty2 = M2 *PS_SQR(fwhm2 / 2.35); // rescale the unconvolved second-moment by the image second moment906 float M2 = pmSubtractionKernelPenaltySingle(kernel->kernel, zeroNull); 907 908 penalty1 = M2 + PS_SQR(fwhm1 / 2.35); // rescale the unconvolved second-moment by the image second moment 909 penalty2 = M2 + PS_SQR(fwhm2 / 2.35); // rescale the unconvolved second-moment by the image second moment 905 910 } 906 911 kernels->penalties1->data.F32[index] = kernels->penalty * penalty1; … … 915 920 } 916 921 917 float pmSubtractionKernelPenaltySingle(psKernel *kernel )922 float pmSubtractionKernelPenaltySingle(psKernel *kernel, bool zeroNull) 918 923 { 919 924 // Calculate moments … … 924 929 for (int u = kernel->xMin; u <= kernel->xMax; u++) { 925 930 double value = kernel->kernel[v][u]; 931 if (false && zeroNull && (u == 0) && (v == 0)) { 932 value += 1.0; 933 } 926 934 double value2 = PS_SQR(value); 927 935 sum += value; … … 934 942 penalty *= 1.0 / sum2; 935 943 936 if ( 0) {937 fprintf(stderr, "min: %lf, max: %lf, moment: %lf \n", min, max, penalty);944 if (1) { 945 fprintf(stderr, "min: %lf, max: %lf, moment: %lf, flux^2: %lf\n", min, max, penalty, sum2); 938 946 // psTrace("psModules.imcombine", 7, "Kernel %d: %f %d %d %f\n", index, fwhm, uOrder, vOrder, penalty); 939 947 } -
branches/eam_branches/ipp-20100621/psModules/src/imcombine/pmSubtractionStamps.h
r28866 r28894 200 200 bool pmSubtractionKernelPenaltiesStamp(pmSubtractionStamp *stamp, pmSubtractionKernels *kernels); 201 201 bool pmSubtractionKernelPenalties(pmSubtractionStamp *stamp, pmSubtractionKernels *kernels, int index); 202 float pmSubtractionKernelPenaltySingle(psKernel *kernel );202 float pmSubtractionKernelPenaltySingle(psKernel *kernel, bool zeroNull); 203 203 204 204 #endif -
branches/eam_branches/ipp-20100621/psModules/src/imcombine/pmSubtractionVisual.c
r28866 r28894 234 234 bool pmSubtractionVisualShowKernels(pmSubtractionKernels *kernels) { 235 235 236 if (!pmVisualTestLevel("ppsub.kern .final", 1)) return true;236 if (!pmVisualTestLevel("ppsub.kernels.final", 1)) return true; 237 237 238 238 if (!pmVisualInitWindow (&kapa1, "PPSub:Images")) {
Note:
See TracChangeset
for help on using the changeset viewer.
