Speed up transformation of piecewise-affine

This commit is contained in:
Johannes Schönberger
2012-09-03 21:46:17 +02:00
parent 7983f354b8
commit c1f3515e00
+10 -14
View File
@@ -361,23 +361,19 @@ class PiecewiseAffineTransform(ProjectiveTransform):
""" """
out = - 1 * np.ones((coords.shape[0], 2)) out = np.empty_like(coords)
for index, pt in enumerate(coords): simplex = self.tesselation.find_simplex(coords)
# determine which triangle contains the point
simplex_index = self.tesselation.find_simplex(pt)
if simplex_index == - 1: out[simplex == -1, :] = -1
# this point is outside the hull of the control points
out[index, 0] = - 1
out[index, 1] = - 1
continue
# calculate affine transformed position for index in range(len(self.tesselation.vertices)):
affine = self.affines[simplex_index] # affine transform for triangle
dst_pos = affine(pt) affine = self.affines[index]
out[index, 0] = dst_pos[0][0] # all coordinates within triangle
out[index, 1] = dst_pos[0][1] index_mask = simplex == index
out[index_mask, :] = affine(coords[index_mask, :])
return out return out