OpenCv warpPerspective单应性元素的意义

OpenCv warpPerspective meaning of elements of homography

我对投影变换矩阵中元素的含义有疑问,例如在 OpenCv warpPerspective.

使用的单应性中

我知道仿射变换的基础知识,但在这里我对投影变换更感兴趣,这意味着在下面显示的矩阵中元素 A31A32:

A11 A12 A13
A21 A22 A23
A31 A32  1

我稍微调整了一下这些值,这意味着所有其他元素都有一个固定的数字。含义:

 1   0   0 
 0   1   0
A31 A32  1

只有投影元素。

但是究竟是什么导致了元素 A31 和 A32 呢?比如A13和A23分别负责水平和垂直平移。

这两个元素有简单的解释吗?就像具有正值意味着......,具有负值意味着......。 S.th。像那样。

希望有人能帮助我。

单应矩阵的3x1、3x2元素改变了图像的平面。这就是仿射矩阵和单应矩阵之间的区别。例如考虑这个 - A31 沿左边缘更改图像的平面。这就像把你的形象贴在一根像旗帜一样的棍子上并旋转。顺时针为正,逆时针为负。另一个元素从顶部边缘执行相同的操作。但是,它们一起为您的形象设定了一个平面。这是我能说的最简单的方法。

Newton 的描述是正确的,但实际查看转换以了解正在发生的事情以及它们如何与转换矩阵中的其他值一起工作以使其更有意义可能会有所帮助。我将提供一些带有动画的 python/OpenCV 示例,以展示这些值 的作用

import numpy as np
import cv2
img = cv2.imread('img1.png')
h, w = img.shape[:2]

# initializations
max_m20 = 2e-3
nsteps = 50
M = np.eye(3)

所以在这里我将变换矩阵设置为恒等式(无变换)。我们希望看到改变变换矩阵 M 中 (2, 0) 处元素的效果,因此我们将通过循环 nsteps 之间的线性间隔 0max_m20.

for m20 in np.linspace(0, max_m20, nsteps):
    M[2, 0] = m20
    warped = cv2.warpPerspective(img, M, (w, h))
    cv2.imshow('warped', warped)
    k = cv2.waitKey(1)
    if k == ord('q') & 0xFF:
        break

我将此应用于从 Oxford's Visual Geometry Group 拍摄的图像。

所以我们确实可以看到,这类似于围绕与图像左边缘对齐的点旋转相机,或者围绕轴旋转图像本身。但是, 与此略有不同。请注意,顶部边缘始终保持在顶部,这有点奇怪。我们不是像上面那样绕轴旋转,而是想象顶部边缘也会开始下降到右侧边缘。像这样:

好吧,如果您正在考虑转换,获得此转换的一种简单方法是采用上面的转换,并添加一些倾斜失真,以便将右上角向下推,因为右下角是被推上去。这实际上正是这个视图的创建方式:

M = np.eye(3)
max_m20 = 2e-3
max_m10 = 0.6
for m20, m10 in zip(np.linspace(0, max_m20, nsteps), np.linspace(0, max_m10, nsteps)):
    M[2, 0] = m20
    M[1, 0] = m10
    warped = cv2.warpPerspective(img, M, (w, h))
    cv2.imshow('warped', warped)
    k = cv2.waitKey(1)
    if k == ord('q') & 0xFF:
        break

因此,在我看来,考虑这些矩阵中的透视图的正确方法是将倾斜条目和最后一行放在一起。这是单应矩阵中角度实际被修改的两个地方*;否则,它只是旋转、缩放和平移——所有这些都是角度保持。

*Note: Actually, angles can be changed in one more way that I didn't mention. Affine transformations allow for non-uniform scaling, which means you can stretch a shape in width and not in height or vice-versa, which would also change the angles. Imagine if you had a triangle and stretched it only in width; the angles would change. So it turns out that non-uniform scaling (i.e. when the first and middle element of the transformation matrix are different values) can also modify angles in addition to the perspective change and shearing distortions.

请注意,在这些示例中,这同样适用于具有另一个倾斜位置的最后一行中的第二个条目;唯一的区别是它发生在顶部而不是左侧。两种情况下的负值类似于沿该轴旋转平面而不是远离相机。