【双目视觉】 立体匹配算法原理之“代价空间与聚合、视差计算”

简介: 【双目视觉】 立体匹配算法原理之“代价空间与聚合、视差计算”

预备知识


  1. 【双目视觉】 理想条件下计算物体距离_什么都只会一点的博客-CSDN博客
  2. 【双目视觉】 立体匹配算法原理之“代价函数”_什么都只会一点的博客-CSDN博客


image-20220809154728317.png


代价空间


f3311e9e0afea3e8f1f33fdb06ad5ac5.png


C A D ( x , y , d ) = ∣ I L ( x , y ) − I R ( x − d , y ) |


82b0443c5387f9b17cdcd15b14e22798.gif


d是移动像素的大小。以左图为基准。下面以左图的一个像素点P为例


1.d=0,右图不移动,计算C A D 0

2.d=1,右图向右移动一个像素点,再计算C A D 1

3.d=2,右图向右移动一个像素点,再计算C A D 2

4.…(d++,不断执行)…

5.最后得到代价空间


代价聚合


🔥目的:对代价空间进行滤波,使边界平滑


Box Filtering(均值滤波)


image.png


N:窗口像素个数


效果:


e64ffd9b085d5552c129c2ceb7b986a4.png


Bilateral filter


Bilateral filter就是输入的代价,乘以一个高斯函数,实现平滑


cb2db9820b40ac112728d9bd643b6fab.png


效果:


4e63528b7938a9205b11336c89dc2dd7.png


Cross-based local stereo matching(自适应形状)


任意选取一个像素点,横向、纵向扩张,直到遇到颜色差异较大的地方才停下来。然后在扩张后的像素点,重复上述操作。这样,因为能及时发现边界,就能大概判断出一整块区域的视差图


f3cce640a875ed1a57319514dc994c55.png

e12ab9ffd58c2175db7ae70f59121ebf.png


🚀Semi-Global Matching


能量函数


image.png


当D p − D q = 1 时,我们就取∑ q ∈ N p P 1   T [ ∣ D p − D q ∣ = 1 ]

当D p − D q > 1 时,我们就取∑ q ∈ N p P2  T [ ∣ D p − D q ∣ >1 ]


优化步骤


1.计算代价空间;(AD, BT, Census, MI, ….)


2.代价聚合


方向r上的路径代价


image.png


当d=0时,L r ( p , d ) = C ( p , d ) − mink L r ( p − r , k )

当|d|=1时,L r ( p , d ) = C ( p , d ) + P 1 − mink Lr ( p − r , k )

当|d|=i时,L r ( p , d ) = C ( p , d ) + P 2 − mink L r ( p − r , k )


Lr ( p − r , d )是该像素点左侧,最优代价。即当d=i时,左侧有最优代价,那么就C ( p , d ) + P 2


各个方向的总聚合代价


S ( p , d ) = ∑ L r ( p , d )


例如opencv收录的sgbm算法,就是计算了下面5条路径的代价


9fe6f93258dcf6c07ee7a513431350b1.png


3.WTA


Winner-Take-All,赢家通吃


即我们发现在这条视差方向r上,纵轴(聚合后的代价)最小,那么我们就取出视差值(d=18)


91977437d48eb0e14df6edd0eee11846.png


4.视差后处理


相关文章
|
9天前
|
算法 Java 数据库
理解CAS算法原理
CAS(Compare and Swap,比较并交换)是一种无锁算法,用于实现多线程环境下的原子操作。它通过比较内存中的值与预期值是否相同来决定是否进行更新。JDK 5引入了基于CAS的乐观锁机制,替代了传统的synchronized独占锁,提升了并发性能。然而,CAS存在ABA问题、循环时间长开销大和只能保证单个共享变量原子性等缺点。为解决这些问题,可以使用版本号机制、合并多个变量或引入pause指令优化CPU执行效率。CAS广泛应用于JDK的原子类中,如AtomicInteger.incrementAndGet(),利用底层Unsafe库实现高效的无锁自增操作。
理解CAS算法原理
|
2月前
|
算法 容器
令牌桶算法原理及实现,图文详解
本文介绍令牌桶算法,一种常用的限流策略,通过恒定速率放入令牌,控制高并发场景下的流量,确保系统稳定运行。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
令牌桶算法原理及实现,图文详解
|
30天前
|
存储 人工智能 缓存
【AI系统】布局转换原理与算法
数据布局转换技术通过优化内存中数据的排布,提升程序执行效率,特别是对于缓存性能的影响显著。本文介绍了数据在内存中的排布方式,包括内存对齐、大小端存储等概念,并详细探讨了张量数据在内存中的排布,如行优先与列优先排布,以及在深度学习中常见的NCHW与NHWC两种数据布局方式。这些布局方式的选择直接影响到程序的性能,尤其是在GPU和CPU上的表现。此外,还讨论了连续与非连续张量的概念及其对性能的影响。
51 3
|
2月前
|
机器学习/深度学习 人工智能 算法
探索人工智能中的强化学习:原理、算法与应用
探索人工智能中的强化学习:原理、算法与应用
|
2月前
|
缓存 算法 网络协议
OSPF的路由计算算法:原理与应用
OSPF的路由计算算法:原理与应用
60 4
|
2月前
|
存储 算法 网络协议
OSPF的SPF算法介绍:原理、实现与应用
OSPF的SPF算法介绍:原理、实现与应用
93 3
|
2月前
|
机器学习/深度学习 人工智能 算法
探索人工智能中的强化学习:原理、算法及应用
探索人工智能中的强化学习:原理、算法及应用
|
10天前
|
机器学习/深度学习 算法
基于改进遗传优化的BP神经网络金融序列预测算法matlab仿真
本项目基于改进遗传优化的BP神经网络进行金融序列预测,使用MATLAB2022A实现。通过对比BP神经网络、遗传优化BP神经网络及改进遗传优化BP神经网络,展示了三者的误差和预测曲线差异。核心程序结合遗传算法(GA)与BP神经网络,利用GA优化BP网络的初始权重和阈值,提高预测精度。GA通过选择、交叉、变异操作迭代优化,防止局部收敛,增强模型对金融市场复杂性和不确定性的适应能力。
143 80
|
3天前
|
机器学习/深度学习 算法
基于遗传优化的双BP神经网络金融序列预测算法matlab仿真
本项目基于遗传优化的双BP神经网络实现金融序列预测,使用MATLAB2022A进行仿真。算法通过两个初始学习率不同的BP神经网络(e1, e2)协同工作,结合遗传算法优化,提高预测精度。实验展示了三个算法的误差对比结果,验证了该方法的有效性。
|
6天前
|
机器学习/深度学习 数据采集 算法
基于PSO粒子群优化的CNN-GRU-SAM网络时间序列回归预测算法matlab仿真
本项目展示了基于PSO优化的CNN-GRU-SAM网络在时间序列预测中的应用。算法通过卷积层、GRU层、自注意力机制层提取特征,结合粒子群优化提升预测准确性。完整程序运行效果无水印,提供Matlab2022a版本代码,含详细中文注释和操作视频。适用于金融市场、气象预报等领域,有效处理非线性数据,提高预测稳定性和效率。

热门文章

最新文章