ActiViz 9.4 release: Curved Planar Reformation

November 18, 2024

Kitware is pleased to announce the release of a new ActiViz version based on the VTK 9.4rc2 version.

In addition to the latest VTK features and several ActiViz-related bug fixes, this version provides an exclusive preview of a new mapper to perform curved planar reformation (CPR) of volume data on the GPU.

ActiViz

ActiViz is a .NET library for 3D visualization and data processing. It exposes the API of the C++ Visualization Toolkit (VTK), to be used in C# or VB.

ActiViz interfaces with many existing applications and frameworks written in C#, including WindowsForm, Windows Presentation Foundation (WPF), WinUI, Avalonia or the Unity software. This enables a seamless and fast integration of advanced algorithms and rendering techniques in various environments.

ActiViz 9.4 – Important bug fixes

Native rendering controls

The support for native rendering controls which was announced in the previous ActiViz release has been improved further by fixing a critical rendering issue that caused the rendered image to be flipped on some hardware. This support is now stable across different hardware.

String management

The automated wrapping of methods using string parameters has always been a challenge in the past ActiViz version, due to the encoding and the management of references being different in VTK and ActiViz. Big efforts have been put to make the process stable and maintainable in the long term. As a results, many VTK native methods using strings that were gone in previous versions of ActiViz are now back in the public API and allow users to benefit from all the feature offered by VTK, such as shader string replacement.

A new GPU-based probe mapper for CPR

The new release introduces the vtkOpenGLSurfaceProbeVolumeMapper class which has not been contributed yet to VTK. This mapper provides a novel approach to color a rendered surface with the voxel values of an image data. This innovative feature is similar to the existing CPU-based vtkProbeFilter, but it probes volume data at specified points positions during the rendering step in order to provide a high-performance approach running on the GPU.

2D flat dental panoramic view using CPR (bottom) and matching curved planar in 3D (top)

Alternatively, the new mapper supports one additional surface input to project the probed data onto. The projection is achieved using correspondence between the texture coordinates of the probing surface and the rendered surface. This allows for instance to perform lightning-fast CPR by sampling voxel values with a curved plane before projecting them onto a straightened plane.

In addition, when surface normals are provide with the probing surface, the mapper provides different approaches to blend sampled voxels on a user-specified thickness. This allows for performing maximum, minimum and average intensity projection (respectively MIP, MinIP and AverageIP) of the probed data.

CPR – Future work

  • Integration in VTK

In the short term, we plan to integrate the vtkOpenGLSurfaceProbeVolumeMapper class in VTK. In the meantime, you can try it by requesting a trial version of ActiViz and running the CPR example.

  • Probing with any surface

In its current state, the approach requires texture coordinates to be defined on the probing surface. However, unwrapping a surface to define unique texture coordinates for each point can be a tedious task and should not be required when the probing surface is the same as the rendered surface. To address this limitation, we plan to improve the mapper to support probing data with an arbitrary surface without texture coordinates. This would allow for instance to color an extracted isosurface with the original voxels values of the volume, while benefiting from advanced surface-based rendering techniques like PBR and SSAO.

Isosurface colored with voxels intensity
  • Volume transform

While the actor transform is taken into account for the probing surface, the mapper ignores any transform on the volume. Hence it is required to transform the input image data to support transformed volumes in the current implementation.

  • Color and opacity mapping

The surface is always colored with grayscale values rescaled with window/level parameters. Improvements could be made to support applying color and opacity transfer functions, as well as supporting direct coloring when the input volume has RGBA components.

Contact us to learn how Kitware can help you leverage the functionality and integrate it in your custom application.

Leave a Reply