IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Ignore:
Timestamp:
Dec 29, 2009, 8:04:00 AM (17 years ago)
Author:
eugene
Message:

modify preCalc to carry a specific structure to avoid confusion of array elements; update to use deconvolved hermitians

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/eam_branches/20091201/psModules/src/imcombine/pmSubtraction.c

    r26474 r26491  
    7272{
    7373    int size = kernels->size;           // Kernel half-size
    74     psArray *preCalc = kernels->preCalc->data[index]; // Precalculated values
     74    pmSubtractionKernelPreCalc *preCalc = kernels->preCalc->data[index]; // Precalculated values
    7575#if 0
    76     psVector *xKernel = preCalc->data[0]; // Kernel in x
    77     psVector *yKernel = preCalc->data[1]; // Kernel in y
    7876    // Iterating over the kernel
    7977    for (int y = 0, v = -size; v <= size; y++, v++) {
    80         float yValue = value * yKernel->data.F32[y];
     78        float yValue = value * preCalc->yKernel->data.F32[y];
    8179        for (int x = 0, u = -size; u <= size; x++, u++) {
    82             kernel->kernel[v][u] +=  yValue * xKernel->data.F32[x];
     80            kernel->kernel[v][u] +=  yValue * preCalc->xKernel->data.F32[x];
    8381        }
    8482    }
     
    8886    }
    8987#else
    90     psKernel *k = preCalc->data[2]; // Kernel image
    9188    for (int v = -size; v <= size; v++) {
    9289        for (int u = -size; u <= size; u++) {
    93             kernel->kernel[v][u] +=  value * k->kernel[v][u];
     90            kernel->kernel[v][u] +=  value * preCalc->kernel->kernel[v][u];
    9491        }
    9592    }
     
    168165              break;
    169166          }
     167          case PM_SUBTRACTION_KERNEL_DECONV_HERM: {
     168              solvedKernelISIS(kernel, kernels, value, i);
     169              break;
     170          }
    170171          case PM_SUBTRACTION_KERNEL_RINGS: {
    171               psArray *preCalc = kernels->preCalc->data[i]; // Precalculated data
    172               psVector *uCoords = preCalc->data[0]; // u coordinates
    173               psVector *vCoords = preCalc->data[1]; // v coordinates
    174               psVector *poly = preCalc->data[2]; // Polynomial values
    175               int num = uCoords->n;     // Number of pixels
     172              pmSubtractionKernelPreCalc *preCalc = kernels->preCalc->data[i]; // Precalculated kernels
     173              int num = preCalc->uCoords->n;     // Number of pixels
    176174
    177175              for (int j = 0; j < num; j++) {
    178                   int u = uCoords->data.S32[j], v = vCoords->data.S32[j]; // Kernel coordinates
    179                   kernel->kernel[v][u] += poly->data.F32[j] * value;
     176                  int u = preCalc->uCoords->data.S32[j];
     177                  int v = preCalc->vCoords->data.S32[j]; // Kernel coordinates
     178                  kernel->kernel[v][u] += preCalc->poly->data.F32[j] * value;
    180179              }
    181180              // Photometric scaling is built into the kernel --- no subtraction!
     
    466465    )
    467466{
    468     psArray *preCalc = kernels->preCalc->data[index]; // Precalculated data
     467    pmSubtractionKernelPreCalc *preCalc = kernels->preCalc->data[index]; // Precalculated data
    469468#if 0
    470469    // Convolving using separable convolution
    471     psVector *xKernel = preCalc->data[0]; // Kernel in x
    472     psVector *yKernel = preCalc->data[1]; // Kernel in y
    473470    int size = kernels->size;     // Size of kernel
    474471
     
    482479            float value = 0.0;    // Value of convolved pixel
    483480            int uMin = x - size, uMax = x + size; // Range for u
    484             psF32 *xKernelData = &xKernel->data.F32[xKernel->n - 1]; // Kernel values
     481            psF32 *xKernelData = &preCalc->xKernel->data.F32[xKernel->n - 1]; // Kernel values
    485482            psF32 *imageData = &image->kernel[y][uMin]; // Image values
    486483            for (int u = uMin; u <= uMax; u++, xKernelData--, imageData++) {
     
    497494            float value = 0.0;    // Value of convolved pixel
    498495            int vMin = y - size, vMax = y + size; // Range for v
    499             psF32 *yKernelData = &yKernel->data.F32[yKernel->n - 1]; // Kernel values
     496            psF32 *yKernelData = &preCalc->yKernel->data.F32[yKernel->n - 1]; // Kernel values
    500497            psF32 *imageData = &temp->kernel[x][vMin]; // Image values; NOTE: wrong way!
    501498            for (int v = vMin; v <= vMax; v++, yKernelData--, imageData++) {
     
    514511#else
    515512    // Convolving using precalculated kernel
    516     return p_pmSubtractionConvolveStampPrecalc(image, preCalc->data[2]);
     513    return p_pmSubtractionConvolveStampPrecalc(image, preCalc->kernel);
    517514#endif
    518515}
     
    687684          return convolveStampISIS(image, kernels, index, footprint);
    688685      }
     686      case PM_SUBTRACTION_KERNEL_DECONV_HERM: {
     687          return convolveStampISIS(image, kernels, index, footprint);
     688      }
    689689      case PM_SUBTRACTION_KERNEL_RINGS: {
    690           psKernel *convolved = psKernelAlloc(-footprint, footprint,
    691                                               -footprint, footprint); // Convolved image
    692           psArray *preCalc = kernels->preCalc->data[index]; // Precalculated data
    693           psVector *uCoords = preCalc->data[0]; // u coordinates
    694           psVector *vCoords = preCalc->data[1]; // v coordinates
    695           psVector *poly = preCalc->data[2]; // Polynomial values
    696           int num = uCoords->n;         // Number of pixels
    697           psS32 *uData = uCoords->data.S32, *vData = vCoords->data.S32; // Dereference u,v coordinates
    698           psF32 *polyData = poly->data.F32; // Dereference polynomial values
     690          psKernel *convolved = psKernelAlloc(-footprint, footprint, -footprint, footprint); // Convolved image
     691          pmSubtractionKernelPreCalc *preCalc = kernels->preCalc->data[index]; // Precalculated data
     692
     693          int num = preCalc->uCoords->n;         // Number of pixels
     694          psS32 *uData = preCalc->uCoords->data.S32; // Dereference v coordinate
     695          psS32 *vData = preCalc->vCoords->data.S32; // Dereference u coordinate
     696          psF32 *polyData = preCalc->poly->data.F32; // Dereference polynomial values
    699697          psF32 **imageData = image->kernel;  // Dereference image
    700698          psF32 **convData = convolved->kernel; // Dereference convolved image
Note: See TracChangeset for help on using the changeset viewer.