多视图几何总结——摄像机模型

多视图几何总结——摄像机模型

摄像机模型相对来说比较基础,针孔模型对于搞CV或者SLAM的人来说,是入门必须掌握的知识点,这里为了保证总结的完整性,同时也让自己再巩固下,抽了点时间进行一个简单的总结。
多视图几何中对于相机模型的介绍主要分为有限摄像机无限摄像机有限摄像机就近似于我们非常熟悉的针孔模型,而无限摄像机书中主要介绍的是仿射摄像机,下面分别总结分析下:

有限摄像机矩阵——推导

先上图
在这里插入图片描述
如上左图所示,我们需要将一个空间点 X X X映射到一个图像点 x x x上即
在这里插入图片描述根据右上图我们很容易推到处下面的变换:
在这里插入图片描述这个结论是将图像平面的原点设立在主轴与图像平面的交点上,而实际上我们默认的图像坐标系应该是位于图像的左上角,向下为x轴向右为y轴,因此我们这里进行一个坐标系调整(可以理解为在齐次坐标下对点进行一个平移):
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述则上面的矩阵可以改写为
在这里插入图片描述
这里的 K K K就是内参,而 X c a m X_{cam} Xcam指的是相机坐标系下的空间坐标,现在我们将其转到世界坐标系下
在这里插入图片描述其中 C ~ \widetilde{\mathrm{C}} C 为摄像机中心在世界坐标系下的坐标,结合上面的内参我们可以将针孔模型的最终结论写成如下形式:
在这里插入图片描述而我们所谓的摄像机矩阵就是
在这里插入图片描述为了增加一般性,将 K K K变为
在这里插入图片描述其中 s s s为扭曲参数,这个参数的意义可以解释为像素元素产生的扭曲似的x轴和y周不垂直,在现实生活中,这个参数不为零的情况一般出现在对一张照片再次重拍的情况,所以参数 s s s一般是为零的。那为什么要这么做呢?因为这样我们可以将 K K K看做是一个上三角矩阵,如果我们已经事先得到了相机矩阵 P P P,我们可以很轻易地通过QR分解的分解的方法获得 K K K R R R,从而确定相机的内参和相机的相对于全局坐标系的方向,在相机标定中就是这么做的。
顺便提一句,上面这种情况下,相机矩阵一共11个自由度,秩为3.


有限摄像机矩阵——计算

有限摄像机矩阵计算的过程其实就是相机的标定过程,我们给定的数据是一组空间中的3D点 X i X_i Xi和对应的2D图像点 x i x_i xi,求解一个3×4的矩阵 P P P满足 x i = P X i x_i=PX_i xi=PXi,这和计算单应矩阵、基础矩阵的方法几乎是一致的,可以参考多视图几何总结——基础矩阵、本质矩阵和单应矩阵的求解过程,这里简单分几种情况讨论下:

(1)最小配置解

上一节的文末提到了 P P P矩阵的自由度是11,而我们一对点(指一个3D空间点和一个2D图像点)能构成两个约束,因此最小配置解需要的点的对数是6,但是最后一对点我们只需要知道x或者y方向的数据即可,最后构成一个 A p = 0 Ap=0 Ap=0的方程,存在一维零空间,求解即可

(2)超定解(DLT)

在满足某个归一化的约束下,求 ∣ ∣ A p ∣ ∣ ||Ap|| Ap的最小值(为什么是这样可以参考刚刚提到的博客里面单应矩阵的求解方法,这里有一点不同的是,这里需要对3D空间点进行归一化,平移到原点后缩放使它们到原点的均方根距离是 3 \sqrt{3} 3 ,而不是 2 \sqrt{2} 2

(3)几何误差

其实就是根据几何意义建立一个优化目标,通过非线性优化的方法进行迭代优化,如下式:
在这里插入图片描述,这是以图像上的误差作为优化目标,当然我们也可以用空间点的误差作为优化目标,或者是两个误差一起优化,只是优化目标函数不同而已,这里可以将DLT或者最小配置解的结果作为迭代最小化的初始值,从书上的结果大概可以知道,非线性优化的方法会更加准确,但是肯定也会更加耗时。

上面提到的几种方法是不考虑约束的 ( s = 0 , α 1 = α 2 ) (s=0, \alpha_1=\alpha_2) (s=0,α1=α2),上面的方法其实也是可以在带约束下进行求解的,简单地说就是在几何误差的方法中我将约束确定下来只优化剩下了没确定的六个参数,在DLT方法中就是进行一个矩阵映射,然后最小化映射后的结果。求出来矩阵 P P P之后进行QR分解就可以获得 K K K R R R

这里在实际的算法操作中(例如张正友标定法)是不是一致的我还没有来得及去确认…之后有时间再补上。


仿射无限摄像机

仿射无限摄像机可以将其理解为其摄像机中心在无穷远平面,而仿射性质体现在将无穷远点映射为无穷远点,怎么理解呢?可以参考下这篇知乎如何理解无穷远摄像机模型?,对比下面两张图片就明白了
在这里插入图片描述

在这里插入图片描述
第一张图是有限摄像机拍出来的结果,第二张图就是仿射无限摄像机拍出来的图,可以发现在现实生活中平行的线(楼角)在这张图片中也是平行的,这就是所谓的将无穷远点映射为无穷远点,用过Solidworks的同学应该记得咱们画图的时候就是用的这种视角,我对于这个理解就这么深了,这种相机矩阵在电影拍摄的场景中有所应用,在SLAM里面好像还没有注意到相关的应用,因此不再深究

ok,有问题欢迎交流~

此外,对SLAM算法感兴趣的同学可以看考我的博客SLAM算法总结——经典SLAM算法框架总结

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在MATLAB中,可以使用多种方式创建和管理多个视图。以下是一些常见的方法: 1. 使用窗口布局管理器(Window Layout Manager):MATLAB中的Window Layout Manager允许您创建和管理多个视图,以便在单个窗口中显示它们。您可以使用"Layout"选项卡中的工具栏来配置和排列这些视图。通过分割窗格、嵌套面板和其他选项,您可以自定义布局以满足您的需求。 2. 使用图形对象:MATLAB中的图形对象允许您在同一窗口中显示多个图形,并对它们进行各种操作。您可以使用不同的函数(如plot、scatter、image等)创建不同类型的图形对象,并使用axes函数将它们放置在同一窗口中的不同位置。 下面是一个示例,展示如何在MATLAB中创建多个视图: ```matlab % 创建两个子图 figure; % 第一个子图 subplot(2, 1, 1); x1 = linspace(0, 10, 100); y1 = sin(x1); plot(x1, y1); title('Plot 1'); % 第二个子图 subplot(2, 1, 2); x2 = linspace(0, 10, 100); y2 = cos(x2); plot(x2, y2); title('Plot 2'); ``` 上述代码创建了一个包含两个子图(subplot)的窗口。每个子图都使用不同的数据进行绘制,并在每个子图的标题中标识出来。您可以根据需要自定义这些图形的位置和样式。 除了上述方法,MATLAB还提供了其他一些功能和工具,如figure函数、uifigure函数、App Designer等,可用于创建和管理多个视图。您可以根据自己的需求选择适合您的方法来创建多视图代码。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值