diff options
Diffstat (limited to 'tksao/frame/fitsanalysis.C')
-rw-r--r-- | tksao/frame/fitsanalysis.C | 112 |
1 files changed, 2 insertions, 110 deletions
diff --git a/tksao/frame/fitsanalysis.C b/tksao/frame/fitsanalysis.C index 99e1e58..eb823b4 100644 --- a/tksao/frame/fitsanalysis.C +++ b/tksao/frame/fitsanalysis.C @@ -4,14 +4,11 @@ #include <pthread.h> -#include "fitsimage.h" #include "analysis.h" +#include "fitsimage.h" #include "context.h" +#include "convolve.h" -static void boxcar(double* kernel, int r); -static void tophat(double* kernel, int r); -static void gaussian(double* kernel, int r, double sigma); -static void elliptic(double* kernel, int r, int m, double ss, double sm, double aa); static void* convolve(void* tt); void FitsImage::analysis(int which, pthread_t* thread, t_smooth_arg* targ) @@ -109,111 +106,6 @@ void FitsImage::smooth(pthread_t* thread, t_smooth_arg* targ) internalError("Unable to Create Thread"); } -static void boxcar(double* kernel, int k) -{ - int kk = 2*k+1; - int kk2 = kk*kk; - - for (int yy=-k; yy<=k; yy++) - for (int xx=-k; xx<=k; xx++) - kernel[(yy+k)*kk+(xx+k)] = 1; - - // normalize kernel - for (int ii=0; ii<kk2; ii++) - kernel[ii] /= kk2; - - // dumpKernel(kernel, k); -} - -void tophat(double* kernel, int k) -{ - int k2 = k*k; - int kk = 2*k+1; - int kk2 = kk*kk; - - int cnt =0; - for (int yy=-k; yy<=k; yy++) - for (int xx=-k; xx<=k; xx++) - if ((xx*xx + yy*yy)/k2 <= 1) { - kernel[(yy+k)*kk+(xx+k)] = 1; - cnt++; - } - - // normalize kernel - if (cnt) - for (int ii=0; ii<kk2; ii++) - kernel[ii] /= cnt; - - // dumpKernel(kernel, k); -} - -void gaussian(double* kernel, int k, double ss) -{ - int k2 = k*k; - int kk = 2*k+1; - int kk2 = kk*kk; - double s2 = ss*ss; - - double tt =0; - for (int yy=-k; yy<=k; yy++) - for (int xx=-k; xx<=k; xx++) { - if ((xx*xx + yy*yy) <= k2) { - double vv = exp(-.5*((xx*xx + yy*yy)/s2)); - kernel[(yy+k)*kk+(xx+k)] = vv; - tt += vv; - } - } - - // normalize kernel - if (tt) - for (int ii=0; ii<kk2; ii++) - kernel[ii] /= tt; - - // dumpKernel(kernel, k); -} - -void elliptic(double* kernel, int k, int rm, double ss, double sm, double aa) -{ - int kk = 2*k+1; - int kk2 = kk*kk; - double s2 = ss*ss; - double sm2 = sm*sm; - - double a = cos(aa)*cos(aa)/(2*s2) + sin(aa)*sin(aa)/(2*sm2); - double b = -sin(2*aa)/(4*s2) + sin(2*aa)/(4*sm2); - double c = sin(aa)*sin(aa)/(2*s2) + cos(aa)*cos(aa)/(2*sm2); - - double tt =0; - for (int yy=-k; yy<=k; yy++) { - for (int xx=-k; xx<=k; xx++) { - double dd = xx*cos(aa)+yy*sin(aa); - double ee = xx*sin(aa)-yy*cos(aa); - if ((dd*dd)/(k*k) + (ee*ee)/(rm*rm) <= 1) { - double vv = exp(-(a*xx*xx + 2*b*xx*yy + c*yy*yy)); - kernel[(yy+k)*kk+(xx+k)] = vv; - tt += vv; - } - } - } - - // normalize kernel - if (tt) - for (int ii=0; ii<kk2; ii++) - kernel[ii] /= tt; - - // dumpKernel(kernel, k); -} - -void dumpKernel(double* kernel, int k) -{ - int kk = 2*k+1; - - for (int yy=-k; yy<=k; yy++) - for (int xx=-k; xx<=k; xx++) - cerr << '(' << xx << ',' << yy << ")=" - << kernel[(yy+k)*kk+(xx+k)] << endl; -} - void* convolve(void* tt) { t_smooth_arg* targ = (t_smooth_arg*)tt; |