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