aboutsummaryrefslogtreecommitdiffstats
path: root/src/blind-kernel.c
diff options
context:
space:
mode:
authorMattias Andrée <maandree@kth.se>2017-07-25 22:12:23 +0200
committerMattias Andrée <maandree@kth.se>2017-07-25 22:12:23 +0200
commit835df7bd1e81852062dd70ce1a054fc9b510e50f (patch)
treede418467fc318adfcf5e3fdd8e75ea2a055386c9 /src/blind-kernel.c
parentAdd ability to choose korn shell implementation (diff)
downloadblind-835df7bd1e81852062dd70ce1a054fc9b510e50f.tar.gz
blind-835df7bd1e81852062dd70ce1a054fc9b510e50f.tar.bz2
blind-835df7bd1e81852062dd70ce1a054fc9b510e50f.tar.xz
Fix blind-kernel and blind-temporal-mean,d add blind-{spatial,temporal}-arithm and blind-spatial-mean, and add support for multiple streams in blind-arithm
Signed-off-by: Mattias Andrée <maandree@kth.se>
Diffstat (limited to 'src/blind-kernel.c')
-rw-r--r--src/blind-kernel.c36
1 files changed, 14 insertions, 22 deletions
diff --git a/src/blind-kernel.c b/src/blind-kernel.c
index 7bf1a60..ae66b24 100644
--- a/src/blind-kernel.c
+++ b/src/blind-kernel.c
@@ -3,7 +3,7 @@
USAGE("[-xyza] kernel [parameter] ...")
-#define SUBUSAGE(FORMAT) "usage: %s [-xyza] " FORMAT, argv0
+#define SUBUSAGE(FORMAT) "usage: %s [-xyza] " FORMAT "\n", argv0
#define STRCASEEQ3(A, B1, B2, B3) (!strcasecmp(A, B1) || !strcasecmp(A, B2) || !strcasecmp(A, B3))
#define LIST_KERNELS\
@@ -37,7 +37,7 @@ kernel_kirsch(int argc, char *argv[], size_t *rows, size_t *cols, double **free_
if (STRCASEEQ3(argv[0], "6", "SE", "ES")) return matrices[5];
if (STRCASEEQ3(argv[0], "7", "E", "E")) return matrices[6];
if (STRCASEEQ3(argv[0], "8", "NE", "EN")) return matrices[7];
- eprintf("Unrecognised direction: %s\n", argv[0]);
+ eprintf("unrecognised direction: %s\n", argv[0]);
return NULL;
}
@@ -129,6 +129,7 @@ static const double *
kernel_gaussian(int argc, char *argv[], size_t *rows, size_t *cols, double **free_this)
{
size_t spread = 0, y, x;
+ ssize_t xx, yy;
int unsharpen = 0;
double sigma, value, c, k;
char *arg;
@@ -160,29 +161,17 @@ kernel_gaussian(int argc, char *argv[], size_t *rows, size_t *cols, double **fre
*free_this = emalloc3(*rows, *cols, sizeof(double));
- k = sigma * sigma * 2;
+ k = sigma * sigma * 2.;
c = M_PI * k;
- c = sqrt(c);
c = 1.0 / c;
k = 1.0 / -k;
-
- for (x = 0; x <= spread; x++) {
- value = (double)(spread - x);
- value *= value * k;
- value = exp(value) * c;
- for (y = 0; y < *rows; y++) {
+ for (y = 0; y < 2 * spread + 1; y++) {
+ yy = (ssize_t)spread - (ssize_t)y, yy *= yy;
+ for (x = 0; x < 2 * spread + 1; x++) {
+ xx = (ssize_t)spread - (ssize_t)x, xx *= xx;
+ value = (double)(xx + yy) * k;
+ value = exp(value) * c;
(*free_this)[y * *cols + x] = value;
- (*free_this)[y + 1 * *cols + *cols - 1 - x] = value;
- }
- }
-
- for (y = 0; y <= spread; y++) {
- value = (double)(spread - y);
- value *= value * k;
- value = exp(value) * c;
- for (x = 0; x < *cols; x++) {
- (*free_this)[y * *cols + x] *= value;
- (*free_this)[y + 1 * *cols + *cols - 1 - x] *= value;
}
}
@@ -235,13 +224,16 @@ main(int argc, char *argv[])
usage();
} ARGEND;
+ if (!argc)
+ usage();
+
if (null_x && null_y && null_z && null_a)
null_x = null_y = null_z = null_a = 0;
if (0);
#define X(FUNC, NAME)\
else if (!strcmp(argv[0], NAME))\
- kernel = FUNC(argc, argv + 1, &rows, &cols, &free_this);
+ kernel = FUNC(argc - 1, argv + 1, &rows, &cols, &free_this);
LIST_KERNELS
#undef X
else