Homography
单应性是一种投影变换,可在不同视图之间映射平面,从而实现透视校正、图像配准和全景拼接。
单应性是一种可逆投影变换,可将一个平面上的点映射到另一个平面上的点,同时保持直线不变。在计算机视觉中,单应性描述了平面表面从不同视角呈现的方式:以倾斜角度拍摄的矩形页面可以变换为正面视图中的矩形。单应性支持图像配准、透视校正和全景拼接。“投影变换”是其同义词;语言学术语“同形异义词”指拼写相同的词。
单应性矩阵的工作原理#
单应性由一个 3 x 3 矩阵表示,通常称为 H。它作用于齐次坐标,齐次坐标用三个值表示二维点。矩阵乘法后,将前两个输出值分别除以第三个值,即可得到普通图像坐标。
虽然 H 包含九个元素,但它只有八个独立参数,即自由度:将每个元素乘以相同的非零数不会改变映射关系。这种平面图像映射的几何原理解释了为什么四组适当的点对应关系就能确定一个单应性。
仿射变换是一种受限的单应性,可保持平行线。一般单应性还可以表示透视效果,包括平行边缘向消失点汇聚的现象。距离和角度通常会发生变化。米歇尔·沙尔于1837 年关于对偶性和单应性的回忆录中提出了这一概念。
如何估计单应性#
估计过程从对应点开始:这些点表示两幅图像中的同一物理特征。对应点可以是手动选取的角点,也可以是通过特征提取获得并匹配的关键点。尺度不变特征变换等方法会生成描述符——对局部外观进行数值概括——以便匹配不同视图中的特征。
至少需要四对点,并且任一组中的任意三点都不能共线。直接线性变换 (DLT) 算法会将这些点的坐标关系转换为线性方程组。当测量值包含噪声时,增加对应点可以提高估计精度。
错误匹配需要采用稳健拟合方法。随机抽样一致性 (RANSAC) 会反复使用小型子集拟合候选变换,并找出内点:即与某个候选变换一致的匹配点。重投影误差用于衡量变换后的源点与观测到的目标点之间的距离。OpenCV 的单应性估计 API通过 cv2.findHomography 提供此流程,并返回 H 和内点掩码。
在 Python 中应用单应性#
OpenCV提供了用于估计矩阵和扭曲图像的独立操作。使用 pip install opencv-python numpy 安装依赖项。此示例将示例图像的矩形边界映射为梯形:
from urllib.request import urlopen
import cv2
import numpy as np
image_url = "https://ultralytics.com/images/bus.jpg"
with urlopen(image_url) as response:
encoded = np.frombuffer(response.read(), dtype=np.uint8)
image = cv2.imdecode(encoded, cv2.IMREAD_COLOR)
height, width = image.shape[:2]
# 确保两个数组中的角点顺序都相同,且均按顺时针排列。
source = np.float32([[0, 0], [width - 1, 0], [width - 1, height - 1], [0, height - 1]])
target = np.float32([[120, 80], [width - 121, 80], [width - 1, height - 1], [0, height - 1]])
matrix, _ = cv2.findHomography(source, target)
warped = cv2.warpPerspective(image, matrix, (width, height))
cv2.imwrite("homography_result.jpg", warped)保存的图像显示了透视缩短效果:图像的上边缘更窄,而场景中的直线边缘仍保持笔直。
单应性的应用场景#
- 文档处理:透视校正会将平面文档的四个角映射到矩形。这个预处理步骤会规整文本布局,然后再进行光学字符识别,其原理与 OpenCV 透视校正示例所展示的平面变形几何相同。
- 全景拼接:融合前会对齐有重叠区域的照片。Matthew Brown 和 David Lowe 的Autostitch 系统利用匹配的局部特征自动构建全景图,包括从无序图像集合中识别重叠图像。
在 Ultralytics YOLO 中,RandomPerspective 增强会在训练期间应用投影变形,并同步变换图像及其对应的边界框、分割轮廓和关键点。其 perspective 设置用于控制此数据增强中的透视分量。
几何限制与相关概念#
单个单应性可以精确关联同一平面的理想针孔相机视图,也可以关联相机绕其投影中心旋转时拍摄的视图。相机发生平移且物体深度不同时,视差会产生随深度变化的位移。对齐背景平面后,前景物体仍会发生偏移,在拼接图像中形成重影边缘或鬼影。
相机标定用于处理镜头畸变;由于镜头畸变会造成弯曲的图像几何,因此在平面对齐前需要先进行校正。对于一般的三维场景,极线几何会将对应点限制在一条直线上;单应性则会直接预测该点的位置。在立体视觉中,极线上的剩余位置提供视差信息,可用于深度估计。










