单应性矩阵的理解及求解3「建议收藏」

http://www.sohu.com/a/223594989_100007727前面文章《从零开始学习「张氏相机标定法」(一)成像几何模型》中我们已经得到了像素坐标系和世界坐标系下的坐标映射关系:其中,u、v表示像素坐标系中的坐标,s表示尺度因子,fx、fy、u0、v0、γ(由于制造误差产生的两个坐标轴偏斜参数,通常很小)表示5个相机内参,R,t表示相机外参,Xw、Yw、Zw(假设标…

大家好,又见面了,我是你们的朋友全栈君。

http://www.sohu.com/a/223594989_100007727

前面文章《从零开始学习「张氏相机标定法」(一)成像几何模型》中我们已经得到了像素坐标系和世界坐标系下的坐标映射关系:

单应性矩阵的理解及求解3「建议收藏」

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

单应性概念的引出

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

单应性矩阵的理解及求解3「建议收藏」

其中,M是内参矩阵

单应性矩阵的理解及求解3「建议收藏」

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

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

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

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

1

图像校正

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

单应性矩阵的理解及求解3「建议收藏」

2

视角变换

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

单应性矩阵的理解及求解3「建议收藏」

3

图像拼接

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

单应性矩阵的理解及求解3「建议收藏」

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

单应性矩阵的理解及求解3「建议收藏」

4

增强现实(AR)

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

单应性矩阵的理解及求解3「建议收藏」

如何估计单应矩阵?

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

单应性矩阵的理解及求解3「建议收藏」

则有:

单应性矩阵的理解及求解3「建议收藏」

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

单应性矩阵的理解及求解3「建议收藏」

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

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

单应性矩阵的理解及求解3「建议收藏」

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

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

单应性矩阵的理解及求解3「建议收藏」

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

单应性矩阵的理解及求解3「建议收藏」

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

单应性矩阵的理解及求解3「建议收藏」

乘以分母展开,得到:

单应性矩阵的理解及求解3「建议收藏」

整理,得到:

单应性矩阵的理解及求解3「建议收藏」

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

单应性矩阵的理解及求解3「建议收藏」

写成矩阵形式:

单应性矩阵的理解及求解3「建议收藏」

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

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

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

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

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

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

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

单应性矩阵的理解及求解3「建议收藏」

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

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

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

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/125417.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 抖音推荐算法总结[通俗易懂]

    抖音推荐算法究竟如何是做抖音短视频运营的同学非常关心的问题,抖音官方并没有披露正式的算法,但凭借着民间的智慧和官方披露的部分信息中,网友已经总结出抖音推荐算法的秘密。这里整理资料如下:1.发布后的推荐流程第0步:双重审核在抖音,每天有数量庞大的新作品上传,纯靠机器审核容易被钻空子,纯靠人工审核又不太现实。因此,双重审核成为抖音算法筛选视频内容的第一道门槛。机器审核(检测是否违…

    2022年4月11日
    56
  • IDEA插件系列(72):activate-power-mode插件——激活电源模式

    IDEA插件系列(72):activate-power-mode插件——激活电源模式1.插件介绍activate-power-mode插件。根据Atom的插件activate-power-mode的效果移植到IDEA上。效果如下图:2.安装方式第一种方式,是在IDEA上搜索插件进行安装,会适配当前IDEA的版本。第二种安装方式是使用离线插件进行安装。插件下载地址:https://plugins.jetbrains.com/plugin/8330-activate-power-mode3.使用方法安装此插件后,敲击代码就会出现该特效。..

    2022年7月14日
    58
  • 百度竞价点击(商盾)研究

    百度竞价点击(商盾)研究今天写个比较详细的说明,也参考了大量这方面的资料进行的总结,算是给大家一个长见识,写的不好的地方,希望大家多多指教!感谢吾爱朋友的支持!移动广告平台都有各自的检测点击欺诈的机制,通过各种维度(包括I

    2022年7月2日
    27
  • 联盟卡结合异业联盟,如何建立一个完善的联盟生态会员体系?「建议收藏」

    联盟卡结合异业联盟,如何建立一个完善的联盟生态会员体系?「建议收藏」对于我们所认知的联盟,生态就是联盟生态,也就是说,如果我们要做一个联盟卡,然后通过我们的联盟卡去建立我们的会员。那如何来建立呢?分四个方式来讲。首先第一个方式要建立完善的一个会员体系,把这个会员体系给架构起来。如何成为我们平台的会员,以及说成有平台会员之后可以享受平台的一种权益。再者的话就是如何让我们的会员去帮助我们平台去做裂变,也就是我们经常讨论的一个问题,如何去做分享?那么在这个环节中如何去做一个线上电子权益卡,通过入口让用户可以去购买,或者叫免费卡也行,这个都是由平台去做设定的,开通后可以去享受我们相

    2022年6月15日
    26
  • PoolBoy

    PoolBoy

    2022年1月11日
    87
  • 《编程珠玑》—笔记。浏览此文,一窥此书。

    《编程珠玑》—笔记。浏览此文,一窥此书。

    2021年11月28日
    45

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号