summaryrefslogtreecommitdiffstats
path: root/tksao/util
diff options
context:
space:
mode:
Diffstat (limited to 'tksao/util')
-rw-r--r--tksao/util/convolve.C51
-rw-r--r--tksao/util/convolve.h8
2 files changed, 25 insertions, 34 deletions
diff --git a/tksao/util/convolve.C b/tksao/util/convolve.C
index 3cec687..d09a69e 100644
--- a/tksao/util/convolve.C
+++ b/tksao/util/convolve.C
@@ -11,11 +11,14 @@ using namespace std;
#include "convolve.h"
-void boxcar(double* kernel, int k)
+double* boxcar(int k)
{
int kk = 2*k+1;
int kk2 = kk*kk;
+ double* kernel = new double[kk*kk];
+ memset(kernel, 0, kk*kk*sizeof(double));
+
for (int yy=-k; yy<=k; yy++)
for (int xx=-k; xx<=k; xx++)
kernel[(yy+k)*kk+(xx+k)] = 1;
@@ -24,15 +27,18 @@ void boxcar(double* kernel, int k)
for (int ii=0; ii<kk2; ii++)
kernel[ii] /= kk2;
- // dumpKernel(kernel, k);
+ return kernel;
}
-void tophat(double* kernel, int k)
+double* tophat(int k)
{
- int k2 = k*k;
int kk = 2*k+1;
+ int k2 = k*k;
int kk2 = kk*kk;
+ double* kernel = new double[kk*kk];
+ memset(kernel, 0, kk*kk*sizeof(double));
+
int cnt =0;
for (int yy=-k; yy<=k; yy++)
for (int xx=-k; xx<=k; xx++)
@@ -46,16 +52,19 @@ void tophat(double* kernel, int k)
for (int ii=0; ii<kk2; ii++)
kernel[ii] /= cnt;
- // dumpKernel(kernel, k);
+ return kernel;
}
-void gaussian(double* kernel, int k, double ss)
+double* gaussian(int k, double ss)
{
int kk = 2*k+1;
int k2 = k*k;
int kk2 = kk*kk;
double s2 = ss*ss;
+ double* kernel = new double[kk*kk];
+ memset(kernel, 0, kk*kk*sizeof(double));
+
double tt =0;
for (int yy=-k; yy<=k; yy++)
for (int xx=-k; xx<=k; xx++) {
@@ -71,16 +80,19 @@ void gaussian(double* kernel, int k, double ss)
for (int ii=0; ii<kk2; ii++)
kernel[ii] /= tt;
- // dumpKernel(kernel, k);
+ return kernel;
}
-void elliptic(double* kernel, int k, int rm, double ss, double sm, double aa)
+double* elliptic(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* kernel = new double[kk*kk];
+ memset(kernel, 0, kk*kk*sizeof(double));
+
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);
@@ -103,7 +115,7 @@ void elliptic(double* kernel, int k, int rm, double ss, double sm, double aa)
for (int ii=0; ii<kk2; ii++)
kernel[ii] /= tt;
- // dumpKernel(kernel, k);
+ return kernel;
}
void dumpKernel(double* kernel, int k)
@@ -121,26 +133,6 @@ void* convolve(double* kernel, double* src, double* dest,
{
int kk = 2*k+1;
- if (0) {
- double* dptr = dest;
- int height = ymax;
- 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];
- }
- }
- }
- }
- }
- }
- else {
for (int jj=ymin; jj<ymax; jj++) {
for (int ii=xmin; ii<xmax; ii++) {
register int dd = jj*width+ii;
@@ -156,7 +148,6 @@ void* convolve(double* kernel, double* src, double* dest,
}
}
}
- }
return NULL;
}
diff --git a/tksao/util/convolve.h b/tksao/util/convolve.h
index 7465833..637cf97 100644
--- a/tksao/util/convolve.h
+++ b/tksao/util/convolve.h
@@ -5,10 +5,10 @@
#ifndef __convolve_h__
#define __convolve_h__
-void boxcar(double* kernel, int r);
-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);
+double* boxcar(int r);
+double* tophat(int r);
+double* gaussian(int r, double sigma);
+double* elliptic(int r, int m, double ss, double sm, double aa);
void* convolve(double* kernel, double* src, double* dest,
int xmin, int ymin, int xmax, int ymax, int width, int k);