图像的几何变换¶
裁剪、调整大小和重新缩放图像¶
图像是NumPy数组(如 图像的NumPy速成课程 节),可以通过简单的切片操作来裁剪图像。下面我们裁剪一个100x100的正方形,对应于宇航员图像的左上角。请注意,此操作是针对所有颜色通道执行的(颜色维度是最后一个、第三个维度):
>>> from skimage import data
>>> img = data.astronaut()
>>> top_left = img[:100, :100]
为了改变图像的形状, skimage.color
提供了中介绍的几个功能 调整比例、调整大小和缩小比例 。
from skimage import data, color
from skimage.transform import rescale, resize, downscale_local_mean
image = color.rgb2gray(data.astronaut())
image_rescaled = rescale(image, 0.25, anti_aliasing=False)
image_resized = resize(image, (image.shape[0] // 4, image.shape[1] // 4),
anti_aliasing=True)
image_downscaled = downscale_local_mean(image, (4, 3))

射影变换(单应)¶
Homographies 是保持点对齐的欧几里得空间的变换。同形对应的特定情况对应于更多性质的守恒,例如平行度(仿射变换)、形状(相似变换)或距离(欧几里得变换)。SCRICKIT-IMAGE中可用的不同类型的同形异义词在 同形异义词的类型 。
可以使用显式参数(例如,缩放、剪切、旋转和平移)创建投影变换:
from skimage import data
from skimage import transform
from skimage import img_as_float
tform = transform.EuclideanTransform(
rotation=np.pi / 12.,
translation = (100, -20)
)
或完整的转换矩阵::
from skimage import data
from skimage import transform
from skimage import img_as_float
matrix = np.array([[np.cos(np.pi/12), -np.sin(np.pi/12), 100],
[np.sin(np.pi/12), np.cos(np.pi/12), -20],
[0, 0, 1]])
tform = transform.EuclideanTransform(matrix)
变换的变换矩阵可用作其 tform.params
属性。变换可以通过将矩阵与 @
矩阵乘运算符。
转换矩阵使用 Homogeneous coordinates ,它们是欧几里得几何中使用的笛卡尔坐标到更一般的射影几何的扩展。具体地说,无穷远处的点可以用有限坐标表示。
可以使用以下命令将变换应用于图像 skimage.transform.warp()
::
img = img_as_float(data.chelsea())
tf_img = transform.warp(img, tform.inverse)

中的不同转换 skimage.transform
祝你有一个 estimate
方法,以便从两组点(源和目标)估计转换参数,如 使用几何变换 教程::
text = data.text()
src = np.array([[0, 0], [0, 50], [300, 50], [300, 0]])
dst = np.array([[155, 15], [65, 40], [260, 130], [360, 95]])
tform3 = transform.ProjectiveTransform()
tform3.estimate(src, dst)
warped = transform.warp(text, tform3, output_shape=(50, 300))

这个 estimate
方法采用最小二乘优化,使源与优化之间的距离最小。源点和目标点可以手动确定,也可以使用中提供的不同要素检测方法来确定 skimage.feature
,例如
和匹配点使用 skimage.feature.match_descriptors()
在估计变换参数之前。但是,经常会出现虚假匹配,建议使用RANSAC算法(而不是简单的最小二乘优化)来提高对异常值的稳健性,如中所述 基于RANSAC的稳健匹配 。

举例说明了变换估计的应用
这个 estimate
方法是基于点的,也就是说,它只使用源和目标图像中的一组点。为了估计平移(班次),还可以使用 full-field 该方法利用所有像素,基于傅立叶空间互相关。此方法通过以下方式实现 skimage.registration.register_translation()
并在 图像配准 教程。

这个 使用极坐标变换和对数极坐标变换进行配准 教程介绍了这种全场方法的变体,通过首先使用对数极坐标变换来估计旋转。