IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Changeset 14541


Ignore:
Timestamp:
Aug 16, 2007, 5:25:16 PM (19 years ago)
Author:
Paul Price
Message:

Fixing normalisation of RINGS. Don't include pixels if they contribute zero.

File:
1 edited

Legend:

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

    r14540 r14541  
    555555        // Iterate over (u,v) order
    556556        for (int uOrder = 0; uOrder <= (i == 0 ? 0 : ringsOrder); uOrder++) {
    557             for (int vOrder = 0; vOrder <= (i == 0 ? 0 : ringsOrder) - uOrder; vOrder++, index++) {
     557            for (int vOrder = 0; vOrder <= (i == 0 ? 0 : ringsOrder - uOrder); vOrder++, index++) {
    558558
    559559                psArray *data = psArrayAlloc(3); // Container for data
     
    581581                                float uPoly = power(u, uOrder); // Value of u^uOrder
    582582
    583                                 uCoords->data.S32[j] = u;
    584                                 vCoords->data.S32[j] = v;
    585                                 norm += poly->data.F32[j] = uPoly * vPoly;
    586 
    587                                 psVectorExtend(uCoords, RINGS_BUFFER, 1);
    588                                 psVectorExtend(vCoords, RINGS_BUFFER, 1);
    589                                 psVectorExtend(poly, RINGS_BUFFER, 1);
    590 
    591                                 psTrace("psModules.imcombine", 9, "u = %d, v = %d, poly = %f\n",
    592                                         u, v, poly->data.F32[j]);
    593 
    594                                 j++;
     583                                float polyVal = uPoly * vPoly; // Value of polynomial
     584                                if (polyVal != 0) { // No point adding it otherwise
     585                                    uCoords->data.S32[j] = u;
     586                                    vCoords->data.S32[j] = v;
     587                                    poly->data.F32[j] = polyVal;
     588                                    norm += polyVal;
     589
     590                                    psVectorExtend(uCoords, RINGS_BUFFER, 1);
     591                                    psVectorExtend(vCoords, RINGS_BUFFER, 1);
     592                                    psVectorExtend(poly, RINGS_BUFFER, 1);
     593                                    psTrace("psModules.imcombine", 9, "u = %d, v = %d, poly = %f\n",
     594                                            u, v, poly->data.F32[j]);
     595                                    j++;
     596                                }
    595597                            }
    596598                        }
     
    599601                    if (uOrder % 2 == 0 && vOrder % 2 == 0) {
    600602                        psBinaryOp(poly, poly, "*", psScalarAlloc(1.0 / norm, PS_TYPE_F32));
     603                        // Add subtraction of 0,0 component to preserve photometric scaling
    601604                        uCoords->data.S32[j] = 0;
    602605                        vCoords->data.S32[j] = 0;
     
    606609                        psVectorExtend(poly, RINGS_BUFFER, 1);
    607610                    } else {
    608                         psBinaryOp(poly, poly, "*", psScalarAlloc(1.0 / (float)j, PS_TYPE_F32));
     611                        norm = powf(size, uOrder) * powf(size, vOrder)
     612                        psBinaryOp(poly, poly, "*", psScalarAlloc(1.0 / norm, PS_TYPE_F32));
    609613                    }
    610614                }
    611615
    612                 psTrace("psModules.imcombine", 8, "%ld pixels in ring\n", uCoords->n);
     616                psTrace("psModules.imcombine", 8, "%ld pixels in kernel\n", uCoords->n);
    613617
    614618                kernels->preCalc->data[index] = data;
Note: See TracChangeset for help on using the changeset viewer.