From 983919404f90fdc489f9adfef10d9b04e95bd3b4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Johannes=20Sch=C3=B6nberger?= Date: Wed, 24 Dec 2014 15:24:34 +0100 Subject: [PATCH] Improve conditioning of homography design matrix --- skimage/transform/_geometric.py | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/skimage/transform/_geometric.py b/skimage/transform/_geometric.py index cd9d9487..ca8f6329 100644 --- a/skimage/transform/_geometric.py +++ b/skimage/transform/_geometric.py @@ -264,6 +264,10 @@ class ProjectiveTransform(GeometricTransform): Destination coordinates. """ + + src_matrix, src = _center_and_normalize_points(src) + dst_matrix, dst = _center_and_normalize_points(dst) + xs = src[:, 0] ys = src[:, 1] xd = dst[:, 0] @@ -296,6 +300,9 @@ class ProjectiveTransform(GeometricTransform): H.flat[list(self._coeffs) + [8]] = - V[-1, :-1] / V[-1, -1] H[2, 2] = 1 + # De-center and de-normalize + H = np.dot(np.linalg.inv(dst_matrix), np.dot(H, src_matrix)) + self.params = H def __add__(self, other):