Volumetric rendering has come a long way since its first appearance decades ago. Graphics cards are continuously evolving pushing more and more raw data across ever increasing data paths. However, even with advances in technology, there is still a strong motivation to re-produce accurate data from sparser data.
Overall, less samples means less time to complete a scan, which in turn means more energy/money saved. In the specific case of people, less time in a scanner means less time that the patient needs to remains still and be bombarded by various particles.
In this work we looked closer at how to more accurately re-create missing data from an existing data set, without any prior knowledge of the missing data.
Interpolation can roughly be categorized into two types; Feature-Aware, and Not Feature-Aware. We use a registration method based on B-splines to determine feature correspondence in all of of the data slices we work with.
With the help of these correspondence offsets, the steps to performing registration-based interpolation is quite simple. In brief, the registration proceeds just as with trilinear interpolation, except that we now apply an offset vector to the interpolation along the axis we have calculated feature correspondence.
A diagram illustrating the differences between feature aware, and not feature aware interpolation methods. In this case, we are interpolating data in-between two slices, denoted by the grey and reddish pixels on the left- and right-hand side. The red pixels are identical features identified in both data slices. For the specific pixel marked with an 'x' the green circle illustrates which surrounding data is considered when performing the data interpolation. Note how feature aware methods will minimize the data to mostly include features we are interested in, in both data slices.
There are four general steps to performing registration based interpolation. We show the raw data without activating hardware acceleration, to better illustrate how our method works. In step 1, you will see several slices of data along the Y/Z axis. We concentrate on the center two. The dotted lines indicate where the data is actually 'located', which is at the very center of each individual voxel. In step 2, we determine the point in space, in which we wish to find a new interpolated value. With this point, we can look examine our registration data slices (in Step 3) that give us vector offsets (in blue), pointing to where each feature on both slices correspond to, on the opposite slice. As our point in space is exactly half-way in-between both slices, we follow half the offset in either direction, in step 4, and combine the results to find our registration-based interpolated value.
Regular Linear interpolation:
Ilin(px,y,z) = ( 1 - a ) IA(px,y) + aIB(px,y)