Hi guys, Please remove me from this mailing list. On Apr 3, 2017 5:18 PM, "Serge Shakhov via scikit-image" < scikit-image@python.org> wrote:
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 Serge
On 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).inversepano0_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