IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Ignore:
Timestamp:
Dec 11, 2012, 2:04:31 PM (13 years ago)
Author:
watersc1
Message:

Merge from my branch including background restoration and stack stage projection cell binned images.

Location:
trunk
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk

  • trunk/psLib/src/imageops/psImageInterpolate.c

    r34365 r34800  
    3131#include "psImageConvolve.h"
    3232
    33 # define IS_BILIN_SEPARABLE 0
     33# define IS_BILIN_SEPARABLE 1
    3434
    3535#include "psImageInterpolate.h"
     
    189189    switch (mode) {
    190190      case PS_INTERPOLATE_FLAT:
     191      case PS_INTERPOLATE_BILINEAR_SIMPLE:
    191192        // Nothing to pre-compute
    192193        break;
     
    287288# endif
    288289      case PS_INTERPOLATE_BIQUADRATIC:
     290      case PS_INTERPOLATE_BILINEAR_SIMPLE:
    289291        // 2D kernel, would cost too much memory to pre-calculate
    290292        break;
     293
    291294      default:
    292295        psAbort("Unsupported interpolation mode: %x", mode);
     
    937940
    938941
     942psImageInterpolateStatus interpolateJustWork(double *imageValue, double *varianceValue,
     943                                             psImageMaskType *maskValue, float x, float y,
     944                                             const psImageInterpolation *interp) {
     945  float u1,u2;
     946  int xl,xh;
     947  int yl,yh;
     948  const psImage *image = interp->image; // Image to interpolate
     949
     950  xl = floor(x);
     951  if (xl < 0) { xl = 0; }
     952  if (xl >= image->numCols) {xl = image->numCols - 1; }
     953  xh = xl + 1;
     954  if (xh >= image->numCols) {xh = image->numCols - 1; }
     955
     956  yl = floor(y);
     957  if (yl < 0) { yl = 0; }
     958  if (yl >= image->numRows) {yl = image->numRows - 1; }
     959  yh = yl + 1;
     960  if (yh >= image->numRows) {yh = image->numRows - 1; }
     961
     962  if (imageValue && image) {
     963    if (image->data.F32[yl][xl] == image->data.F32[yl][xh]) {
     964      u1 = image->data.F32[yl][xh];
     965    }
     966    else {
     967      u1 = (xh - x) * image->data.F32[yl][xl] + (x - xl) * image->data.F32[yl][xh];
     968    }
     969    if (image->data.F32[yh][xl] == image->data.F32[yh][xh]) {
     970      u2 = image->data.F32[yh][xh];
     971    }
     972    else {
     973      u2 = (xh - x) * image->data.F32[yh][xl] + (x - xl) * image->data.F32[yh][xh];
     974    }
     975    if (u1 == u2) {
     976      *imageValue = u1;
     977    }
     978    else {
     979      *imageValue = (yh - y) * u1 + (y - yl) * u2;
     980    }
     981    if ((floor(x) >= image->numCols)||
     982        (floor(y) >= image->numRows)) {
     983      *imageValue = NAN;
     984    }
     985  }
     986#if (0)
     987  if (*imageValue == 0.0) {
     988    fprintf(stderr,"IJK: Zero!: %g %g [%d %d %d %d] %g %g (%g %g %g %g)\n",
     989            x,y,xl,xh,yl,yh,u1,u2,
     990            image->data.F32[yl][xl],image->data.F32[yl][xh],image->data.F32[yh][xl],image->data.F32[yh][xh]
     991            );
     992  }
     993#endif
     994  return PS_INTERPOLATE_STATUS_GOOD;
     995}
     996 
    939997
    940998psImageInterpolateStatus psImageInterpolate(double *imageValue, double *varianceValue,
     
    9691027      case PS_INTERPOLATE_BIQUADRATIC:
    9701028        return interpolateKernel(imageValue, varianceValue, maskValue, x, y, interp);
     1029      case PS_INTERPOLATE_BILINEAR_SIMPLE:
     1030        return interpolateJustWork(imageValue, varianceValue, maskValue, x, y, interp);
    9711031      case PS_INTERPOLATE_BILINEAR:
    9721032# if (!IS_BILIN_SEPARABLE)
    973         return interpolateKernel(imageValue, varianceValue, maskValue, x, y, interp);
     1033        return interpolateKernel(imageValue, varianceValue, maskValue, x, y, interp);
    9741034# endif
    9751035      case PS_INTERPOLATE_GAUSS:
     
    10191079    switch (mode) {
    10201080      case PS_INTERPOLATE_FLAT:
     1081      case PS_INTERPOLATE_BILINEAR_SIMPLE:
    10211082        // No smearing by design
    10221083        return 1.0;
     
    10831144    if (!strcasecmp(name, "FLAT"))     return PS_INTERPOLATE_FLAT;
    10841145    if (!strcasecmp(name, "BILINEAR")) return PS_INTERPOLATE_BILINEAR;
     1146    if (!strcasecmp(name, "SIMPLEBILINEAR")) return PS_INTERPOLATE_BILINEAR_SIMPLE;
    10851147    if (!strcasecmp(name, "BIQUADRATIC")) return PS_INTERPOLATE_BIQUADRATIC;
    10861148    if (!strcasecmp(name, "GAUSS"))    return PS_INTERPOLATE_GAUSS;
Note: See TracChangeset for help on using the changeset viewer.