summaryrefslogtreecommitdiffstats
path: root/tksao/frame/fitsanalysis.C
diff options
context:
space:
mode:
Diffstat (limited to 'tksao/frame/fitsanalysis.C')
-rw-r--r--tksao/frame/fitsanalysis.C112
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;