IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Ignore:
Timestamp:
May 11, 2007, 5:38:32 PM (19 years ago)
Author:
Paul Price
Message:

Had left out raising numbers to the power zero.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/psModules/src/imcombine/pmSubtractionKernels.c

    r13340 r13370  
    2525    )
    2626{
     27    if (exp == 0) {
     28        return 1.0;
     29    }
    2730    float result = value;               // Result to return
    2831    for (int i = 2; i < exp; i++) {
     
    8285    }
    8386
    84     kernels->subIndex = PS_SQR(size + 1);
     87    kernels->subIndex = num / 2;
    8588    assert(kernels->u->data.S32[kernels->subIndex] == 0 &&
    8689           kernels->v->data.S32[kernels->subIndex] == 0 &&
     
    106109    int num = 0;                        // Number of basis functions
    107110    for (int i = 0; i < numGaussians; i++) {
    108         num += sigmas->data.F32[i] * orders->data.F32[i];
     111        int gaussOrder = orders->data.S32[i]; // Polynomial order to apply to Gaussian
     112        num += (gaussOrder + 1) * (gaussOrder + 2) / 2;
    109113    }
    110114    num *= (spatialOrder + 1) * (spatialOrder + 2) / 2;
     
    124128                psKernel *preCalc = psKernelAlloc(-size, size, -size, size);
    125129                for (int v = -size; v <= size; v++) {
    126                     for (int u = -size; u < size; u++) {
     130                    for (int u = -size; u <= size; u++) {
    127131                        preCalc->kernel[v][u] = power(u, uOrder) * power(v, vOrder) *
    128                             expf(0.5 * (PS_SQR(u) + PS_SQR(v)) / PS_SQR(sigmas->data.F32[i]));
     132                            expf(-0.5 * (PS_SQR(u) + PS_SQR(v)) / PS_SQR(sigmas->data.F32[i]));
    129133                    }
    130134                }
     
    147151    }
    148152
     153    kernels->subIndex = (spatialOrder + 1) * (spatialOrder + 2) / 4;
     154    assert(kernels->u->data.S32[kernels->subIndex] == 0 &&
     155           kernels->v->data.S32[kernels->subIndex] == 0 &&
     156           kernels->xOrder->data.S32[kernels->subIndex] == 0 &&
     157           kernels->yOrder->data.S32[kernels->subIndex] == 0);
     158
    149159    return kernels;
    150160}
Note: See TracChangeset for help on using the changeset viewer.