diff options
author | William Joye <wjoye@cfa.harvard.edu> | 2019-03-14 20:18:56 (GMT) |
---|---|---|
committer | William Joye <wjoye@cfa.harvard.edu> | 2019-03-14 20:18:56 (GMT) |
commit | 0ce59db44b7b943e4e70e1d42a8ad2eba0ab5a84 (patch) | |
tree | 063810515629c1bf37e5fe615c09114629cb08c1 /tksao/frame | |
parent | c571963e83bbc75781b1885b0ef7ca6860ea4fa7 (diff) | |
download | blt-0ce59db44b7b943e4e70e1d42a8ad2eba0ab5a84.zip blt-0ce59db44b7b943e4e70e1d42a8ad2eba0ab5a84.tar.gz blt-0ce59db44b7b943e4e70e1d42a8ad2eba0ab5a84.tar.bz2 |
thread contour
Diffstat (limited to 'tksao/frame')
-rw-r--r-- | tksao/frame/fvcontour.C | 50 |
1 files changed, 31 insertions, 19 deletions
diff --git a/tksao/frame/fvcontour.C b/tksao/frame/fvcontour.C index aa6a32c..5f39176 100644 --- a/tksao/frame/fvcontour.C +++ b/tksao/frame/fvcontour.C @@ -2,10 +2,11 @@ // Smithsonian Astrophysical Observatory, Cambridge, MA, USA // For conditions of distribution and use, see copyright notice in "copyright" +#include "fvcontour.h" #include "context.h" #include "base.h" #include "fitsimage.h" -#include "fvcontour.h" +#include "convolve.h" #include "sigbus.h" @@ -225,22 +226,33 @@ void FVContour::nobin(FitsImage* fits) for (long ii=0; ii<size; ii++) img[ii] = FLT_MIN; - // generate kernal + // generate kernel int r = smooth_-1; - double* kernal = gaussian(r); + double* kernel = NULL; + + if (0) + kernel = gaussian(r); + else { + int rr = 2*r+1; + double sigma = r/2.; + int ksz = rr*rr; + kernel = new double[ksz]; + memset(kernel, 0, ksz*sizeof(double)); + ::gaussian(kernel, r, sigma); + } // convolve - convolve(fits,kernal,img,r); + convolve(fits,kernel,img,r); // now, do contours build(width, height, img, fits->dataToRef); // cleanup - delete kernal; + delete kernel; delete [] img; } -void FVContour::convolve(FitsImage* fits, double* kernal, double* dest, int r) +void FVContour::convolve(FitsImage* fits, double* kernel, double* dest, int r) { FitsBound* params = fits->getDataParams(((Base*)parent_)->currentContext->secMode()); @@ -261,7 +273,7 @@ void FVContour::convolve(FitsImage* fits, double* kernal, double* dest, int r) if (m>=params->xmin && m<params->xmax) { double vv = fits->getValueDouble(n*width+m); if (isfinite(vv)) { - double kk = kernal[nn*rr+mm]; + double kk = kernel[nn*rr+mm]; double* ptr = dest+(jj*width+ii); if (*ptr == FLT_MIN) *ptr = vv*kk; @@ -281,24 +293,24 @@ double* FVContour::tophat(int r) { int rr = 2*r+1; int ksz = rr*rr; - double* kernal = new double[ksz]; - memset(kernal, 0, ksz*sizeof(double)); + double* kernel = new double[ksz]; + memset(kernel, 0, ksz*sizeof(double)); double kt = 0; for (int yy=-r; yy<=r; yy++) { for (int xx=-r; xx<=r; xx++) { if ((xx*xx + yy*yy) <= r*r) { - kernal[(yy+r)*rr+(xx+r)] = 1; + kernel[(yy+r)*rr+(xx+r)] = 1; kt++; } } } - // normalize kernal + // normalize kernel for (int aa=0; aa<ksz; aa++) - kernal[aa] /= kt; + kernel[aa] /= kt; - return kernal; + return kernel; } double* FVContour::gaussian(int r) @@ -306,8 +318,8 @@ double* FVContour::gaussian(int r) int rr = 2*r+1; int ksz = rr*rr; double sigma = r/2.; - double* kernal = new double[ksz]; - memset(kernal, 0, ksz*sizeof(double)); + double* kernel = new double[ksz]; + memset(kernel, 0, ksz*sizeof(double)); double kt = 0; double aa = 1./(sigma*sigma); @@ -316,17 +328,17 @@ double* FVContour::gaussian(int r) for (int xx=-r; xx<=r; xx++) { if ((xx*xx + yy*yy) <= r*r) { double vv = exp(-.5*(aa*xx*xx + cc*yy*yy)); - kernal[(yy+r)*rr+(xx+r)] = vv; + kernel[(yy+r)*rr+(xx+r)] = vv; kt += vv; } } } - // normalize kernal + // normalize kernel for (int aa=0; aa<ksz; aa++) - kernal[aa] /= kt; + kernel[aa] /= kt; - return kernal; + return kernel; } void FVContour::bin(FitsImage* fits) |