Skip to content

Commit 1e0ca7e

Browse files
authored
Merge pull request #692 from ANTsX/fix_apply_transform_to_image
Fix apply transform to image with displacement fields
2 parents 4079ac1 + e7d2697 commit 1e0ca7e

File tree

2 files changed

+21
-2
lines changed

2 files changed

+21
-2
lines changed

src/antsTransform.cxx

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -128,7 +128,7 @@ AntsTransform<TransformType> antsTransformFromDisplacementField( AntsImage<Vecto
128128
}
129129

130130
template <typename TransformType, typename VectorImageType, typename PrecisionType, unsigned int Dimension>
131-
AntsImage<VectorImageType> antsTransformToDisplacementField( AntsTransform<TransformType> & xfrm,
131+
AntsImage<VectorImageType> antsTransformToDisplacementField( AntsTransform<TransformType> & xfrm,
132132
AntsImage<itk::Image<PrecisionType, Dimension>> & ref )
133133
{
134134
//typedef itk::Transform<PrecisionType,Dimension,Dimension> TransformType;
@@ -246,6 +246,16 @@ void local_antsTransform(nb::module_ &m) {
246246
m.def("transformImage", &transformImage<itk::Transform<double,3, 3>, itk::Image<double, 3>>);
247247
m.def("transformImage", &transformImage<itk::Transform<double,4, 4>, itk::Image<double, 4>>);
248248

249+
// displacement field transforms
250+
m.def("transformImage", &transformImage<itk::DisplacementFieldTransform<float, 2>, itk::Image<unsigned char, 2>>);
251+
m.def("transformImage", &transformImage<itk::DisplacementFieldTransform<float, 3>, itk::Image<unsigned char, 3>>);
252+
m.def("transformImage", &transformImage<itk::DisplacementFieldTransform<float, 2>, itk::Image<unsigned int, 2>>);
253+
m.def("transformImage", &transformImage<itk::DisplacementFieldTransform<float, 3>, itk::Image<unsigned int, 3>>);
254+
m.def("transformImage", &transformImage<itk::DisplacementFieldTransform<float, 2>, itk::Image<float, 2>>);
255+
m.def("transformImage", &transformImage<itk::DisplacementFieldTransform<float, 3>, itk::Image<float, 3>>);
256+
m.def("transformImage", &transformImage<itk::DisplacementFieldTransform<float, 2>, itk::Image<double, 2>>);
257+
m.def("transformImage", &transformImage<itk::DisplacementFieldTransform<float, 3>, itk::Image<double, 3>>);
258+
249259
m.def("inverseTransform", &inverseTransform<itk::Transform<float, 2, 2>, itk::Transform<float, 2, 2>>);
250260
m.def("inverseTransform", &inverseTransform<itk::Transform<float, 3, 3>, itk::Transform<float, 3, 3>>);
251261
m.def("inverseTransform", &inverseTransform<itk::Transform<float, 4, 4>, itk::Transform<float, 4, 4>>);
@@ -286,7 +296,7 @@ void local_antsTransform(nb::module_ &m) {
286296
m.def("antsTransformToDisplacementField", &antsTransformToDisplacementField<itk::DisplacementFieldTransform<float,2>, itk::VectorImage<float,2>,float,2>);
287297
m.def("antsTransformToDisplacementField", &antsTransformToDisplacementField<itk::DisplacementFieldTransform<float,3>, itk::VectorImage<float,3>,float,3>);
288298

289-
299+
290300
nb::class_<AntsTransform<itk::DisplacementFieldTransform<float,2>>>(m, "AntsTransformDF2");
291301
nb::class_<AntsTransform<itk::DisplacementFieldTransform<float,3>>>(m, "AntsTransformDF3");
292302
nb::class_<AntsTransform<itk::Transform<float, 2, 2>>>(m, "AntsTransformF22");

tests/test_core_ants_transform.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -175,6 +175,15 @@ def test_apply_ants_transform_to_image(self):
175175
tx.set_parameters((0.9,0,0,1.1,10,11))
176176
img2 = ants.apply_ants_transform_to_image(tx, img, img)
177177

178+
def test_apply_ants_transform_to_image_displacement_field(self):
179+
img = ants.image_read(ants.get_ants_data("r27")).clone('float')
180+
img2 = ants.image_read(ants.get_ants_data("r16")).clone('float')
181+
reg = ants.registration(fixed=img, moving=img2, type_of_transform="SyN")
182+
tra = ants.transform_from_displacement_field(ants.image_read(reg['fwdtransforms'][0]))
183+
deformed = tra.apply_to_image(img2, reference=img)
184+
deformed_aat = ants.apply_transforms(img, img2, reg['fwdtransforms'][0], singleprecision=True)
185+
nptest.assert_allclose(deformed.numpy(), deformed_aat.numpy(), atol=1e-6)
186+
178187
def test_invert_ants_transform(self):
179188
img = ants.image_read(ants.get_ants_data("r16")).clone('float')
180189
tx = ants.new_ants_transform(dimension=2)

0 commit comments

Comments
 (0)