IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Changeset 25860


Ignore:
Timestamp:
Oct 15, 2009, 4:58:42 PM (17 years ago)
Author:
Paul Price
Message:

Fixed implementation of chi2 penalties. Using penalties going as r4 (following Yuan & Akerlof 2008).

Location:
branches/pap/psModules/src/imcombine
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • branches/pap/psModules/src/imcombine/pmSubtractionEquation.c

    r25858 r25860  
    379379
    380380// Add in penalty term to least-squares vector
    381 static bool calculatePenalty(psVector *vector, // Vector to which to add in penalty term
    382                              const pmSubtractionKernels *kernels // Kernel parameters
     381static bool calculatePenalty(psImage *matrix,                     // Matrix to which to add in penalty term
     382                             psVector *vector,                    // Vector to which to add in penalty term
     383                             const pmSubtractionKernels *kernels, // Kernel parameters
     384                             float norm                           // Normalisation
    383385    )
    384386{
     
    393395        for (int yOrder = 0, index = i; yOrder <= spatialOrder; yOrder++) {
    394396            for (int xOrder = 0; xOrder <= spatialOrder - yOrder; xOrder++, index += numKernels) {
    395                 vector->data.F64[index] -= penalties->data.F32[i];
     397                matrix->data.F64[index][index] -= norm * penalties->data.F32[i];
    396398            }
    397399        }
     
    786788#endif
    787789
    788         calculatePenalty(sumVector, kernels);
     790        int bgIndex = PM_SUBTRACTION_INDEX_BG(kernels); // Index for background
     791        calculatePenalty(sumMatrix, sumVector, kernels, sumMatrix->data.F64[bgIndex][bgIndex]);
    789792
    790793#ifdef TESTING
     
    870873            }
    871874        }
    872         calculatePenalty(sumVector1, kernels);
    873         calculatePenalty(sumVector2, kernels);
     875
     876        int bgIndex = PM_SUBTRACTION_INDEX_BG(kernels); // Index for background
     877        calculatePenalty(sumMatrix1, sumVector1, kernels, sumMatrix1->data.F64[bgIndex][bgIndex]);
     878        calculatePenalty(sumMatrix2, sumVector2, kernels, -sumMatrix1->data.F64[bgIndex][bgIndex]);
    874879
    875880        // Pure matrix operations
  • branches/pap/psModules/src/imcombine/pmSubtractionKernels.c

    r25841 r25860  
    9494            kernels->v->data.S32[index] = v;
    9595            kernels->preCalc->data[index] = NULL;
    96             kernels->penalties->data.F32[index] = kernels->penalty * (PS_SQR(u) + PS_SQR(v));
     96            kernels->penalties->data.F32[index] = kernels->penalty * PS_SQR(PS_SQR(u) + PS_SQR(v));
    9797
    9898            psTrace("psModules.imcombine", 7, "Kernel %d: %d %d\n", index, u, v);
     
    151151                        double value = xKernel->data.F32[x] * yKernel->data.F32[y]; // Value of kernel
    152152                        kernel->kernel[v][u] = value;
    153                         moment += value * (PS_SQR(u) + PS_SQR(v));
     153                        moment += value * PS_SQR((PS_SQR(u) + PS_SQR(v)));
    154154                    }
    155155                }
     
    190190                kernels->preCalc->data[index] = preCalc;
    191191                kernels->penalties->data.F32[index] = kernels->penalty * fabsf(moment);
     192                fprintf(stderr, "Penalty %d: %f\n", index, kernels->penalty * fabsf(moment));
    192193
    193194                psTrace("psModules.imcombine", 7, "Kernel %d: %f %d %d %f\n", index,
     
    592593                                    poly->data.F32[j] = polyVal;
    593594                                    norm += polyVal;
    594                                     moment += polyVal * (PS_SQR(u) + PS_SQR(v));
     595                                    moment += polyVal * PS_SQR(PS_SQR(u) + PS_SQR(v));
    595596
    596597                                    psVectorExtend(uCoords, RINGS_BUFFER, 1);
     
    618619                        psBinaryOp(poly, poly, "*", psScalarAlloc(1.0 / norm, PS_TYPE_F32));
    619620                    }
    620 //                    moment /= norm;
     621                    moment /= norm;
    621622                }
    622623
Note: See TracChangeset for help on using the changeset viewer.