[vtkusers] vtkImageReslice rotation and resampling question

David Gobbi david.gobbi at gmail.com
Fri Jul 8 11:42:01 EDT 2016


Hi Richard,

Yes, you can use vtkImageReslice for this.  It would work like this:

Let's define T as the transform that gives the position and orientation of
the kernel within the larger image.  To resample the kernel, you would give
vtkImageReslice the inverse of T as the ResliceTransform, and you would
supply the larger image as a reference image, e.g. the code would look like
this (using Python):

reslice = vtkImageReslice()
reslice.SetInputData(kernel_image)
reslice.SetInformationInput(big_image)
reslice.SetResliceTransform(inverse_transform)
reslice.SetInterpolationModeToLinear()
reslice.Update()

This will produce something like the bottom image from your original email.
In order for the kernel resampling to work properly, your kernel image must
have a border which is all zeros.  If this must be done over and over again
(i.e. if you need to superimpose the kernel hundreds of times at various
locations within the larger image) then the above procedure won't be fast
enough. Another possibility is to use the vtkImageInterpolator class and
some of your own ingenuity to create a fast method for resampling and
superposing the kernel.

During my PhD, I wrote a custom VTK class that superposed kernels into a
volume in order to do 3D ultrasound reconstruction, but I never generalized
it:
https://github.com/dgobbi/AIGS/blob/master/Ultrasound/vtkFreehandUltrasound.h

Some further development of this code was done for the PLUS toolkit:
https://app.assembla.com/spaces/plus/subversion/source/HEAD/trunk/PlusLib/src/PlusVolumeReconstruction

However, as far as I know, VTK doesn't provide an efficient general-purpose
way of superposing kernels at different positions and orientations into a
3D volume.

 - David



On Fri, Jul 8, 2016 at 7:07 AM, Richard Brown <richard.j.brown at live.co.uk>
wrote:

>
> Hi all,
>
> I have a fairly simple problem, and one that I’m sure has previously been
> solved here, but I’m struggling to find the right keywords to find a useful
> thread.
>
> I would like to superpose a kernel vtkImageData (kernel.png) onto a grid
> vtkImageData (grid.png). The kernel will be rotated (superpose.png),
> however, so the kernel will requiring resampling before superposition is
> possible (superposition_and_resample.png).
>
> What is the best way to do this? I feel like I can simply use
> vtkImageReslice, but I’m not 100%.
>
> Thanks in advance for any pointers.
>
> Regards,
> Richard
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://public.kitware.com/pipermail/vtkusers/attachments/20160708/c992375c/attachment.html>


More information about the vtkusers mailing list