1.基本概念
单应性矩阵Homogeneous 是射影几何中的一个术语,又称之为射影变换。当相机发生纯旋转,或者若场景中的特征点都落在同一平面上(比如墙,地面等)时,计算基础矩阵F 或者本质矩阵E 往往会有很大的误差(因为此时平移量t特别小),此时需要用到单应矩阵H. 单应矩阵主要用来解决两个问题:
(1)表述真实世界中一个平面与他对应图像的透视变换
(2)通过透视变换实现图像从一个视图变换到另一个视图的转换。
把一个射影平面上的点(三维齐次矢量)映射到另一个射影平面上,并且把直接射影为直线,具有保线性,总的来说单应是关于三维齐次矢量的一种线性变换,如图所示,两个平面之间的关系可以用一个3*3的非奇异矩阵H表示x1=Hx2,H表示单应矩阵,定义了八个自由度。这种关系定义为平面单应性
使用单应矩阵H 时假设所有像素都在一个平面上,单应矩阵H 直接描绘了图像坐标之间的关系,也就是第一帧图像是怎么线性扭曲到第二帧图像的。具体的,图像1中的像素
与图像2中对应的像素满足:
将单应矩阵H展开
2.求解方法
Mat cv::findHomography ( InputArray srcPoints,
InputArray dstPoints,
int method = 0,
double ransacReprojThreshold = 3,
OutputArray mask = noArray(),
const int maxIters = 2000,
const double confidence = 0.995
)
参数:
srcPoints:源平面中点的坐标矩阵,可以是CV_32FC2类型,也可以是vector类型
dstPoints:目标平面中点的坐标矩阵,可以是CV_32FC2类型,也可以是vector类型
method:计算单应矩阵所使用的方法。方法如下:
- 0 - 利用所有点的常规方法
- RANSAC - RANSAC-基于RANSAC的鲁棒算法
- LMEDS - 最小中值鲁棒算法
- RHO - PROSAC-基于PROSAC的鲁棒算法
ransacReprojThreshold:将点对视为内点的最大允许重投影错误阈值(仅用于RANSAC和RHO方法)
mask:可选输出掩码矩阵,通常由鲁棒算法(RANSAC或LMEDS)设置.
maxIters:RANSAC算法的最大迭代次数,默认值为2000。
confidence:可信度值,取值范围为0到1.