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

预备知识

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

代价空间

image-20220809163622579
C A D ( x , y , d ) = ∣ I L ( x , y ) − I R ( x − d , y ) ∣ C_{A D}(x, y, d)=\left|I_{L}(x, y)-I_{R}(x-d, y)\right| CAD(x,y,d)=IL(x,y)IR(xd,y)
bandicam-2022-08-09-17-18-53-853

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

  1. d=0,右图不移动,计算 C A D 0 C_{AD0} CAD0
  2. d=1,右图向右移动一个像素点,再计算 C A D 1 C_{AD1} CAD1
  3. d=2,右图向右移动一个像素点,再计算 C A D 2 C_{AD2} CAD2
  4. …(d++,不断执行)…
  5. 最后得到代价空间

代价聚合

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

Box Filtering(均值滤波)

C d A ( p ) = 1 N ∑ q C d ( q ) C_{d}^{A}(p)=\frac{1}{N} \sum_{q} C_{d}(q) CdA(p)=N1qCd(q)

N:窗口像素个数

效果:

image-20220809173051620

Bilateral filter

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

image-20220809173257584

效果:

image-20220809173321459

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

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

image-20220809173418101

image-20220809173449486

🚀Semi-Global Matching

能量函数
E ( D ) = ∑ p ( C ( p , D p ) + ∑ q ∈ N p P 1   T [ ∣ D p − D q ∣ = 1 ] + ∑ q ∈ N p P 2   T [ ∣ D p − D q ∣ > 1 ] ) \begin{aligned} E(D)=& \sum_{\mathbf{p}}\left(C\left(\mathbf{p}, D_{\mathbf{p}}\right)+\sum_{\mathbf{q} \in N_{\mathbf{p}}} P_{1} \mathrm{~T}\left[\left|D_{\mathbf{p}}-D_{\mathbf{q}}\right|=1\right]\right. &\left.+\sum_{\mathbf{q} \in N_{\mathbf{p}}} P_{2} \mathrm{~T}\left[\left|D_{\mathbf{p}}-D_{\mathbf{q}}\right|>1\right]\right) \end{aligned} E(D)=p C(p,Dp)+qNpP1 T[DpDq=1]+qNpP2 T[DpDq>1]

D p − D q = 1 D_p-D_q = 1 DpDq=1时,我们就取 ∑ q ∈ N p P 1   T [ ∣ D p − D q ∣ = 1 ] \sum_{\mathbf{q} \in N_{\mathbf{p}}} P_{1} \mathrm{~T}\left[\left|D_{\mathbf{p}}-D_{\mathbf{q}}\right|=1\right] qNpP1 T[DpDq=1]

D p − D q > 1 D_p-D_q > 1 DpDq>1,我们就取 ∑ q ∈ N p P 2   T [ ∣ D p − D q ∣ > 1 ] \sum_{\mathbf{q} \in N_{\mathbf{p}}} P_{2} \mathrm{~T}\left[\left|D_{\mathbf{p}}-D_{\mathbf{q}}\right|>1\right] qNpP2 T[DpDq>1]

优化步骤

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

  2. 代价聚合

    方向r上的路径代价
    L r ( p , d ) = C ( p , d ) + min ⁡ ( L r ( p − r , d ) L r ( p − r , d − 1 ) + P 1 L r ( p − r , d + 1 ) + P 1 min ⁡ i L r ( p − r , i ) + P 2 ) − min ⁡ k L r ( p − r , k ) \begin{aligned} L_{\mathbf{r}}(\mathbf{p}, d)=& C(\mathbf{p}, d)+\min \left(L_{\mathbf{r}}(\mathbf{p}-\mathbf{r}, d)\right.\\ & L_{\mathbf{r}}(\mathbf{p}-\mathbf{r}, d-1)+P_{1} \\ & L_{\mathbf{r}}(\mathbf{p}-\mathbf{r}, d+1)+P_{1} \\ &\left.\min _{i} L_{\mathbf{r}}(\mathbf{p}-\mathbf{r}, i)+P_{2}\right)-\min _{k} L_{\mathbf{r}}(\mathbf{p}-\mathbf{r}, k) \end{aligned} Lr(p,d)=C(p,d)+min(Lr(pr,d)Lr(pr,d1)+P1Lr(pr,d+1)+P1iminLr(pr,i)+P2)kminLr(pr,k)
    当d=0时, L r ( p , d ) = C ( p , d ) − min ⁡ k L r ( p − r , k ) L_{\mathbf{r}}(\mathbf{p}, d)= C(\mathbf{p}, d)-\min _{k} L_{\mathbf{r}}(\mathbf{p}-\mathbf{r}, k) Lr(p,d)=C(p,d)minkLr(pr,k)

    当|d|=1时, L r ( p , d ) = C ( p , d ) + P 1 − min ⁡ k L r ( p − r , k ) L_{\mathbf{r}}(\mathbf{p}, d)= C(\mathbf{p}, d)+P_1-\min _{k} L_{\mathbf{r}}(\mathbf{p}-\mathbf{r}, k) Lr(p,d)=C(p,d)+P1minkLr(pr,k)

    当|d|=i时, L r ( p , d ) = C ( p , d ) + P 2 − min ⁡ k L r ( p − r , k ) L_{\mathbf{r}}(\mathbf{p}, d)= C(\mathbf{p}, d)+P_2-\min _{k} L_{\mathbf{r}}(\mathbf{p}-\mathbf{r}, k) Lr(p,d)=C(p,d)+P2minkLr(pr,k)

    L r ( p − r , d ) L_r(p-r,d) Lr(pr,d)是该像素点左侧,最优代价。即当d=i时,左侧有最优代价,那么就 C ( p , d ) + P 2 C(\mathbf{p}, d)+P_2 C(p,d)+P2

    各个方向的总聚合代价
    S ( p , d ) = ∑ L r ( p , d ) S(\mathbf{p}, d)=\sum L_{\mathbf{r}}(\mathbf{p}, d) S(p,d)=Lr(p,d)
    例如opencv收录的sgbm算法,就是计算了下面5条路径的代价

    屏幕截图 2022-08-10 093643

  3. WTA

    Winner-Take-All,赢家通吃

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

    image-20220810095720836

  4. 视差后处理

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

落叶随峰

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值