Voxelized Phantoms - xcist/documentation GitHub Wiki

The voxelized projector

Voxelized projector usage

Obviously, the first thing the voxelized projector needs is a voxelized phantom. Please read the CatVoxel section of the Wiki.

The features in an analytic phantom are continuous (not approximated as discrete linear elements), therefore these produce “ideal” simulation results – there is no relationship between the intrinsic phantom characteristics and the pixel size of the detector, or the voxel size in the reconstruction matrix. In contrast, a voxelized phantom inherently contains linear segments that might represent continuous curves. Therefore, one needs to be cautious about the precision of the voxelized phantom uses, depending on the application.

In general, we recommend that the voxelized phantom contain voxels where

• The phantom voxel size in X and Z is smaller than the detector size in X and Z, divided by the geometric magnification.
• The phantom voxel size in X, Y, and Z is smaller than the reconstruction matrix size in the same directions.

In some cases, a voxelized phantom with somewhat large voxels (e.g. > 1 mm) may be perfectly adequate for the application. But typically, the voxelized phantom should have sub-millimeter voxels.

The effect of the choice of phantom voxel size relative to reconstruction voxel size is illustrated in section Voxelized projector validation.

Because voxelized phantoms are image volumes for each material, the total memory required for a phantom of many materials could be large, especially if the phantom represents a large object (in XY and Z), is made with high resolution (many small voxels), and includes many materials.

Required memory can be calculated by

M = NumVoxelsX * NumVoxelsY * NumVoxelsZ * NumMaterials * 4 bytes per voxel

As extreme examples, a (200 mm)3 phantom with 2 materials, represented as a (100 pixel)3 volume (i.e. 2 mm voxels), will require only 8 MB of memory.

However, a (500 mm)3 phantom with 20 materials, represented as a (1k pixel)3 volume (i.e. 0.5 mm voxels), will require 80 GB of memory.

If the required memory size can fit in available RAM, then the entire phantom can be loaded at once, and the simulation will be most efficient. Alternatively, one material can be loaded into RAM at a time. However, this needs to be repeated for each view, therefore efficiency and simulation performance suffer dramatically. The behavior of the voxelized projector in this regard is specified by

cfg.enough_memory_for_voxelized_phantom = Flag;

If the flag is set to 1, CatSim will attempt to load the entire phantom, and a fatal error will occur if there is insufficient memory. In that case, the flag must be set to 0 in order to perform the simulation.

Voxelized projector validation

To validate the voxelized projector when using multiple materials and a polychromatic spectrum, we ran two experiments, using multiple variations in each. One experiment used an analytic phantom and the analytic and voxelized projectors; the second experiment used an NCAT phantom and the NCAT and voxelized projectors. In each experiment, we compared the results of the two projectors after reconstructing images using identical reconstruction parameters.

For the configuration files used for these experiments, see

/base/samples/test_uniformity/readme.txt
/base/samples/test_NCAT/readme.txt

All experiments were performed under the following conditions:

  1. Multi-material phantoms were used.
  2. A 120 kVp spectrum was applied, using (12) 10 keV bins.
  3. “LightSpeed VCT” system and detector geometry were used. For some of Experiment 2, the detector pixels were binned 4X and the number of views was reduced 4X.
  4. No source or detector oversampling was used for the analytic and NCAT projectors.
  5. Oversampling of 11 was used when voxelizing the phantoms.
⚠️ **GitHub.com Fallback** ⚠️