IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Changeset 28894


Ignore:
Timestamp:
Aug 11, 2010, 9:18:20 AM (16 years ago)
Author:
eugene
Message:

some test prints are on; kernel second moments added in quadrature to image second moment

Location:
branches/eam_branches/ipp-20100621/psModules/src/imcombine
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • branches/eam_branches/ipp-20100621/psModules/src/imcombine/pmSubtractionEquation.c

    r28866 r28894  
    603603                matrix->data.F64[index][index] += norm * penalties1->data.F32[i];
    604604                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]);
    606607                    matrix->data.F64[index + numParams + 2][index + numParams + 2] += norm * penalties2->data.F32[i];                       
    607608                    // matrix[i][i] is ~ (k_i * I_1)(k_i * I_1)
     
    11161117
    11171118        int normIndex = PM_SUBTRACTION_INDEX_NORM(kernels); // Index for normalisation
    1118         calculatePenalty(sumMatrix, sumVector, kernels, sumMatrix->data.F64[normIndex][normIndex] / 10000.0);
     1119        calculatePenalty(sumMatrix, sumVector, kernels, sumMatrix->data.F64[normIndex][normIndex] / 100.0);
    11191120#endif
    11201121
  • branches/eam_branches/ipp-20100621/psModules/src/imcombine/pmSubtractionKernels.c

    r28866 r28894  
    218218        if (uOrder % 2 == 0 && vOrder % 2 == 0) {
    219219            // 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);
    221223            zeroNull = true;
    222224        } else {
     
    252254
    253255    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
    258261    {
    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
    260264        float min = INFINITY, max = -INFINITY;  // Minimum and maximum kernel value
    261265        for (int v = preCalc->kernel->yMin; v <= preCalc->kernel->yMax; v++) {
    262266            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);
    264270                min = PS_MIN(preCalc->kernel->kernel[v][u], min);
    265271                max = PS_MAX(preCalc->kernel->kernel[v][u], max);
    266272            }
    267273        }
    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);
    269275    }
    270276#endif
  • branches/eam_branches/ipp-20100621/psModules/src/imcombine/pmSubtractionStamps.c

    r28866 r28894  
    891891    pmSubtractionGetFWHMs(&fwhm1, &fwhm2);
    892892
     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
    893898    if (EMPIRICAL) {
    894899        psKernel *convolution1 = stamp->convolutions1->data[index];
    895         penalty1 = pmSubtractionKernelPenaltySingle(convolution1);
     900        penalty1 = pmSubtractionKernelPenaltySingle(convolution1, zeroNull);
    896901
    897902        psKernel *convolution2 = stamp->convolutions2->data[index];
    898         penalty2 = pmSubtractionKernelPenaltySingle(convolution2);
     903        penalty2 = pmSubtractionKernelPenaltySingle(convolution2, zeroNull);
    899904    } else {
    900905        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 moment
    904         penalty2 = M2 * PS_SQR(fwhm2 / 2.35); // rescale the unconvolved second-moment by the image second moment
     906        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
    905910    }
    906911    kernels->penalties1->data.F32[index] = kernels->penalty * penalty1;
     
    915920}
    916921
    917 float pmSubtractionKernelPenaltySingle(psKernel *kernel)
     922float pmSubtractionKernelPenaltySingle(psKernel *kernel, bool zeroNull)
    918923{
    919924    // Calculate moments
     
    924929        for (int u = kernel->xMin; u <= kernel->xMax; u++) {
    925930            double value = kernel->kernel[v][u];
     931            if (false && zeroNull && (u == 0) && (v == 0)) {
     932                value += 1.0;
     933            }
    926934            double value2 = PS_SQR(value);
    927935            sum += value;
     
    934942    penalty *= 1.0 / sum2;
    935943
    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);
    938946        // psTrace("psModules.imcombine", 7, "Kernel %d: %f %d %d %f\n", index, fwhm, uOrder, vOrder, penalty);
    939947    }
  • branches/eam_branches/ipp-20100621/psModules/src/imcombine/pmSubtractionStamps.h

    r28866 r28894  
    200200bool pmSubtractionKernelPenaltiesStamp(pmSubtractionStamp *stamp, pmSubtractionKernels *kernels);
    201201bool pmSubtractionKernelPenalties(pmSubtractionStamp *stamp, pmSubtractionKernels *kernels, int index);
    202 float pmSubtractionKernelPenaltySingle(psKernel *kernel);
     202float pmSubtractionKernelPenaltySingle(psKernel *kernel, bool zeroNull);
    203203
    204204#endif
  • branches/eam_branches/ipp-20100621/psModules/src/imcombine/pmSubtractionVisual.c

    r28866 r28894  
    234234bool pmSubtractionVisualShowKernels(pmSubtractionKernels *kernels) {
    235235
    236     if (!pmVisualTestLevel("ppsub.kern.final", 1)) return true;
     236    if (!pmVisualTestLevel("ppsub.kernels.final", 1)) return true;
    237237
    238238    if (!pmVisualInitWindow (&kapa1, "PPSub:Images")) {
Note: See TracChangeset for help on using the changeset viewer.