Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ionic-framework/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 撇渣:定义垂直剪切_Python_Scikit Image - Fatal编程技术网

Python 撇渣:定义垂直剪切

Python 撇渣:定义垂直剪切,python,scikit-image,Python,Scikit Image,Pythonskimage包有一个函数transform.AffineTransform(),其中一个选项是shear 显然,我可以通过前后切换轴来进行垂直剪切。我就是这么做的: from skimage import data, transform import matplotlib.pyplot as plt import numpy as np img = data.astronaut()/255 v = 0.3 tf = transform.AffineTransform(shea

Python
skimage
包有一个函数
transform.AffineTransform()
,其中一个选项是
shear

显然,我可以通过前后切换轴来进行垂直剪切。我就是这么做的:

from skimage import data, transform
import matplotlib.pyplot as plt
import numpy as np

img = data.astronaut()/255

v = 0.3

tf = transform.AffineTransform(shear=-v)
img2 = transform.warp(img, tf, order=1, preserve_range=True, mode='constant')

img3 = np.swapaxes(img, 0, 1)
img3 = transform.warp(img3, tf, order=1, preserve_range=True, mode='constant')
img3 = np.swapaxes(img3, 0, 1)

plt.imshow(np.hstack([img, img2, img3]))
plt.show()

无论如何,我很惊讶没有更直接的方法来定义垂直剪切选项。。。我错了吗?

你的问题(和链接页面)给出了答案。。。由于
AffineTransform
允许您指定转换矩阵,并且您的链接wiki页面显示了这一点,因此通过直接指定转换矩阵来减少操作的数量非常简单,例如

from skimage import data, transform
import matplotlib.pyplot as plt
import numpy as np

img = data.astronaut()/255

v = 0.3

tf = transform.AffineTransform(shear=-v)
img2 = transform.warp(img, tf, order=1, preserve_range=True, mode='constant')

img3 = np.swapaxes(img, 0, 1)
img3 = transform.warp(img3, tf, order=1, preserve_range=True, mode='constant')
img3 = np.swapaxes(img3, 0, 1)

plt.imshow(np.hstack([img, img2, img3]))

# Using the transformation matrix directly...

tf_h = transform.AffineTransform(
    np.array([[1, 0.3, 0], [0, 1, 0], [0, 0, 1]]))
img4 = transform.warp(img, tf, order=1, preserve_range=True, mode='constant')
tf_v = transform.AffineTransform(
    np.array([[1, 0, 0], [0.3, 1, 0], [0, 0, 1]]))
img4 = transform.warp(img, tf_h, order=1, preserve_range=True, mode='constant')
img5 = transform.warp(img, tf_v, order=1, preserve_range=True, mode='constant')

plt.figure()
plt.imshow(np.hstack([img, img4, img5]))

plt.show()

您应该看到两个具有相同图像集的图形

谢谢。在使用PIL时,我还指定了矩阵。我很惊讶scikit图像中没有垂直剪切参数,这通常更方便用户。我只是等着看是否有人知道更直接的方法,否则我会给你正确的答案,太棒了@RicardoCruz-如果您查看源代码(特别是这里:),您将看到至少就仿射变换而言,它肯定只支持水平剪切。@RicardoCruz:还需要注意的是,目前关于
shear
参数存在一些争议:-您可能希望现在仍然坚持定义变换矩阵!谢谢你提醒我!