Applying of low resolution transformation on a high resolution dataset

Good afternoon to everyone,

We use a skeleton vasculature dataset. This is a graph composed of nodes which have properties of position and radius, and edges that specify the connectivity of the former.

We apply 2 transformations on this dataset: an affine transformation (25 µm in resolution dataset) and a non-linear transformation (25 µm in resolution dataset) in order to be aligned to a reference dataset (Allen Institute for Brain Science , annotation atlas CCFV3). The resolution of our dataset (source) is 1µm and the atlas’ resolution (target) is 25 µm. The resolution of the source dataset and the transformations’ dataset is therefore different.

We use the TransformPoint method to apply the transformations on each 3D point coordinate of the source dataset.

I was wondering if the TransformPoint function performs any kind of interpolation on the transformation to obtain a 1um resolution transformation field to apply to the source dataset?
If not, is there a function that I could use to do this?

Thanks for your help!


Yes, transforms are smoothly interpolated (using linear, or cubic, bspline, thin-plate spline, etc. methods - depending on the transform type) in the entire 3D space.

If you use vtkMRMLTransformNode::GetTransformBetweenNodes() method then you’ll get a VTK transform that contains all the transform components (affine and non-linear) properly concatenated. You can then use TransformPoint to iterate through each point, but it is about 100x faster if you put your vessel model into a vtkPolyData and apply the transform using a vtkTransformPolyDataFilter.

It will make everything even simpler if you put your vessel model into a vtkPolyData and set that into a model node because then you can visualize your vasculature and apply the transform with two clicks (or 2-3 lines of Python code).

Thank you very much for your quick response. I have all I need!