-{-# LANGUAGE ScopedTypeVariables #-}
-
module MRI
where
import Data.Array.Repa.IO.Binary as R
import Data.Array.Repa.IO.ColorRamp as R
+import Values
mri_depth :: Int
mri_depth = 109
mri_height = 256
mri_shape :: DIM3
-mri_shape = (Z :. mri_depth :. mri_width :. mri_height)
+mri_shape = (Z :. mri_depth :. mri_height :. mri_width)
mri_lower_threshold :: Int
mri_lower_threshold = 1400
mri_upper_threshold :: Int
mri_upper_threshold = 2500
+mri_slice3d :: DIM3
+mri_slice3d = (Z :. 1 :. mri_height :. mri_width)
type RawData sh = Array sh Word16
type RawData3D = RawData DIM3
rgb_to_dbl (x,y,z) = (fromIntegral x, fromIntegral y, fromIntegral z)
-read_word16s :: IO RawData3D
-read_word16s = do
- arr <- R.readArrayFromStorableFile "../data/mri.bin" mri_shape
+read_word16s :: FilePath -> IO RawData3D
+read_word16s path = do
+ arr <- R.readArrayFromStorableFile path mri_shape
arr `deepSeqArray` return ()
return arr
R.traverse arr id (\get (Z :. z :. y :. x) -> get (Z :. z :. y :. (mri_width - 1) - x))
write_word16s :: (Shape sh) => FilePath -> (RawData sh) -> IO ()
-write_word16s =
- -- dump the slice back as word16
- R.writeArrayToStorableFile
+write_word16s = R.writeArrayToStorableFile
-raw_data_to_color :: (Shape sh) => (RawData sh) -> (ColorData sh)
-raw_data_to_color arr =
- R.force $ R.map (truncate_rgb . ramp_it . fromIntegral) arr
+values_to_colors :: (Shape sh) => (Values sh) -> (ColorData sh)
+values_to_colors arr =
+ R.force $ R.map (truncate_rgb . ramp_it) arr
where
ramp_it :: Double -> (Double, Double, Double)
ramp_it x =
get_b (_, _, b) = b
+
+z_slice :: Elt a => Int -> Array DIM3 a -> Array DIM2 a
+z_slice n arr =
+ slice arr (Any :. n :. All :. All)