From 578e455f58ba994e58c9b8fa1f41d47492167466 Mon Sep 17 00:00:00 2001 From: Stephen Smith <steve@fmrib.ox.ac.uk> Date: Wed, 9 Feb 2005 15:48:18 +0000 Subject: [PATCH] *** empty log message *** --- avwmaths.c | 44 +++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 43 insertions(+), 1 deletion(-) diff --git a/avwmaths.c b/avwmaths.c index e78f17f..d1af545 100644 --- a/avwmaths.c +++ b/avwmaths.c @@ -4,7 +4,7 @@ Stephen Smith, FMRIB Image Analysis Group - Copyright (C) 1999-2004 University of Oxford */ + Copyright (C) 1999-2005 University of Oxford */ /* CCOPYRIGHT */ @@ -48,6 +48,7 @@ void usage(void) printf("-ero : use (current image>0) to erode using 3x3x3 neighourhood\n"); printf("-ero2 : use (current image>0) to erode using 3x3 (2D) neighourhood\n"); printf("-edge : edge strength\n"); + printf("-nms : 3D non-maximum suppression wrt immediate 3x3x3 neighbourhood\n"); printf("-nan : replace NaNs (improper numbers) with 0\n"); printf("-nanm : make NaN (improper number) mask with 1 for NaN voxels, 0 otherwise\n"); printf("-roi <xmin> <xsize> <ymin> <ysize> <zmin> <zsize> <tmin> <tsize> : zero outside roi\n"); @@ -598,6 +599,47 @@ double tmpd; in[0]=tmpim; } +/* }}} */ + else if (!strncmp(argv[i], "-nms", 4)) + /* {{{ nms */ + +{ + int MAXZ=1; + float tmpf=2 * sqrt(1/(im.xv*im.xv) + 1/(im.yv*im.yv) + 1/(im.zv*im.zv)); + FDT *tmpim=calloc(size,sizeof(FDT)); + + if (im.z<3) + MAXZ=0; + + for(t=0;t<im.t;t++) for(z=MAXZ;z<im.z-MAXZ;z++) for(y=1;y<im.y-1;y++) for(x=1;x<im.x-1;x++) + { + double cost, mincost=1e10; + int xx, yy, zz, xxx, yyy, zzz; + + for(zz=0; zz<=MAXZ; zz++) + for(yy=-1; yy<=1; yy++) + for(xx=-1; xx<=1; xx++) + if ( (zz==1) || (yy==1) || ((yy==0)&&(xx==1)) ) + { + cost = in[0][t*xyzsize+(z+zz)*xysize+(y+yy)*im.x+x+xx] + in[0][t*xyzsize+(z-zz)*xysize+(y-yy)*im.x+x-xx]; + if (cost<mincost) + { + mincost=cost; + xxx=xx; + yyy=yy; + zzz=zz; + } + } + + if ( ( in[0][t*xyzsize+z*xysize+y*im.x+x] >= in[0][t*xyzsize+(z+zzz)*xysize+(y+yyy)*im.x+x+xxx] ) && + ( in[0][t*xyzsize+z*xysize+y*im.x+x] > in[0][t*xyzsize+(z-zzz)*xysize+(y-yyy)*im.x+x-xxx] ) ) + tmpim[t*xyzsize+z*xysize+y*im.x+x] = in[0][t*xyzsize+z*xysize+y*im.x+x]; + } + + free(in[0]); + in[0]=tmpim; +} + /* }}} */ else if (!strncmp(argv[i], "-nanm", 5)) /* {{{ NaN mask */ -- GitLab