[vtkusers] Image Resampling
andrew.crozier at medunigraz.at
Thu Sep 4 09:00:47 EDT 2014
I and a colleague are working on an image segmentation problem, where we
use marching cubes to generate the surface of a segmentation, apply a
custom smoothing operation to the surface mesh with numpy in python,
then re-render as a vtk image at an arbitrary higher resolution before
writing out for the rest of our workflow.
The original data set is, however, not simply a binary data set, but
both the 'ones' and 'zeros' are further subdivided into integer 'tag'
values. We would like to map said tags to the resampled image, but I am
trying to figure out the most efficient way to do that in VTK.
Say, for example, we have an image with four 'tags'; 10, 11, 12 and 13.
10 and 11 are assigned a zero value for the surface extraction and
smoothing, and 12 and 13 are assigned ones. The surface is extracted,
smoothed, and resampled image generated, which now also has ones and
zeros as values. I would now like to reassign the appropriate tags, such
that zeros always become either 10 or 11 and ones become either 12 or 13.
Conceptually, I consider this problem as requiring something like a
'masked nearest neighbour' approach, meaning that each zero pixel in the
resampled image should be assigned the tag of the spatially closest 10
or 11 pixel in the original image. I say masked nearest neighbour as it
seems equivalent to a nearest neighbour interpolation (such as by using
vtkImageInterpolator) but where pixels with a 12 or 13 value are
ignored. The equivaltent mapping would of course be done for 'one'
pixels in the resampled image, finding the closest in the original with
a 12 or 13 value.
I could, or course, implement this algorithm in pure python as part of
my script, but I am keen not to do so unless necessary as the resampled
data sets can be quite large. I have fairly limited experience using vtk
and would appreciate any suggestions or pointers on how to achieve the
More information about the vtkusers