From beb71771a2e794b3dfeca6e045561f6da7e5db8b Mon Sep 17 00:00:00 2001
From: Mark Jenkinson <mark@fmrib.ox.ac.uk>
Date: Wed, 2 Jan 2008 16:10:44 +0000
Subject: [PATCH] Change -roi code - hopefully fixed a bug

---
 fslmaths.cc | 32 +++++++++++++++++++-------------
 1 file changed, 19 insertions(+), 13 deletions(-)

diff --git a/fslmaths.cc b/fslmaths.cc
index 03dd11e..7801565 100755
--- a/fslmaths.cc
+++ b/fslmaths.cc
@@ -809,29 +809,35 @@ if (!separatenoise)
      /******************************************************/
     else if (string(argv[i])=="-roi")
      { 
-       // add and subtract 0.5 to ensure the rounding is OK
-       int x0=atoi(argv[i+1])-0.5;
-       int x1=atoi(argv[i+1])+atoi(argv[i+2])+0.5;
-       int y0=atoi(argv[i+3])-0.5;
-       int y1=atoi(argv[i+3])+atoi(argv[i+4])+0.5;
-       int z0=atoi(argv[i+5])-0.5;
-       int z1=atoi(argv[i+5])+atoi(argv[i+6])+0.5;
+       int x0=atoi(argv[i+1]);
+       int x1=atoi(argv[i+1])+atoi(argv[i+2]);
+       int y0=atoi(argv[i+3]);
+       int y1=atoi(argv[i+3])+atoi(argv[i+4]);
+       int z0=atoi(argv[i+5]);
+       int z1=atoi(argv[i+5])+atoi(argv[i+6]);
        int t0=atoi(argv[i+7]);
        int t1=atoi(argv[i+7])+atoi(argv[i+8]);
-       ColumnVector v0, v1;
+       ColumnVector v0(4), v1(4);
        v0 << x0 << y0 << z0 << 1.0;
        v1 << x1 << y1 << z1 << 1.0;
-       // swap back to restore min/max order as necessary
-       if (v0(1)>v1(1)) { v0(4)=v0(1); v0(1)=v1(1); v1(1)=v0(4); }
-       if (v0(2)>v1(2)) { v0(4)=v0(2); v0(2)=v1(2); v1(2)=v0(4); }
-       if (v0(3)>v1(3)) { v0(4)=v0(3); v0(3)=v1(3); v1(3)=v0(4); }
        v0 = input_volume.niftivox2newimagevox_mat() * v0;
        v1 = input_volume.niftivox2newimagevox_mat() * v1;
+       x0=MISCMATHS::round(v0(1));
+       y0=MISCMATHS::round(v0(2));
+       z0=MISCMATHS::round(v0(3));
+       x1=MISCMATHS::round(v1(1));
+       y1=MISCMATHS::round(v1(2));
+       z1=MISCMATHS::round(v1(3));
+       // swap back to restore min/max order as necessary
+       int tmp;
+       if (x0>x1) { tmp=x0; x0=x1;  x1=tmp; }
+       if (y0>y1) { tmp=y0; y0=y1;  y1=tmp; }
+       if (z0>z1) { tmp=z0; z0=z1;  z1=tmp; }
        for(int t=0;t<input_volume.tsize();t++)           
          for(int z=0;z<input_volume.zsize();z++)
            for(int y=0;y<input_volume.ysize();y++)	    
 	     for(int x=0;x<input_volume.xsize();x++)
-               if((x<v0(1)) || (x>=v1(1)) || (y<v0(2)) || (y>=v1(2)) || (z<v0(3)) || (z>=v1(3)) || (t<t0) || (t>=t1) )
+               if((x<x0) || (x>=x1) || (y<y0) || (y>=y1) || (z<z0) || (z>=z1) || (t<t0) || (t>=t1) )
                  input_volume.value(x,y,z,t)=0;
        i+=8;
      }
-- 
GitLab