Hi Serge
Have a look at the attached version.
Stéfan
import skimage.transform
import matplotlib.pyplot as plt
from skimage import data
import numpy as np
src_im = data.checkerboard()
src = np.array([[(0,0),(100,0),(110,0)],[(0,110),(100,110),(110,110)]])
dst = np.array([[(0,0),(50,0),(70,0)],[(0,20),(60,50),(100,100)]])
src = src.astype(float)
dst = dst.astype(float)
#revert to 1D list
src = src.reshape((-1,2))
dst = dst.reshape((-1,2))
#Perform transform
affine = skimage.transform.AffineTransform()
affine.estimate(src, dst)
# Shape of middle image, our registration target
r, c = src_im.shape
# Note that transformations take coordinates in (x, y) format,
# not (row, column), in order to be consistent with most literature
corners = np.array([[0, 0],
[0, r],
[c, 0],
[c, r]])
# Warp the image corners to their new positions
warped_corners = affine(corners)
# The overall output shape will be max - min
corner_min = np.min(warped_corners, axis=0)
corner_max = np.max(warped_corners, axis=0)
output_shape = (corner_max - corner_min)
# Ensure integer shape with np.ceil and dtype conversion
output_shape = np.ceil(output_shape[::-1]).astype(int)
# This in-plane offset is the only necessary transformation for the middle image
offset = skimage.transform.SimilarityTransform(translation=-corner_min)
shifted_transform = (affine + offset).inverse
dst_arr = skimage.transform.warp(src_im, shifted_transform,
output_shape=output_shape,
order=1, mode='constant', cval=0,
clip=False, preserve_range=False)
f, (ax0, ax1) = plt.subplots(1, 2)
ax0.imshow(src_im, cmap='gray')
ax1.imshow(dst_arr, cmap='gray')
plt.show()
_______________________________________________
scikit-image mailing list
[email protected]
https://mail.python.org/mailman/listinfo/scikit-image