For the Experts only. Here we're going to make a spinning "Maximum
Intensity Projection" rendered on a spinning background slice of the
brain!
There are two example input pairs of functional/background images
provided, a low resolution pair (zstat2 /
example_func ), which is useful for testing the script on,
and a high resolution pair (hr_zstat1 /
highres ), for the final rendering.
The output will be an animated GIF, which you can view with your
web browser.
- Inputs
The inputs are going to be.
- A zstat image
- A Background image
- The incremental rotation (How much the picture should rotate between successive frames)
- The required z-threshold
- The output filename
- Check inputs
- Include a
usage clause which will run if the script is run with the wrong number of inputs.
- Check whether the input files exist.
- Check that the background image and the zstat image have the same dimensions
- Making the rotation matrix
We are going to need a matrix which performs an incremental rotation about a vertical line through centre of the x-y plane. Remember that (0,0,0) isn't at the centre of a volume so we have to be a little clever...
- Make a matrix which translates the centre of the image to the origin.
- Make a matrix which rotates by the correct increment about the z-axis
- Hint 1: You will need to convert the incremental angle to radians using bc:
inc_rad=`echo "scale=10; $inc_deg * 3.1417 /180"|bc` ;
- Hint2: You can calculate
sin and cos
using bc -l:
cosinc=`echo "c($inc_rad)" | bc -l`; and sininc=`echo "s($inc_rad)"|bc -l`;
- Invert the first matrix to get a matrix which translates the origin to the image centre.
- Concatenate these three matrices to generate a matrix which rotates around a vertical line through the centre of the
x-y plane.
- Generating the Background Image.
We want a "background" slice to rotate with our MIP. A good choice for this is the mid-sagittal plane. Use fslmaths with the -roi option to generate an image of the same size as your background but with zeros everywhere apart from the mid-sagittal plane - we're going to rotate this image underneath the MIP.
- Making the movie
Make a while loop which will carry on repeating until the total rotation has reached 360 degrees. Inside this loop you will need to:
- Using
fslmaths and the -Xmax option,
make mips of the current rotated zstat and mid-sagittal plane images
(outputs will be 2D)
- Using
overlay , render the zstat mip on the mid-sag mip with the required threshold
- Using
slicer , create a ppm of the resulting 2D image.
- Using
convert , convert the ppm to a gif - store this gif to a sensible name.
- Using
convert_xfm , create the rotation matrix for the next rotation
- Using
flirt rotate the zstat and mid-sag images to their next position.
- use
whirlgif to merge all the gifs into a single animated gif.
Get rid of all unneccessary files you've created.
- Look here for the cheat.
|
|