]> gitweb.michael.orlitzky.com - spline3.git/blobdiff - src/Main.hs
Fix all of the sequential operations with the caveat that it now segfaults.
[spline3.git] / src / Main.hs
index 0afe2f7cc4a27e19f32823b2474f601a00d265f5..1a716836c5db52096e7c15e6caaf45e307ba83cc 100644 (file)
@@ -5,8 +5,18 @@ import qualified Data.Array.Repa as R
 import System.Environment (getArgs)
 
 import Grid (zoom)
-import MRI
-
+import MRI (
+  flip_x,
+  flip_y,
+  mri_shape,
+  mri_slice3d,
+  read_word16s,
+  round_array,
+  swap_bytes,
+  write_values_slice_to_bitmap,
+  write_word16s,
+  z_slice
+  )
 
 in_file :: FilePath
 in_file = "./data/mri.bin"
@@ -22,12 +32,13 @@ main3d = do
   let zoom_factor = (scale, scale, scale)
   let out_file = "output.bin"
   arr <- read_word16s in_file
-  let arr' = swap_bytes arr
-  let arrMRI = R.reshape mri_shape arr'
-  let dbl_data = R.force $ R.map fromIntegral arrMRI
-  let output = zoom dbl_data zoom_factor
-  let word16_output = round_array output
+  let arr'          = swap_bytes arr
+  let arrMRI        = R.reshape mri_shape arr'
+  dbl_data <- R.computeUnboxedP $ R.map fromIntegral arrMRI
+  output <- zoom dbl_data zoom_factor
+  word16_output <- R.computeUnboxedP $ round_array output
   write_word16s out_file word16_output
+  return ()
 
 
 main2d :: IO ()
@@ -37,10 +48,13 @@ main2d = do
   let zoom_factor = (1, scale, scale)
   let out_file = "output.bmp"
   arr <- read_word16s in_file
-  let arr' = swap_bytes arr
-  let arrInv   = flip_x $ flip_y arr'
-  let arrSlice = z_slice 50 arrInv
+  arrSlice <- R.computeUnboxedP $ z_slice 50 $ flip_x $ flip_y $ swap_bytes arr
   let arrSlice' = R.reshape mri_slice3d arrSlice
-  let dbl_data = R.map fromIntegral arrSlice'
-  let output = zoom dbl_data zoom_factor
-  write_values_slice_to_bitmap (z_slice 0 output) out_file
+
+  -- If zoom isn't being inlined we need to extract the slice before hand,
+  -- and convert it to the require formed.
+  dbl_data      <- R.computeUnboxedP $ R.map fromIntegral arrSlice'
+  output        <- zoom dbl_data zoom_factor
+  arrSlice0     <- R.computeUnboxedP $ z_slice 0 output
+  
+  write_values_slice_to_bitmap arrSlice0 out_file