ImageJ and Volume Measurement

In which I describe the complexities of analysing 3D images...

3D image analysis just seems to be one of those things that is harder to do than I'd like it to be.

Before starting it is worth pointing out that with MRI you can acquire volumes in two ways - traditional 2D with multiple slices or a 3D scan. As far as this blog post is concerned these are the same.*

A common measure in clinical MRI is the volume of an organ or part of an organ. After all when someone has brain cancer - "How big is the tumour?" can be a very important question. Here are my experiences of trying to measure volumes on MRI images.

*There are differences between these two methods of acquisition but that would require a whole blog post on it's own.


ImageJ is a free, java based, image analysis package provided by the NIH.† As it's Java based it's platform independent as long as you have an up-to-date Java runtime.

ImageJ deals with volumes by storing them as stacks. A stack is a series of 2D images stacked on top of each other to make a 3D image. ImageJ is not very good at getting the correct inter-slice distance from your original image files. This is very annoying when it renders your 3D volume as almost flat :(

Using stock ImageJ with no plugins you can create a region of interest (ROI) using the drawing tools. By holding Shift you can create a region of interest composed of multiple parts. Using the ROI manager you can then store this information for each slice individually and then use the measure function to find the area of your ROI on each slice.‡ Multiplying this number by the thickness of your slices gives an estimate of the volume you are measuring.§ Since organs etc. aren't ordinary geometric shapes this is not necessarily the most accurate method.

†Which I've used before.

‡You need to set your scale first otherwise the area will be in pixels not cm³.

§In MRI a 2D image (or slice) acquires signal from a volume and presents it as a 2D image. The width of this volume is the slice thickness.


Volumest is a plugin for ImageJ which stands for VOLUMe ESTimation. This plugin starts by asking you how many slices you can see the object on and an estimate of the volume. For this estimate literature values are always good (e.g. the amygdala in an adult human is on average 2117±60 mm³ ‖). You then go through slice by slice drawing around the regions of interest in a similar manner to the one above. There are, however, two benfits to this plugin over stock ImageJ:

  1. This method runs a pilot first then the actual determination of volume using the pilot as an estimate to give a more accurate value.
  2. This interpolates the volume between slices which should be more accurate than assuming it's a perfect geometric shape.

‖Blumberg et al.; Kaufman, J; Martin, A; Whiteman, R; Zhang, JH; Gore, JC; Charney, DS; Krystal, JH et al. (2003). "Amygdala and hippocampal volumes in adolescents and adults with bipolar disorder". Arch Gen Psychiatry60 (12): 1201–8. doi:10.1001/archpsyc.60.12.1201


Fiji (Fiji Is Just ImageJ¶ — Batteries included) is ImageJ packaged along with Java 3D and a load of plugins pre-organised into menus for ease of use.

It features a segmentation editor which is brilliant for generating a separate labels file for rendering in 3D. It does however still have the problem when importing image files that it doesn't know the inter-slice distance (it is in the metafile and other software finds it! grr). You can manually set an inter-slice distance though and this seems to sort it. The 3D viewer seems to work better on this version too.

¶I love recursion!


I'll probably always use Fiji in future as it's just easier than downloading all the plugins myself. ImageJ2 is on it's way and will hopefully incorporate a lot of Fiji into the stock version, I'll wait and see :)

Tom Out!