VolumeJ - Manual

To start, run ImageJ. Open the stack containing the volume. Under the Plugins->VolumeJ menu, you will see the commands:

Volume Renderer, Volume Reconstructor and Depth Coded Stack

Volume Renderer

The buttons:

Render will render the stack as a graycale or RGB image (decided by the classifier)

Render Cine Mode will create a stack of images containing  a movie of the rotating volume. The initial orientation is set by the Rotate parameters. The total number of degrees rotation  is set with the parameter Cine total rotation (). The rotation per frame is set with Cine frame increment (). The intermediate result is saved (after every frame) as a file named VolumeJ_Cine.tif in the ImageJ directory. If the total stack is going to be larger than 32 MB, the renderings are saved as separate files named VolumeJ_Cine1XXXX.tif in the ImageJ directory, and only the current rendering is displayed as an image.

Render Stereo Pair will create two images for the left eye and right eye (duly marked). By aligning these images horizontally, putting your eyes about 10-20" (25-50cm) from the screen and gazing into infinity between them, most people are able to see the rendering in stereo. 10% miss binocular stereo vision. Try it out below by gazing between the two images:

wpe1.jpg (4224 bytes) vr.htm4.jpg (4048 bytes)
            Left Eye                                         Right Eye

Stop Renderer is experimental.

You can choose from open volume stacks using

  • Volume Stack: the name of the stack that will be rendered.

  • Optional Index Stack: the name of the index volume stack that will be used. Index stacks should be 8-bit. The values in the index stack are used as index values for the corresponding voxel in the volume stack. If this sounds too complicated, don't bother. The renderer works fine without indexing. If you are rendering MRIcro regions or SPM volumes, first open that volume and select it here. If you want to do indexing and select a volume here, make sure you choose an appropriate Classifier.
    If you want to depth code your renderings, create a ramp stack of the same width, height and depth of your volume stack using
    Depth Coded Stack, select the Volume Renderer, and select that stack here.

The parameters.

  • Rotate parameters determine how the volume is rotated in space around the x-axis, y-axis and z-axis (in that order).

  • Scale sets the enlargement of the volume.

  • Aspect/ (in x, y and z dimensions) set theanisotropy of a voxel: the size of a voxel in the x, y and  z directions. This is 1x1x1 by default, but if the slices in your volume stack are "thicker" than the width and height of the pixels in it, set the z aspect ration to that thickness (that is what is meant by anisotropy). Common values for MR and CT are 1.5, 2, and 3.  If an aspect ratio is present in the volume stack they are set automatically.

  • Classifier allows a choice of classification algorithms, the functions that decide the visibility, color and opacity of voxels. Gradient classifiers use a combination of the voxel gradient and the voxel value. The boundaries between two materials or tissues in volumes rendered with these classification functions will show as hard surfaces. The Value classification function uses the voxel value only, so that tissues or materials show up as "clouds", with no surface. There is a choice of indexing and non-indexing classifiers. Indexing classifiers need a separate indexing stack of the same size as the rendered volume, with pixel values between 0 and 255. Write (by subclassing) and compile your own classifier, put in the VolumeJ directory and it will show up here. Currently the only way to render 16-bit (signed or unsigned int) images is with the Value (16-bit) classifier, which does not support indexing (I suggest to convert the stack to 8-bit before rendering).

  • Below Classifier you can make a choice for the color look-up table for that classifier (i.e. which color is used for which index value). Standard is spectrum, with 0 set to white, and the other colors running from red over green and blue to purple (255). Selecting custom will allow you to select any LUT (in NIH Image or ImageJ format) from a file. You will be asked to point to the file when you start rendering.

  • Render algorithm allows a choice of rendering algorithms. Right now only classic object space rendering, isosurface rendering, which is real time rendering, but for licensing reasons only available in the applte version, and  an experimental one, viewspace rendering, are implemented.

  • Interpolation allows a choice of nearest neighbor (less good but faster) and trilinear (better but less fast) voxel interpolation. The gradients are always computed as central differences.

  • Classifier central value and deviation are parameters for the Gradient type classifiers (see above). They define the central voxel value and the range of voxel values that are classified. Choose the value close to those voxel values that you want to see in the rendering. The larger deviation, the more voxels are rendered - the voxels with values closest to central value are the most opaque. Opaqueness also depends on the image gradient near that voxel (that's why it works as a surface extractor). Typical values for deviation are in the range 0.5-2.0. Choosing these parameters is a case of trial-and-error. It is convenient to use a histogram of the volume (or a specific slice) to see where the interesting voxel-values are. To understand more about classification, read a volume rendering text.

  • Cine total rotation () determines the angle that the volume is rotated  for all renderings in Cine mode. Cine total rotation () determines the angle in degrees per rotation step. The number of images in the stack will be Cine frame increment () /Cine total rotation ().

  • Cine rotation axis sets the cine mode rotation axis  to x, y or z.

  • Light can be positioned in x,y,z in imagespace (the viewspace). By default (at 0,0,-1000) it  is set way back behind your back. In my opinion, positioning the light in imagespace is more intuitive. Ranges are {-INF-+INF}. The more negative x, the more to the left is the light, the more negative y the lower is the light and the more negative z, the farther beyond you is the light.. The light is always white and always at infinity. It will stay in position if the volume is rotated under it.

  • Add cutout centered at creates cutouts within the rendering. Cutouts look as if part of the volume has been cut away with a sharp knife. The cutout algoithm is simple yet hopefully foolproof: cutouts are always facing the viewer, and only rectangular cutouts are possible. This means that you only need to check this checkbox and take a point within the volume that will then be the deepest corner of the cutout. The x, y, z coordinates are set in voxels.

  • Render backfaces renders the backfaces of surfaces. This option may come in handy if the volume is very aliased, and you only see dark gray surfaces. Explanation: the shading algorithm only lights surfaces that have a positive gradient facing the light. If this gradient is negative, only the diffuse shading is added. If backface rendering is turned on, surfaces with negative gradients are shaded the same as surfaces with positive gradients

backfaces_on.gif (5223 bytes)     backfaces_off.gif (2379 bytes)

Volume Reconstructor

This plugin is meant to reconstruct a volume along any axis, orientation or scaling. The dialog box should be self explanatory. This plugin can also generate a series of volumes in a stack, with the volumes scaled and rotated incrementally.

Depth Coded Stack

This plugin is meant to create a ramp volume stack to be used for depth-coded rendering. The dialog box should be self explanatory.