From d541ebac17d764f4ccaac440322c8d371a20edf7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Johannes=20Sch=C3=B6nberger?= Date: Mon, 3 Sep 2012 21:41:16 +0200 Subject: [PATCH] Implement inverse transformation for piecewise-affine --- skimage/transform/_geometric.py | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/skimage/transform/_geometric.py b/skimage/transform/_geometric.py index ab530852..e4913d4b 100644 --- a/skimage/transform/_geometric.py +++ b/skimage/transform/_geometric.py @@ -390,6 +390,37 @@ class PiecewiseAffineTransform(ProjectiveTransform): return out + def inverse(self, coords): + """Apply inverse transformation. + + Parameters + ---------- + coords : (N, 2) array + Source coordinates. + + Returns + ------- + coords : (N, 2) array + Transformed coordinates. + + """ + + out = np.empty_like(coords) + + simplex = self.tesselation.find_simplex(coords) + + out[simplex == -1, :] = -1 + + for index in range(len(self.tesselation.vertices)): + # affine transform for triangle + affine = self.affines[index] + # all coordinates within triangle + index_mask = simplex == index + + out[index_mask, :] = affine.inverse(coords[index_mask, :]) + + return out + class SimilarityTransform(ProjectiveTransform): """2D similarity transformation of the form::