还可以参考:https://blog.csdn.net/lhanchao/article/details/52849446

我们已经得到了像素坐标系和世界坐标系下的坐标映射关系:

其中,u、v表示像素坐标系中的坐标,s表示尺度因子,fx、fy、u0、v0、γ(由于制造误差产生的两个坐标轴偏斜参数,通常很小)表示5个相机内参,R,t表示相机外参,Xw、Yw、Zw(假设标定棋盘位于世界坐标系中Zw=0的平面)表示世界坐标系中的坐标。

单应性概念的引出

我们在这里引入一个新的概念:单应性(Homography)变换。可以简单的理解为它用来描述物体在世界坐标系和像素坐标系之间的位置映射关系。对应的变换矩阵称为单应性矩阵。在上述式子中,单应性矩阵定义为:

其中,M是内参矩阵

从单应矩阵定义式子来看,它同时包含了相机内参和外参。在进一步介绍相机标定知识之前,我们重点来了解一下单应性,这有助于深入理解相机标定。因为在计算机视觉领域,单应性是一个非常重要的概念。

为了不让读者一上来就淹没在公式的汪洋大海中失去兴趣,我们颠倒一下顺序,先来看看单应性到底有什么用,然后再介绍单应矩阵的估计方法

单应性在计算机视觉中的应用

单应性在计算机视觉领域是一个非常重要的概念,它在图像校正、图像拼接、相机位姿估计、视觉SLAM等领域有非常重要的作用。

1

图像校正

用单应矩阵进行图像矫正的例子如下图所示,最少需要四个对应点对(后面会给出原因)就可以实现。

2

视角变换

单应矩阵用于视角变换的例子如下图所示,可以方便地将左边普通视图转换为右图的鸟瞰图。

3

图像拼接

既然单应矩阵可以进行视角转换,那我们把不同角度拍摄的图像都转换到同样的视角下,就可以实现图像拼接了。如下图所示,通过单应矩阵H可以将image1和image2都变换到同一个平面。

单应矩阵用于图像拼接的例子如下所示。

4

增强现实(AR)

平面二维标记图案(marker)经常用来做AR展示。根据marker不同视角下的图像可以方便的得到虚拟物体的位置姿态并进行显示,如下图所示。

如何估计单应矩阵?

了解了上述单应性的部分应用后,我们就有很大的动力来学习单应矩阵的推导和计算了。首先,我们假设两张图像中的对应点对齐次坐标为(x',y',1)和(x,y,1),单应矩阵H定义为:

则有:

矩阵展开后有3个等式,将第3个等式代入前两个等式中可得:

也就是说,一个点对对应两个等式。在此插入一个讨论:单应矩阵H有几个自由度?

或许有人会说,9个啊,H矩阵不是9个参数吗?从h11到h33总共9个。真的是这样吗?实际上并不是,因为这里使用的是齐次坐标系,也就是说可以进行任意尺度的缩放。比如我们把hij乘以任意一个非零常数k并不改变等式结果:

所以实际上单应矩阵H只有8个自由度。8自由度下H计算过程有两种方法。

第一种方法:直接设置 h33=1,那么上述等式变为:

第二种方法:将H添加约束条件,将H矩阵模变为1,如下:

以第2种方法(用第1种也类似)为例继续推导,我们将如下等式(包含||H||=1约束):

乘以分母展开,得到:

整理,得到:

假如我们得到了两幅图片中对应的N个点对(特征点匹配对),那么可以得到如下线性方程组:

写成矩阵形式:

由于单应矩阵H包含了||H||=1约束,因此根据上图的线性方程组,8自由度的H我们至少需要4对对应的点才能计算出单应矩阵。这也回答了前面图像校正中提到的为何至少需要4个点对的根本原因

但是,以上只是理论推导,在真实的应用场景中,我们计算的点对中都会包含噪声。比如点的位置偏差几个像素,甚至出现特征点对误匹配的现象,如果只使用4个点对来计算单应矩阵,那会出现很大的误差。因此,为了使得计算更精确,一般都会使用远大于4个点对来计算单应矩阵。另外上述方程组采用直接线性解法通常很难得到最优解,所以实际使用中一般会用其他优化方法,如奇异值分解、Levenberg-Marquarat(LM)算法(后续文章会介绍)等进行求解。

如何根据标定图得到单应矩阵?

经过前面一系列的介绍,我们应该大致明白如何根据打印的棋盘标定图和拍摄的照片来计算单应矩阵H。我们来总结一下大致过程。

1、打印一张棋盘格标定图纸,将其贴在平面物体的表面。

2、拍摄一组不同方向棋盘格的图片,可以通过移动相机来实现,也可以移动标定图片来实现。

3、对于每张拍摄的棋盘图片,检测图片中所有棋盘格的特征点(角点,也就是下图中黑白棋盘交叉点,中间品红色的圆圈内就是一个角点)。我们定义打印的棋盘图纸位于世界坐标系Zw=0的平面上,世界坐标系的原点位于棋盘图纸的固定一角(比如下图中黄色点)。像素坐标系原点位于图片左上角。

4、因为棋盘标定图纸中所有角点的空间坐标是已知的,这些角点对应在拍摄的标定图片中的角点的像素坐标也是已知的,如果我们得到这样的N>=4个匹配点对(越多计算结果越鲁棒),就可以根据LM等优化方法得到其单应矩阵H。当然计算单应矩阵一般不需要自己写函数实现,OpenCV中就有现成的函数可以调用,对应的c++函数是:

Mat findHomography(InputArray srcPoints, InputArray dstPoints, int method=0, double ransacReprojThreshold=3, OutputArray mask=noArray() )

从函数定义来看,只要输入匹配点对,指定具体计算方法即可输出结果。

四点求解单应性矩阵

% 返回值 H 是一个3*3的矩阵
% pts1 和 pts2是2*4的坐标矩阵对应特征点的(x,y)坐标
n = size(pts1,2);
A = zeros(2*n,9);
A(1:2:2*n,1:2) = pts1';
A(1:2:2*n,3) = 1;
A(2:2:2*n,4:5) = pts1';
A(2:2:2*n,6) = 1;
x1 = pts1(1,:)';
y1 = pts1(2,:)';
x2 = pts2(1,:)';
y2 = pts2(2,:)';
A(1:2:2*n,7) = -x2.*x1;
A(2:2:2*n,7) = -y2.*x1;
A(1:2:2*n,8) = -x2.*y1;
A(2:2:2*n,8) = -y2.*y1;
A(1:2:2*n,9) = -x2;
A(2:2:2*n,9) = -y2;[evec,~] = eig(A'*A);
H = reshape(evec(:,1),[3,3])';
H = H/H(end); % make H(3,3) = 1

在齐次坐标中,假设一点p(xi,yi,1)经过H矩阵的变换变为p‘(xi',yi',1),即 p' = H*p,通常,对于透视变换,H矩阵有8个自由度,这样至少需要4对特征点对求解。4个特征点对可以建立8个方程。那么对于有n对特征点的情况(超定方程),解p' = H*p方程组可以转化为对齐次方程组Ax = 0 的求解。而对 Ax = 0 的求解转化为 min ||Ax||2 的非线性优化问题(超定方程,通过最小二乘拟合得到近似解)。

对于某一点(xi,yi),其变换可表述为 p' = H*p,代入展开可得:

(1)

那么可得:

(2)

进一步变换为:

(3)

这样便可构造系数矩阵:

(4)

通过系数矩阵我们可以构造出齐次线性方程组(Ax = 0):

(5)

即:

(6)

对于(6)这样的超定方程求解,可以通过最小二乘的方式求解。通过对系数矩阵A求取特征值和特征向量得到。通过以下方式获得最小二乘解:

[V,D] = eig(A'*A) (7)

其中D是特征值对角矩阵(特征值沿主对角线降序),V是对应D特征值的特征向量(列向量)组成的特征矩阵,A'表示A的转置。其最小二乘解为V(1),即系数矩阵A最小特征值对应的特征向量就是超定方程组Ax = 0的最小二乘解。

至此,H矩阵已经求取,后续可以通过随机采样一致性(RANSC)进行精选,或者通过LM进行优化。

RANSAC算法的单应性矩阵讲解相关推荐

  1. 基础矩阵,本质矩阵,单应性矩阵讲解

    ORB-SLAM点云地图中相机的位姿初始化,无论算法工作在平面场景,还是非平面场景下,都能够完成初始化的工作.其中主要是使用了适用于平面场景的单应性矩阵H和适用于非平面场景的基础矩阵F,程序中通过一个 ...

  2. Levenberg-Marquardt算法求解单应性矩阵

    A. Levenberg-Marquardt算法 待估计的模型参数 x=[x1,x2,⋯,xn]T\mathbf{x}=[x_1, x_2, \cdots,x_n]^Tx=[x1​,x2​,⋯,xn​ ...

  3. 【RANSAC与单应性矩阵H求解】

    特征点匹配--使用基础矩阵.单应性矩阵的RANSAC算法去除误匹配点对 RANSAC算法的单应性矩阵讲解

  4. 计算机视觉教程1-2:单应性矩阵估计

    目录 1 导论 2 基本直接线性变换(Basic DLT) 3 归一化直接线性变换(Normalized DLT) 4 鲁棒单应性估计(Robust Homography Estimation) 1 ...

  5. 《增强现实:原理、算法与应用》读书笔记(1)基础矩阵、本质矩阵与单应性矩阵

    <增强现实:原理.算法与应用>读书笔记(1) 入坑增强现实,学长让我先把这本书看懂,看了一小半,确实有很多对数学要求挺高的地方,所以打算写个读书笔记,分享一些体会. 第三章:实景的三维结构 ...

  6. sift算法_单应性Homograph估计:从传统算法到深度学习

    点击上方"CVer",选择加"星标"置顶 重磅干货,第一时间送达 本文作者:白裳 https://zhuanlan.zhihu.com/p/74597564 本 ...

  7. 单应性矩阵求解函数findHomography()

    OPENCV官方地址:Camera Calibration and 3D Reconstruction 上面这个地址是OPENCV标定和三维重建集合的函数说明,包括标定原理,过程和工具的使用,想要使用 ...

  8. opencv求两张图像光流_OpenCV单应性矩阵发现参数估算方法详解

    点击上方蓝字关注我们 微信公众号:OpenCV学堂 关注获取更多计算机视觉与深度学习知识 单应性矩阵计算函数与应用 OpenCV在通过特征描述子完成描述子匹配之后,会得到一些关键点对,我们会把这些关键 ...

  9. 基于匹配点集对单应性矩阵进行估计

    基于匹配点集对单应性矩阵进行估计 2020/4/28 FesianXu 前言 在立体视觉中,对单应性矩阵进行估计是一个很重要的任务,我们在之前的博文[1,2,3]中的讨论中都或多或少地涉及到了单应性矩 ...

最新文章

  1. 2018-2019-1 20165310 20165315 20165226 实验一 开发环境的熟悉
  2. 【HDU】1005 Number Sequence (有点可爱)
  3. 华为手机如何升级鸿蒙系统_能运行EMUI 11才能升级到鸿蒙2.0,只有这些手机能升级,有你的吗...
  4. ProgressDialog使用总结
  5. 一文总结排序模型CTR点击率预估
  6. 4 [面向对象]-三大特性:多态
  7. 浅谈String str = ““ 和 new String()的区别
  8. Oracle数据字典全解 (1)
  9. 万网空间的数据库配置方法
  10. 令人惊奇的FLEX 3D UI.
  11. excel 单元格内换行
  12. android刷新界面的几种方法,Android UI更新的几种方法
  13. 安恒赛php_安恒四月赛部分Writeup
  14. OpenCV Mat类的convertTo函数,数据类型转换
  15. 健全营销体制是打造营销生态系统的命脉
  16. Android自定义LayoutManager第十一式之飞龙在天
  17. windows配置代理
  18. 《时光不再,你还在》凌莫寒白静熙第二章 这么开心的时刻,他只想和我庆祝...
  19. 如何用annie在B站下载视频?
  20. Navicat Premium12安装_破解(亲测成功)时间:2019年7月29日

热门文章

  1. DNF 关键组件Gameloader.exe
  2. MySQL中Event事件的执行记录查询
  3. VisualGDB 5.6 R8 Crack-new-10-01
  4. 小程序+小程序API+后台商城管理系统
  5. 如何判断车与路边线距离_车身与边线30公分距离如何判断?看完让你秒懂...
  6. Android课程设计--网上购物商城
  7. 电脑应用程序错误:提示0xc000009错误怎么办?
  8. ijkplayer实现图形字幕的播放
  9. web自动化测试框架搭建(python+selenium+pytest+pom+ddt)
  10. C4D致富经典入门到精通(八)