当前位置:网站首页>双目立体视觉笔记(三)三角测量、极线校正
双目立体视觉笔记(三)三角测量、极线校正
2022-08-04 12:29:00 【郑学长】
三角测量和极线校正
·三角测量
假设两个相机像平面精准位于同一平面上,且行对齐,两个光轴严格平行。
利用三角形关系,我们不难推出Z值:
如果主点 c x l c_{x}^{l} cxl, c x r c_{x}^{r} cxr坐标相同则可简化为:
因为视差 d = x l − x r d = x^{l}-x^{r} d=xl−xr,且 Z Z Z为我们的深度值 d e p t h depth depth,故:
d e p t h = f T d depth = \frac{fT}{d} depth=dfT
·视差与深度图关系
(1)视差与深度成反比,视差接近0时,微小的视差变化会产生较大的深度变化。
(2)当视差较大时,微小的视差变化几乎不会引起深度多大的变化。
(3)因此,立体视觉系统仅物体距离相机较近时具有较高的深度精度。
·极线校正
(1)校正的过程:就是将相机在数学上对准到同一观察平面上,使得相机像素行是严格对齐的。
(2)校正的目的:对两幅图像的二维匹配搜索变成一维,节省计算量,排除虚假匹配点。
·校正算法
为了将相机极点变换到无穷远使得极线水平对准,我们创建一个旋转矩阵,首先是 X X X轴的旋转,我们将 X X X轴旋转到与基线相同的方向即旋转后新 X X X轴就是 O l − O r O_{l}-O_{r} Ol−Or,旋转向量: e 1 = T ∣ T ∣ e_{1}=\frac{T}{|T|} e1=∣T∣T。
确定旋转后的新 Y Y Y轴,只需满足与 e 1 e_{1} e1正交即可:选择与主光轴和 e 1 e_{1} e1相交的方向:
e 2 = e 1 × ( R l [ 0 , 0 , 1 ] T + t l ) e_{2}=e_{1} \times (R_{l}[0,0,1]^{T}+t_{l}) e2=e1×(Rl[0,0,1]T+tl)
新的 Z Z Z轴,与 e 1 , e 2 e_{1},e_{2} e1,e2垂直且满足右手法则: e 3 = e 1 × e 2 e_{3}=e_{1} \times e_{2} e3=e1×e2,
最终得到的旋转矩阵: R n e w = [ e 1 , e 2 , e 3 ] R_{new}=[e_{1},e_{2},e_{3}] Rnew=[e1,e2,e3],
新的旋转矩阵: R l n e w = R n e w R l t R_{l}^{new}=R_{new}R_{l}^{t} Rlnew=RnewRlt, R r n e w R n e w R r t R_{r}^{new}R_{new}R_{r}^{t} RrnewRnewRrt,
校正后,baseline T T T计算:
下式中 c l r c_{lr} clr是指右相机光心在左相机坐标系下的坐标(也等于与右相机光心[0,0,0]的距离), t求解公式的意义是左相机光心在右相机校正后的坐标系下的坐标(也等于与右相机校正后的坐标系下光心[0,0,0]的距离)。故baseline就是x轴方向的距离。

·视差图转深度图
视差图是校正后的坐标系下得到的值,首先将其转换为校正后坐标系下的深度图
已知:
则:
把上式写成矩阵形式:
式中 Q ′ , w Q^{'},w Q′,w定义如下:
将校正后的坐标系下深度图转换到校正前的相机坐标系下
已知:校正前的相机坐标系下坐标 ( x , y , z ) (x,y,z) (x,y,z)转到校正后相机坐标系下坐标 ( x ′ , y ′ , z ′ ) (x^{'},y^{'},z^{'}) (x′,y′,z′)转换关系如下:
则已知校正后的求校正前的公式如下:
再将其投影到图像坐标系下:
即:
将上两步合并得到校正后坐标系下的视差图 ( u ′ , v ′ , d i s p ) (u^{'},v^{'},disp) (u′,v′,disp) 与校正前的坐标系下的深度图 ( u , v , d e p t h ) (u,v,depth) (u,v,depth)的转换矩阵 Q Q Q,已知:
则:
·立体匹配
三维重建的核心就是立体匹配。通过寻找匹配点,利用三角测量或对极约束得到其在空间中的3D信息。
立体匹配算法主要分为全局、局部、半全局。
(1)全局立体匹配算法:
全局立体匹配算法主要是采用了全局的优化理论方法估计视差,建立全局能量函数,通过最小化全局能量函数得到最优视差值。通过二维相邻像素视差之间的约束(如平滑性约束)而得到更好的匹配效果,但是对内存的占用量大,速度慢不适合实时运行。主要的算法有图割(graph cuts)、信念传播(belief propagation)、动态规划等算法。
(2)局部立体匹配算法:
主要是采用局部优化方法进行视差值估计,局部立体匹配算法有 SAD,SSD 等算法,与全局立体匹配
算法一样,也是通过能量最小化方法进行视差估计,但是在能量函数中,只有数据项,而没有平滑项。
该算法由于每个像素计算互不干扰可以并行计算,所以可以实时。但由于所基于的局部窗口视差相同的
假设在很多情况下并不成立导致匹配效果较差。
(3)半全局立体匹配算法SGM
综合上述局部和全局算法的优缺点,半全局算法依旧采用全局框架,但是在计算能量函数最小化的步骤
时使用高效率的一维路径聚合方法来代替全局算法中的二维最小化算法,使用一维最优来近似二维最优,得到的视差图在效果上和全局算法没有太大的差别,但是算法效率却有非常大的提升。
边栏推荐
猜你喜欢
随机推荐
Flutter 使用 json_serializable 解析 JSON 支持泛型
密码设置有关方法:不能相同字母,不能为连续字符
[牛客网]OR63删除公共字符
"Lonely Walking on the Moon" is a powerful medicine, it can't cure the internal friction of happy twist
MySQL必知必会(初级篇)
Two years of independent development experience Programmers tell us the experience of making money (listen to the masters who really make money)
03 多线程与高并发 - ReentrantLock 源码解析
他是“中台”之父,凭一个概念为阿里狂赚百亿
Diffusion Models:生成扩散模型
Cache character stream
“蔚来杯“2022牛客暑期多校训练营5 B、C、F、G、H、K
LeetCode Daily Question (858. Mirror Reflection)
酷开科技 × StarRocks:统一 OLAP 分析引擎,全面打造数字化的 OTT 模式
Flutter教程大全合集(2022年版)
开发小程序插件如何实现盈利?
1314元的七夕礼盒,收割了多少直男?
Escape character is ‘^]’什么意思?怎么使用telnet
业务中我们如何更新缓存?Redis
云原生Devops 的实现方法
程序猿七夕礼物-如何30分钟给女友快速搭建专属语聊房









