单应性矩阵的理解及求解3
http://www.sohu.com/a/223594989_100007727
前面文章《从零开始学习「张氏相机标定法」(一)成像几何模型》中我们已经得到了像素坐标系和世界坐标系下的坐标映射关系:
其中,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() )
从函数定义来看,只要输入匹配点对,指定具体计算方法即可输出结果。
单应性矩阵的理解及求解3相关推荐
- 计算机视觉学习笔记(四)homography 单应性矩阵的理解及求解
单应性矩阵的理解及求解 1. 齐次坐标(Homogeneous Coordinate) 一幅2D图像上的非齐次坐标为(x,y),而齐次坐标为(x,y,1),也可以写成(x/z,y/z,1)或(x,y, ...
- 单应性矩阵的理解及求解1
https://blog.csdn.net/zinnc/article/details/52319491 尽量写的通俗一点,因为从某种程度上讲,本人也是dummy..... 1. 先说homogene ...
- 单应性矩阵的理解及求解4
https://blog.csdn.net/hudaliquan/article/details/52121832 网上有很多关于单应性矩阵的求解方法,但都没有说明怎样用四点求解单应性矩阵或者源码详细 ...
- 关于单应性矩阵的理解:Homography matrix for dummies
尽量写的通俗一点,因为从某种程度上讲,本人也是dummy..... 1. 先说homogeneous coordinate,齐次坐标 一幅2D图像上的非齐次坐标为(x,y),而齐次坐标为(x,y,1) ...
- OpenCV-C++实现单应性矩阵的求解
1. 单应性矩阵的理解 1.1 图像层面 单应性矩阵(Homography)约束了同一3D空间点在两个像素平面的2D齐次坐标. 单应性矩阵具有8个自由度,已知A和B两张图像上的四对点,即可列出八个方程 ...
- 齐次坐标和单应性矩阵
齐次坐标主要是应用在矩阵转换中,我们通常运算的坐标系是"笛卡尔坐标系",我们已经习惯了笛卡尔坐标系的表述方式,一个点都有唯一对应的数据值来表示,比如原点我们就记做(0,0)点.而笛 ...
- Homography单应性矩阵程序实现
单应性矩阵重要应用在求解两幅图像的映射关系,或者图像坐标与世界坐标的映射关系. 这里主要在张正有相机标定法的基础上,求解H. 具体理论为请点:相机标定法-张正有 Opencv程序实现 std::vec ...
- 单应性矩阵的相关理解
版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/zinnc/article/details/52319491 尽量写的通俗一点,因为从某种程度上讲,本 ...
- 单应性矩阵 matlab,四点求解单应性矩阵
网上有很多关于单应性矩阵的求解方法,但都没有说明怎样用四点求解单应性矩阵或者源码详细说明很少.这里说说自己的理解. 首先贴出matlab代码 % 返回值 H 是一个3*3的矩阵 % pts1 和 pt ...
最新文章
- java 取数组的前90位,LeetCode 面试题21. 调整数组顺序使奇数位于偶数前面
- [云炬创业管理笔记]第三章测试3
- OLEDB IMEX行数限制的问题
- 计算机二级考数组吗,计算机二级考试!
- 我三年开发经验,从字节跳动抖音离职后,看看这篇文章吧!
- [SharePoint 2010] Visual Studio 2010內撰寫視覺化WebPart超簡單
- python求角度_python根据坐标点的坐标计算角度
- C++(2-4)——sqrt的使用
- SAP 四代增强方式和Enhancement查找方法
- 小米 gps信号测试软件,实时查看,防走丢神器:小米 米兔GPS定位器 防盗跟踪器 使用评测...
- db2 dec函数oracle,DB2常用函数与Oracle有什么区别?
- mt4服务器显示无连接,MT4登录显示“无效账户”,“无法连接”怎么解决
- Matlab plot 光滑曲线
- 微信第三方平台授权流程说明
- 一些实用的功能强大的绘图软件
- 申论(基础题)之基础题型梳理
- 热度TopN排名算法的设计
- java学籍管理系统 课程设计,Java课程设计---学生学籍管理系统
- Linux SDIO WIFI Marvell8801/Marvell88w8801(三) --- Linux驱动以及组件的使用
- if or函数套用_Excel将IF函数和OR函数结合使用进行多条件的选择性判断
热门文章
- linux网卡ip自动丢失,重启电脑IP设定丢失的故障处理
- python运维系统开发_Python系统运维开发实战
- 水箱建模最小二乘法_【案例揭秘】利用隐变量建模和近红外光谱技术降低高剪切湿法制粒工艺放大的风险...
- logback 日志脱敏 隐藏PII信息
- speedpdf(Excel)表格如何重复打印标题行?
- 四色定理已利用计算机证明,地图四色定理的非计算机证明.pdf
- 高手都具备“向下兼容”的能力
- Matplotlib-基础知识
- jffs2的目录项查找过程
- UR机械臂仿真和用上位机编程控制