diff options
Diffstat (limited to 'tksao')
-rw-r--r-- | tksao/frame/fitsanalysis.C | 43 | ||||
-rw-r--r-- | tksao/util/convolve.C | 24 | ||||
-rw-r--r-- | tksao/util/convolve.h | 3 |
3 files changed, 35 insertions, 35 deletions
diff --git a/tksao/frame/fitsanalysis.C b/tksao/frame/fitsanalysis.C index eb823b4..cad6cb7 100644 --- a/tksao/frame/fitsanalysis.C +++ b/tksao/frame/fitsanalysis.C @@ -9,8 +9,6 @@ #include "context.h" #include "convolve.h" -static void* convolve(void* tt); - void FitsImage::analysis(int which, pthread_t* thread, t_smooth_arg* targ) { if (DebugPerf) @@ -51,6 +49,13 @@ void FitsImage::analysis(int which, pthread_t* thread, t_smooth_arg* targ) data_ = analysisdata_; } +void* convolveThread(void* vv) +{ + t_smooth_arg* tt = (t_smooth_arg*)vv; + convolve(tt->kernel, tt->src, tt->dest, tt->width, tt->height, tt->k); + return NULL; +} + void FitsImage::smooth(pthread_t* thread, t_smooth_arg* targ) { int rr = context_->smoothRadius(); @@ -101,40 +106,8 @@ void FitsImage::smooth(pthread_t* thread, t_smooth_arg* targ) targ->height = hh; targ->k = rr; - int result = pthread_create(thread, NULL, convolve, targ); + int result = pthread_create(thread, NULL, convolveThread, targ); if (result) internalError("Unable to Create Thread"); } -void* convolve(void* tt) -{ - t_smooth_arg* targ = (t_smooth_arg*)tt; - double* kernel = targ->kernel; - double* src = targ->src; - double* dest = targ->dest; - int width = targ->width; - int height = targ->height; - int k = targ->k; - - int kk = 2*k+1; - - double* dptr = dest; - for (int jj=0; jj<height; jj++) { - for (int ii=0; ii<width; ii++, dptr++) { - - for (int nn=jj-k, qq=0; nn<=jj+k; nn++, qq++) { - if (nn>=0 && nn<height) { - register int nd = nn*width; - register int qd = qq*kk; - for (int mm=ii-k, pp=0; mm<=ii+k; mm++, pp++) { - if (mm>=0 && mm<width) - *dptr += src[nd+mm]*kernel[qd+pp]; - } - } - } - } - } - - return NULL; -} - diff --git a/tksao/util/convolve.C b/tksao/util/convolve.C index bdc6739..51b5f15 100644 --- a/tksao/util/convolve.C +++ b/tksao/util/convolve.C @@ -116,3 +116,27 @@ void dumpKernel(double* kernel, int k) << kernel[(yy+k)*kk+(xx+k)] << endl; } +void* convolve(double* kernel, double* src, double* dest, + int width, int height, int k) +{ + int kk = 2*k+1; + + double* dptr = dest; + for (int jj=0; jj<height; jj++) { + for (int ii=0; ii<width; ii++, dptr++) { + + for (int nn=jj-k, qq=0; nn<=jj+k; nn++, qq++) { + if (nn>=0 && nn<height) { + register int nd = nn*width; + register int qd = qq*kk; + for (int mm=ii-k, pp=0; mm<=ii+k; mm++, pp++) { + if (mm>=0 && mm<width) + *dptr += src[nd+mm]*kernel[qd+pp]; + } + } + } + } + } + + return NULL; +} diff --git a/tksao/util/convolve.h b/tksao/util/convolve.h index 90b8f74..5aeb551 100644 --- a/tksao/util/convolve.h +++ b/tksao/util/convolve.h @@ -10,4 +10,7 @@ void tophat(double* kernel, int r); void gaussian(double* kernel, int r, double sigma); void elliptic(double* kernel, int r, int m, double ss, double sm, double aa); +void* convolve(double* kernel, double* src, double* dest, + int width, int height, int k); + #endif |