既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上C C++开发知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新
两个不同视角的图像上的点对的homogeneous coordinate可以用一个射影变换(projective transformation)表述,即:x1 = H*x2
二维和三维的图示如下:
射影变换也叫“单应”–Homography,“Homo”前缀就是same的意思,表示“同”,homography就是用同一个源产生的graphy,中文译过来大概就是“单应”。
因此上面式子中的矩阵H就叫单应性矩阵。上式中的x1和x2都是3*1的齐次坐标,因此H是一个3*3的矩阵:{h00,h01,h02;h10,h11,h12;h20,h21,h22}。
然而,单应矩阵的自由度是多少呢?
如果给定一个单应H={h_ij},给它的元素乘上同一个数a,得到的的单应a*H和H作用相同,因为新单应无非把齐次点x1变成了齐次点a*x1,都是一回事。因此我们可以把a换成1/h22,那么H就变成了只有8个自由元素的矩阵。
那么需要多少个点对求解这个H呢?如果需要唯一解的话,需要4个点对(对应8个方程,去解H中的8个未知数)。
3. 两个应用例子
例子1:如何进行两个图像的拼接?
解答:通过图像特征点匹配+RANSAC可以获得图像之间的单应性矩阵,然后把其中一个图像通过这个矩阵投影到另一个图像上就完成了基本的拼接。
例子2:在相机的内参数标定过程中会用到求解单应性矩阵吗?
对一个棋盘格拍照,棋盘格的世界坐标系是用户任意设定的,标定的时候,默认世界坐标系就是以标定板左上角点为原点,z轴垂直于标定板,xoy面与标定板重合的三维直角坐标系。棋盘格的格子长度已知,因此可以知道各个角点的世界坐标系坐标XYZ(Z=0)。由于Z=0,因此可以忽略掉Z这个维度,世界坐标系中某个坐标(X,Y,Z,1)到图像坐标(x,y,1)的变换就等价于(X,Y,1)到图像坐标(x,y,1)的变换。此时的变换矩阵就由3*4变为3*3,成为了单应性矩阵。
因此用4个角点就可以计算H的8个参数。以不同的角度对棋盘格拍摄3张就可以得到3个H,如果用张正友标定法,就可以得到6个约束方程,可以求解B矩阵(对称矩阵)的6个未知参数,进而通过Cholesky分解求解出内参矩阵A的参数。
4. 单应矩阵Homography求解
《从零开始学习「张氏相机标定法」(一)成像几何模型》中我们已经得到了像素坐标系和世界坐标系下的坐标映射关系:
其中,u、v表示像素坐标系中的坐标,s表示尺度因子,fx、fy、u0、v0、γ(由于制造误差产生的两个坐标轴偏斜参数,通常很小)表示5个相机内参,R,t表示相机外参,Xw、Yw、Zw(假设标定棋盘位于世界坐标系中Zw=0的平面)表示世界坐标系中的坐标。
单应性概念的引出
我们在这里引入一个新的概念:单应性(Homography)变换。可以简单的理解为它用来描述物体在世界坐标系和像素坐标系之间的位置映射关系。对应的变换矩阵称为单应性矩阵。在上述式子中,单应性矩阵定义为:
其中,M是内参矩阵。
从单应矩阵定义式子来看,它同时包含了相机内参和外参。在进一步介绍相机标定知识之前,我们重点来了解一下单应性,这有助于深入理解相机标定。因为在计算机视觉领域,单应性是一个非常重要的概念。
为了不让读者淹没在公式的汪洋大海中失去兴趣,我们颠倒一下顺序,先来看看单应性到底有什么用,然后再介绍单应矩阵的估计方法。
单应性在计算机视觉中的应用
单应性在计算机视觉领域是一个非常重要的概念,它在图像校正、图像拼接、相机位姿估计、视觉****SLAM等领域有非常重要的作用。
- 图像校正
用单应矩阵进行图像矫正的例子如下图所示,最少需要四个对应点对(后面会给出原因)就可以实现。
- 视角变换
单应矩阵用于视角变换的例子如下图所示,可以方便地将左边普通视图转换为右图的鸟瞰图。
- 图像拼接
既然单应矩阵可以进行视角转换,那我们把不同角度拍摄的图像都转换到同样的视角下,就可以实现图像拼接了。如下图所示,通过单应矩阵H可以将image1和image2都变换到同一个平面。
单应矩阵用于图像拼接的例子如下所示。
- 增强现实(AR)
平面二维标记图案(marker)经常用来做AR展示。根据marker不同视角下的图像可以方便的得到虚拟物体的位置姿态并进行显示,如下图所示。
如何估计单应矩阵?
了解了上述单应性的部分应用后,我们就有很大的动力来学习单应矩阵的推导和计算了。首先,我们假设两张图像中的对应点对齐次坐标为(x’,y’,1)和(x,y,1),单应矩阵H定义为:
则有:
矩阵展开后有3个等式,将第3个等式代入前两个等式中可得:
也就是说,一个点对对应两个等式。在此插入一个讨论:单应矩阵H有几个自由度?
或许有人会说,9个啊,H矩阵不是9个参数吗?从h11到h33总共9个。真的是这样吗?实际上并不是,因为这里使用的是齐次坐标系,也就是说可以进行任意尺度的缩放。比如我们把hij乘以任意一个非零常数k并不改变等式结果:
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
的技术提升。**
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!