python - skimage:定义垂直剪切
问题描述
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(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()
您应该看到两个具有相同图像集的图形。
推荐阅读
- c - 您如何制作一个随机数生成器,可以在数字 2 或 3 之间进行选择。(不是 1、2、3)
- java - 使用 Java REST API 从 Firebase 存储中上传的文件中获取公共下载 URL
- excel-formula - 如何对从文本数据中提取的数字使用公式
- php - 在下拉选择中显示文件夹和子文件夹
- c# - 我需要用用户输入的“ - ”替换字符串中的所有元音
- cmake - 如何在不使用 CMake 的情况下在 KDevelop 中构建 Ninja 项目?
- reactjs - 使用 mobx 创建多个商店并将其注入到组件中的正确方法 - ReactJs
- javascript - 提交表单按钮未在 Safari 中运行 onclick() javascript 函数
- php - 用于块文件上传的 Apache 设置
- php - 有没有办法将 PHP 类导入刀片模板并在子模板中使用它们?