Hi Stefan,Thanks for your reply.My experience with scikit-image just started with this script, I'm not experienced at all.Here is the test script:import skimage.transform
import matplotlib.pyplot as plt
from PIL import Image
from skimage import data
from skimage.transform import resize
from skimage.transform import rescale
import numpy as np
import os
from skimage import io
srcIm = 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(((src.shape[0]*src.shape[1]),2), order='F')
dst = dst.reshape(((dst.shape[0]*dst.shape[1]),2), order='F')
#Perform transform
piecewiseAffine = skimage.transform.PiecewiseAffineTransform()
piecewiseAffine.estimate(src,dst)
dstArr = skimage.transform.warp(srcIm, piecewiseAffine, order=1, mode='constant', cval=0, clip=False, preserve_range=False)
#Visualise result
dstArr = np.array(dstArr * 255., dtype=np.uint8)
dstIm = Image.fromarray(dstArr)
dstIm.show()Could you help me and point to what I have to modify here?If I reverse the piecewiseAffine.estimate(src,dst) -->> piecewiseAffine.estimate( dst, src) I can get the opposite transformation and it's not cropped, but not the one I need.Thanks.Best regards,
Serge Shakhov.On Tuesday, 4 April 2017, 3:56, Stefan van der Walt <stefanv@berkeley.edu> wrote:
______________________________Hi SergeOn Sun, Apr 2, 2017, at 15:30, Serge Shakhov via scikit-image wrote:But I didn't find an answer.I'm doing 2D piecewise affine transformation with skimage.transform.PiecewiseAffineTransform Result image is heavily cropped.I tried to play with output_shape, mode and clip parameters but without any effect, image is still cropped.Could anyone point me what am I doing wrong?I thought we had this implemented, but I guess not yet. You can see how here:https://github.com/scikit-image/skimage-tutorials/blob/ master/lectures/adv3_panorama- stitching.ipynb Specifically:from skimage.transform import SimilarityTransform # Shape of middle image, our registration target r, c = image.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 = my_tf(corners) # The overall output shape will be max - min corner_min = np.min(corners, axis=0) corner_max = np.max(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)That calculates the shape you want. You now need to modify the transform to output an image inside of this shape:from skimage.transform import warp
# This in-plane offset is the only necessary transformation for the middle image offset = SimilarityTransform(translation =-corner_min)shifted_transform = (my_tf + offset).inverse pano0_warped = warp(image, shifted_transform, order=3, output_shape=output_shape, cval=-1)Let us know how that goes!Stéfan_________________
scikit-image mailing list
scikit-image@python.org
https://mail.python.org/mailman/listinfo/scikit-image
_______________________________________________
scikit-image mailing list
scikit-image@python.org
https://mail.python.org/mailman/listinfo/scikit-image