9 DICOM Images

9.4 The DicomViewer

Once a DicomImage is loaded, it can be displayed in a model by using the DicomViewer component. The viewer has several key properties:


the name of the viewer component

x, y, z

the normalized slice positions, in the range [0,1], at which to display image planes


the temporal position (image stack) to display


an affine transformation to apply to the image (on top of the voxel-to-spatial transform extracted from the DICOM file)


draw the YZ plane, corresponding to position x


draw the XZ plane, corresponding to position y


draw the XY plane, corresponding to position z


draw the 3D image’s bounding box


the interpolator responsible for converting pixels decoded in the DICOM slices into values appropriate for display. The converter has additional properties:


name of a preset window for linear interpolation of intensities


center intensity


width of window

Each property has a corresponding getXxx(...) and setXxx(...) method that can adjust the settings in code. They can also be modified directly in the ArtiSynth GUI. The last property, the pixelConverter allows for shifting and scaling intensity values for display. By default a set of intensity ‘windows’ are loaded directly from the DICOM file. Each window has a name, and defines a center and width used for linearly scale the intensity range. In addition to the windows extracted from the DICOM, two new windows are added: FULL_DYNAMIC, corresponding to the entire intensity range of the image; and CUSTOM, which allows for custom specification of the window center and width properties.

To add a DicomViewer to the model, create the viewer by supplying a component name and reference to a DicomImage, then add it as a Renderable to the RootModel:

DicomViewer viewer = new DicomViewer("my image", dicomImage);

The image will automatically be displayed in the patient-centered coordinates loaded from the DicomImage. In addition to this basic construction, there are convenience constructors to avoid the need for a DicomReader for simple DICOM files:

// loads all matching DICOM files to create a new image
public DicomViewer(String name, String imagePath, Pattern filePattern, boolean checkSubdirs);
// loads a list of DICOM files to create a new image
public DicomViewer(String name, List<File> files);

These constructors generate a new DicomImage internal to the viewer. The image can be retrieved from the viewer using the getImage() method.