Skip to main content
Version: 3.4 (unreleased)

Voxel Volumes (CT / MRI)

VRGS can load and interpret 3D voxel volumes — CT scans, MRI volumes, micro-CT of rock plugs, and any other regularly-gridded scalar field. A voxel volume is stored as one or more attributes (scalar layers) over a shared i × j × k grid with a physical voxel spacing, and is rendered through the same brick-paged ray-marching engine as seismic volumes — so it streams, levels-of-detail, and composites exactly like a SEG-Y cube.

On top of the volume view, voxel volumes carry an interactive segmentation workflow: filter to a value band, preview it as a solid surface, pick a connected region, write it out as a labelled layer, and turn labels into statistics and meshes.

Importing a volume

Voxel volumes live under the Voxel Models group in the Data Tree.

  1. Right-click the Voxel Models group node ➝ New to create an empty volume (or Import ➝ From File to create and import in one step).
  2. Right-click the volume ➝ Import and choose the source.

Two source shapes are recognised:

  • Image stack — a folder of slice images (e.g. a TIFF stack). Each image is one k slice; the stack's width and height become i and j. All slices must share dimensions.
  • Raw volume with a header — if the chosen folder contains a VGStudioMax .vgi or AmiraMesh .am header, VRGS reads the header for dimensions, voxel spacing and data type, then streams the referenced raw block. Large raw volumes are decimated on the fly to fit a RAM budget, so a volume that wouldn't fit in memory still imports at a usable resolution.

After import, select the volume and tick its checkbox to display it. Make Active (right-click, or the Data Tree) shows the context-sensitive Voxel Model ribbon tab whose tools are described below.

Attributes and colour

A volume can hold several attribute layers (for example raw density, a filtered copy, an edge-detected copy, or a segmentation label field). Exactly one layer is the visible attribute at a time — that's what the 3D render and slices display. Set it from the tree (right-click an attribute ➝ Make Active) or the model's RGB channel selectors.

Each attribute has:

  • A colour ramp mapped across its value range.
  • An attribute filter — a low/high value window. The filter is the backbone of the segmentation workflow: it defines which voxels count (see Solid view and Segmentation below). Set it from the attribute's colour-map / histogram controls.

Display modes

3D volume render

The default view ray-marches the whole volume front-to-back, compositing voxels through the active attribute's colour ramp with a density-driven opacity (air transparent, dense material opaque). It is brick-paged with levels of detail — the whole volume appears at overview resolution within a moment and sharpens near the camera — exactly as described for seismic volumes.

The 3D volume render checkbox (Properties panel, top group) toggles this composite.

Show slices only

When the 3D volume render is on it fills the cube and hides the orthogonal slices inside it. Uncheck 3D volume render to suppress the composite and show only the active slices — the fastest way to read a slice plane without the volume in front of it. (This mirrors the seismic 3D volume render toggle.)

Solid voxel view

Tick Solid voxels to switch the render from the translucent cloud to an opaque, shaded surface of the voxels that pass the attribute filter. The first in-filter voxel along each ray becomes the surface, lit with headlight shading so shape reads clearly. Narrow the attribute filter to a value band (bone, a mineral phase, a density threshold) and the solid view becomes a live preview of exactly the voxel set you're about to segment — voxels outside the filter are transparent and are not part of the surface.

Orthogonal slices

A voxel volume can show up to three axis-aligned slice planes — one each along i, j, and k. In the Properties panel, the Slices group has an I Slice, J Slice, and K Slice slider:

  • -1 (the default) means the slice is off.
  • 0 … n-1 positions the slice at that voxel index.

Slices render through the section pipeline and always show every voxel (they are not masked by the attribute filter), so they give full context around a filtered/solid volume.

Scrub a slice with the mouse wheel

As with seismic sections, hover a slice in the 3D view and hold Shift while scrolling the mouse wheel to step it through the volume one voxel per notch. The slice nearest the cursor scrubs, and the wheel is consumed while you're over a slice so you never zoom by accident at the volume edge.

Slice positions and the 3D volume render / Solid voxels toggles are session settings — they reset to their defaults (slices off, volume on) when you reopen the project. The segmentation labels you commit, however, do persist (see below).

Digitising on slices

The active slice planes are interpretation surfaces, just like seismic sections and meshes: the standard Polyline digitise tool (and the measurement, label, and other point-placement tools) land their points directly on a slice plane. Arm the tool, click on a slice to drop points, and double-click or Enter to commit a polyline that persists with the project. This is the recommended way to annotate a feature seen on a CT/MRI slice.

Segmentation workflow

Segmenting a volume is a four-step pipeline, each step exposed on the Voxel Model ribbon tab (and driven by the attribute filter). It is designed to go from "I can see the structure" to "I have a labelled, measurable, meshable object" in a few clicks.

1. Filter to the structure

Narrow the active attribute's filter to the value band of the material you want, and tick Solid voxels so the filtered set renders as a solid surface. What you see is what you'll segment — tighten or loosen the filter until the surface isolates the feature.

2. Pick a region — Select

Arm Select on the ribbon and click the solid surface. VRGS finds the first in-filter voxel under the cursor (the surface you clicked) and grows the connected region of in-filter voxels from it, highlighting the result. Each click re-picks; the highlight updates in place.

This is a connected-component pick: it follows the filtered material through the volume from the seed, so one click on a bone selects that whole bone, not every bone in the scan.

3. Commit the region — Label Region

With a region picked, click Label Region. The region is written into a persistent unsigned-integer attribute layer named Segmentation, stamped with the next free label (1, 2, 3, …). Successive picks accumulate as distinct labels in the same layer — the standard multi-label segmentation mask. The Segmentation layer appears under the volume's Attributes node and saves with the project.

The current density view is left visible so you can keep picking; tick the Segmentation layer in the tree to colour the labels instead.

4. Measure and mesh

Once you have one or more labels:

  • Region Stats reports, per label: voxel count, physical volume (voxel count × voxel volume, in project units³), and — read from the density attribute — the min / mean / max intensity inside each label, with totals. The report is shown in a dialog and written to the debug log.
  • Mesh Segments surfaces each label as its own triangulated mesh (marching cubes), named <volume> Segment <n>, registered in the project and made visible. The result is a normal VRGS mesh — rotate, shade, measure, export, or compare it like any other surface.
Keep regions bounded

Region growing follows the filter, so a filter left wide open can select almost the whole volume in one click. Tighten the filter to the material of interest before picking; a well-chosen filter gives a clean, bounded region (and a fast, compact mesh).

Other tools

The Voxel Model tab and the Data Tree context menu also offer:

  • Create TriMesh — marching-cubes surface of the currently visible voxels (visibility/clip field) rather than a segmentation label.
  • Connected Volume — label every disconnected visible body with its own index in one pass.
  • Fill — flood-fill selection tool.
  • Radial / Box clip and the I / J / K grid-clip sliders — crop the displayed volume to a sub-box.
  • Insert Intersection (I / J / K) — persistent intersection planes.

Reference