首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >skimage:定义垂直剪切

skimage:定义垂直剪切
EN

Stack Overflow用户
提问于 2018-11-14 10:55:59
回答 1查看 800关注 0票数 3

Python skimage包有一个函数transform.AffineTransform(),其中一个选项是shear,它执行水平剪切

很明显,我可以通过前后转换轴来做垂直剪切。我就是这样做的:

代码语言:javascript
复制
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()

不管怎样,我很惊讶没有更直接的方法来定义垂直剪切选项.我搞错了吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-11-14 12:24:07

你的问题(和链接页)包含了答案.由于AffineTransform允许您指定转换矩阵,并且链接的wiki页面显示了这是什么,通过直接指定转换矩阵来减少操作的数量是非常直接的。

代码语言:javascript
复制
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()

您应该会看到两个图像集相同的图形。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53298558

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档