Representing and Processing Scientific Data with Teem: Applications to CT and DT-MRI Gordon Kindlmann Representing and Processing Scientific Data with Teem: Applications to CT and DT-MRI Gordon Kindlmann Scientific Computing and Imaging Institute, School of Computing, University of Utah
The software: teem includes nrrd and ten Application 1: Inspecting CT data Application 2: Estimating and inspecting diffusion tensors Outline
Teem overview Software I write to do research Data processing, scientific visualization Open-source: Get pre-compiled binaries, reproduce resultsreproduce results Collection of ANSI C libraries Function calls do what you need Pseudo-object-oriented: nrrdNew(), nrrdCopy(), nrrdSlice(), nrrdNuke() Uncommon library names Multiple interfaces Command-line: Repeatability, reproducability API BioTensor GUI
Teem libraries Basic utility functions + macros Command-line parsing Nearly Raw Raster Data: representing (in memory, on disk) and manipulating N- dimensional arrays Filtered point sampling: interpolating scalar, vector, tensor fields; used for fiber tracking in Bio-Tensor All things diffusion tensor
Two libraries, two utilities Underlying library nrrd ten Command-line utility unu tend also BioPSE module name prefix
nrrd : what it is Nearly Raw Raster Data No abstractions, no cleverness Representation and manipulation of N- dimensional raster data: File format Data structure Large set of operations Used by SCIRun, ITK, others Format and API are stable
nrrd : why it is Information in scientific computation and visualization often N-dimensional array: 1D: histograms, time-varying scalar 2D: gray-scale images, scatterplots, collection of signals 3D: color images, CT/MRI volumes 4D: vector/tensor volumes, time- varying scalar fields 5D: time-varying vector/tensor fields Common format and tools for all of these
nrrd : capabilities Subset, superset Cropping, slicing, padding, joining Arithmetic Adding, multiplying Converting Quantization, changing type Rearranging Permute axes, flipping+shuffling slices, bricking (w/out overlap) Filtering Up+downsampling, blurring, median Measuring: projection along an axis Min, max, mean, L2, variance, etc. Histograms of all sorts dimension generality
Getting data in: NRRD file format NRRD0001 content: a dozen images type: float dimension: 4 sizes: encoding: raw endian: big Detached headers possible: “ data file ”, “ line skip ”, “ byte skip ” Different encodings possible: Raw, ASCII, gzip-compressed, hex Can be generated by hand … ASCII header for array description Blank line Data
Getting data in: “ unu make ” unu make -i \ -s t float \ -e raw -en big -o images.nrrd NRRD0001 type: float dimension: 4 sizes: encoding: raw endian: big … unu make -h -i \ -s t float \ -e raw -en big -o images.nhdr Pretty? No. Effective? Yes.
Concept: raster ordering N-D raster data has “raster ordering” (0, 0, 0) (1, 0, 0) (2, 0, 0) (0, 1, 0) (1, 1, 0) (2, 1, 0) … (0, 539, 0) (1, 539, 0) (2, 539, 0) (0, 0, 1) … (0, 0, 2) … (0, 539, 379) (1, 539, 379) (2, 539, 379) linear ordering in memory 2-D color image 3-D array color:X:Y Each coordinate is an axis Axes ordered: fast to slow; contiguous to distant Fast: color Medium: X Slow: Y color X Y
The software: teem includes nrrd and ten Application 1: Inspecting CT data Application 2: Estimating and inspecting diffusion tensors Outline
To inspect one slice: zcat c_vf1700.fre.Z \ | unu make -t ushort -e raw \ -en big -s bs 3416 \ | unu quantize -b 8 \ | unu save -f pnm | xv - (demo of this, and command list) cp data/c_vf16{4,5,6,7,8,9}?.fre.Z. cp data/c_vf17??.fre.Z. cp data/c_vf18{0,1,2}?.fre.Z. uncompress *.Z unu make -i *.fre -t ushort -e raw -en big \ -s bs 3416 \ -sp \ | unu crop -min max M \ -o vfrhand.nhdr rm -rf *.fre Unu application: Visible human CT (link)
Unu application: Visible human CT
The software: teem includes nrrd and ten Application 1: Inspecting CT data Application 2: Estimating and inspecting diffusion tensors Outline
Diffusion in Biological Tissue Motion of water through tissue Faster in some directions than others Kleenexnewspaper Anisotropy: diffusion rate depends on direction isotropicanisotropic
Diffusion in 3D isotropic anisotropic linear planar spherical Diffusion Tensor: 3x3 semi-positive definite symmetric matrix Ellipsoids represent variety of possible diffusion patterns Ellipsoid is image of unit sphere under diffusion tensor matrix
Diffusion MRI of brain Anisotropy high along white matter fiber tracts Dxx Dxy Dxz DxyDxz DyzDyy DzzDyz
Inspecting DWI slices unu make -i 02728/003/I.050 -t ushort \ -e raw -en big -s bs -1 \ | unu quantize -b 8 -o slice.png
Inspecting multiple DWI slices unu make -i 003/I.0{5,6,7}? -t ushort \ -e raw -en big -s bs -1 \ | unu axsplit -a 2 -s 5 4 \ | unu permute -p \ | unu axmerge -a 0 | unu axmerge -a 1 \ | unu quantize -b 8 -o mosaic.png
Making DWI volumes foreach IMG ( \ \ \ ) unu make -i 02728/$IMG/I.* -bs -1 \ -t ushort -e raw -en big \ -s sp \ -o dwi/$IMG.nrrd unu resample -I dwi/$IMG.nrrd \ -s = -k hann:8 \ -o dwi/$IMG-small.nrrd end
Meddling with B-matrix list Brr Brp Brs Bpp Bps Bss unu shuffle -i B-orig.txt \ -a 0 -p o B.txt
Estimating diffusion tensors tend estim -i dwi/0??.nrrd -knownB0 false \ -B B.txt -t 48 -o ten.nrrd confidence DxxDxyDxz Dyz Dzz Dyy
Inspecting diffusion tensors R = | v 1.x | G = | v 1.y | B = | v 1.z | v1v1 x y z foreach SLC ( ) tend slice -i ten.nrrd -a 2 -p $SLC \ | tend evecrgb -c 0 -a fa \ | unu axdelete -a -1 \ | unu quantize -b 8 \ -min 0 -max 1 -o $SLC-rgb.png end
1 = 2 = = T Space of tensor shape v1v1 v2v2 v3v3 linear planar spherical 1 >= 2 >= 3
Glyph shapes
1 glyph = 1 mm 3 Backdrop: FA Color: RGB(v 1 )