当前位置: 首页 > news >正文

多视图几何--密集匹配--patchmatchstereo翻译

patch match是一种在两种图像寻找对应相似(相同)像素块patch的一种算法,其本身就是一个近似的稠密最近邻算法,即。 对于一幅图像的每个像素块,计算第二幅图像中与之相似的颜色块的整数值( x , y) -向量。其主要步骤有三个:1对所有的匹配距离随机初始化,2假设所有的patch匹配距离初始值最少有一个是对的,然后在近邻中进行空间传播,如果近邻的匹配代价更小,则更新匹配距离,3对匹配距离在一个窗口内进行随机搜索,防止陷于局部最优。

视差平面是将立体视觉视差方程与空间三维平面相结合得到的使用空间平面参数表示视差值的一个方程,揭示了空间点平面与视差之间的联系。

具体见之前的文章。

文章目录

  • 摘要
  • 1介绍
  • 2算法
    • 2.1模型
    • 2.2通过patch match计算视差
      • 随机初始化
      • 迭代
        • 空间传播
        • 视图传播
        • 时间传播
        • 平面细化
    • 2.3后处理

摘要

常见的局部的立体匹配方法是直接使用整数视差计算的,并且假定窗口是垂直于相机Z轴的(平行窗口),此窗口内的视差恒定。为了克服以上两个问题,使用倾斜支持窗口来获取每个点的视差平面。该方法的主要挑战是在所有可能的平面中找到一个像素的最优三维平面,其解的空间数量是无限的(在无限种可能中寻找一个正确结果是非常困难的)。解决该问题的一个理想算法是PatchMatch ,我们将其扩展为根据平面寻找一个近似最近邻。 除了PatchMatch的(1)空间传播方案,我们还提出了( 2 )视图传播,即在立体对的左视图和右视图之间传播平面;( 3 )时间传播,即在做时间立体时,平面从视频的前一帧和连续帧中传播。在匹配代价聚合中使用自适应的支持权重,以改善视差边界处的结果。

1介绍

在局部立体匹配中,一个支持窗口以参考帧的一个像素为中心。然后将这个支持窗口在第二幅图像中进行位移,以找到颜色相异性最低的点,该点代表匹配点。在这个过程中有一个隐含的假设,即支持窗口内的所有像素都具有恒定的视差。在实践中,由于两方面的原因,这一假设不太可能成立。( 1 )支持窗口包含位于与中心像素不同表面的像素。( 2 )窗口捕捉的是一个倾斜的表面,即不是正面平行的。

图1a说明了问题。标准的局部算法[ 7、9、10、16]在离散视差处采用前平行窗口重建图1a的4个点。

观察PQRS四个点:

只有在点P所处表面段恰好位于整数视差为1处的平行平面,其他三个点都是倾斜平面。因此在实际情况中,平行平面极为罕见。对于QRS三个点,平行平面方法均无法找到最优支持窗口——因为表面可能处于子像素级视差(Q点)、位于倾斜平面(R点)或曲面(S点)。我们的解决方案是为每个像素点计算独立的3D平面,并将支持区域投影至该平面。图1b表明这种方法能显著改善支持区域的质量。例如,我们能够为P、Q和R点构建最优支持窗口。对于S点,我们的平面模型虽然对实际曲面形状存在过度简化,但后续实验将证明即使在这种情况下平面近似仍能取得良好效果(如图2c中的球体示例)。这里就算说采用倾斜窗口即解决了物体平面不是垂直于相机Z轴的问题,也解决了普通匹配方法只能在整数视差上计算视差(例如sgm先在整数上估计视差再进行差值)(对应摘要提出的两个问题)。

图2通过Corridor图像对展示了我们算法的优势,该场景包含多个高度倾斜的表面。图2b展示了仅允许使用前端平行窗口时的算法效果,由于单个倾斜表面被多个前端平行面近似(参见地板、天花板和墙壁),导致三维重建质量较差。相比之下,采用我们的倾斜支持窗口方法后,这些倾斜表面得以以子像素精度被准确重建(图2c)。
在这里插入图片描述

2算法

2.1模型

首先定义视差平面:

dp=afppx+bfppy+cfp(1)d_p=a_{f_p}p_x+b_{f_p}p_y+c_{f_p}\tag{1}dp=afppx+bfppy+cfp(1)

fp表示平面,px,py为像素坐标,dp为视差,a,b,c为视差平面参数即待求量{f_p}表示平面,px,py为像素坐标,d_p为视差,a,b,c为视差平面参数即待求量fp表示平面,px,py为像素坐标,dp为视差,a,b,c为视差平面参数即待求量

其中 afp,bfpa_{f_p}, b_{f_p}afp,bfpcfpc_{f_p}cfp是 平面 fpf_pfp的 三个参数,pxp_xpxpyp_ypy表 示 ppp的 x 和 y 坐标。我们希望找到的平面 fpf_pfp是 所有可能平面中聚合匹配成本最小的那个:

fp=argmin⁡f∈Fm(p,f)(2)f_p=\underset{f \in \mathscr{F}}{\operatorname{argmin}} m(p, f)\tag{2}fp=fFargminm(p,f)(2)

其中 F\mathscr{F}F 表示所有平面的集合,其大小为无穷。注意,这个无穷的空间检查所有可能的参数是困难的。根据平面 fff匹配像素 ppp的 聚合成本计算如下:

m(p,f)=∑q∈Wpw(p,q)⋅ρ(q,q−(afqx+bfqy+cf))(3)m(p, f)=\sum_{q \in W_p} w(p, q) \cdot \rho\left(q, q-\left(a_f q_x+b_f q_y+c_f\right)\right)\tag{3}m(p,f)=qWpw(p,q)ρ(q,q(afqx+bfqy+cf))(3)

这里,WpW_pWp表 示以像素 ppp为 中心的方形窗口。我们还将我们的方法应用于时序立体匹配。在这种情况下,WpW_pWp不再是一个二维窗口,而是一个三维窗口,其中第三维由视频序列的前后帧的像素组成,如最近在[10]中提出的那样。权重函数 w(p,q)w(p, q)w(p,q)用 于克服边缘膨胀问题,并实现了自适应支持权重的思想[16]。它通过查看像素的颜色来计算 pppqqq位 于同一平面上的可能性,即,如果颜色相似,则返回高值:

w(p,q)=e−∥Ip−Iq∥γ(4)w(p, q)=e^{-\frac{\left\|I_p-I_q\right\|}{\gamma}} \tag{4}w(p,q)=eγIpIq(4)

这里,γ\gammaγ是 一个用户定义的参数,∥Ip−Iq∥\left\|I_p-I_q\right\|IpIq计 算 pppqqq在 RGB 空间中的颜色的 L1L_1L1距 离。我们的函数可以看作是[16]中提出的权重函数的简化形式。现 在让我们关注方程(3)的第二部分。这里,我们首先根据平面 fff计 算 qqq的 视差,并通过从 qqq的 x 坐标中减去这个视差来推导 qqq在 另一个视图中的匹配点 q′q^{\prime}q 。函 数 ρ(q,q′)\rho\left(q, q^{\prime}\right)ρ(q,q) 现在计算 qqqq′q^{\prime}q之 间的像素差异:

ρ(q,q′)=(1−α)⋅min⁡(∥Iq−Iq′∥,τcol)+α⋅min⁡(∥∇Iq−∇Iq′∥,τgrad)(5)\rho\left(q, q^{\prime}\right)=(1-\alpha) \cdot \min \left(\left\|I_q-I_{q^{\prime}}\right\|, \tau_{c o l}\right)+\alpha \cdot \min \left(\left\|\nabla I_q-\nabla I_{q^{\prime}}\right\|, \tau_{g r a d}\right)\tag{5}ρ(q,q)=(1α)min(IqIq,τcol)+αmin(IqIq,τgrad)(5)

其中 ∥∇Iq−∇Iq′∥\left\|\nabla I_q-\nabla I_{q^{\prime}}\right\|IqIq表 示在 qqqq′q^{\prime}q处 计算的灰度值梯度的绝对差异。由于 q′q^{\prime}q的 x 坐标位于连续域中,我们通过线性插值推导其颜色和梯度值。用户定义的参数 α\alphaα平 衡了颜色项和梯度项的影响。参数 τcol \tau_{\text {col }}τcol τgrad \tau_{\text {grad }}τgrad 截 断成本以在遮挡区域提供鲁棒性。这种匹配测量最近在[9]中被应用,其优点是由于使用了梯度,可以处理输入图像中的辐射度差异。

2.2通过patch match计算视差

让我们现在专注于在两个视图的每个像素处找到一个3D平面的问题,以最小化方程( 3 )中给出的代价函数。我们的算法基于PatchMatch [ 1 ]。它的基本思想是,在自然立体对中,相对较大区域的像素(像素块patch)可以用近似相同的平面来建模。我们通过用一个随机平面初始化每个像素来找到一个区域的平面。希望在这种随机初始化之后,该区域的至少一个像素携带一个接近正确平面的平面。有一个单一的"好"猜测已经足够让算法工作,因为有一个传播步骤将这个平面传递到区域的其他像素。 除了像[ 1 ]中那样在空间相邻像素之间传播平面外,我们还引入了两个新的传播步骤,即视图传播和时间传播。最后,还有一个平面细化步骤,通过改变平面参数使其更接近最优平面。下面对这些步骤进行详细说明。

随机初始化

我们将两个视图的每个像素分配到一个随机平面。原则上,直接对视差平面f的3个参数a、b和c赋予随机值,就可以得到一个随机平面。但是,该策略不会对所有允许平面的空间进行均匀采样。在我们计算像素( x0 , y0)处的随机平面的方法中,我们首先选择一个随机视差z0,它位于允许的连续视差值范围内。这给了我们一个随机平面上的点P = ( x0 , y0 , z0)。我们现在计算平面的法向量为随机单位向量 n = (nx , ny , nz)。(这里假设了一个空间平面方程和一个视差)然后根据视差和空间法线的关系可以得到:

af=−nxnzbf=−nynzcf=nxx0+nyy0+nzz0nza_f=-\frac{n_x}{n_z}\\ b_f=-\frac{n_y}{n_z}\\ c_f=\frac{n_xx_0+n_yy_0+n_zz_0}{n_z}af=nznxbf=nznycf=nznxx0+nyy0+nzz0

迭代

在每次迭代过程中,每个像素经过四个阶段:空间传播,视图传播,时序传播,平面细化。(空间传播和平面细化对应patch match两个步骤,视图传播和时序传播是作者新增的,时序传播针对视频流是可选的)。在偶数次迭代中,从左上角像素按照先行后列依次传播到右下角像素,奇数次和偶数次迭代操作相反。在文章的实现中,一共迭代3次,如下图所示:
在这里插入图片描述

空间传播

这种传播形式背后的思想是,空间邻近的像素很可能具有相似的平面。令p表示当前像素,fp表示像素所在视差平面。我们评估了将p赋给空间近邻q的平面fq是否改善了方程( 3 )的代价值,即我们检查了条件m( p , fq) < m( p , fp)。如果是成立,我们接受fq为p的新平面,即fp:= fq .在偶数次迭代中我们考虑左邻点和上邻点,而在奇数次迭代中检查右邻点和下邻点。

视图传播

在这里,我们利用左右视差图之间存在的强相关性,即一个像素与其在另一个视图中的匹配点很可能具有相似的视差平面。我们检查第二个视图的所有像素,根据它们的当前平面,将我们的当前像素p作为匹配点。设p′是这样的一个像素,fp′表示它变换到第一个视图的平面。若m( p , fp′) < m( p , fp),则令fp:= fp′。(这里的p’没有说是p的同名点,而是在右图中所有像素进行搜索,和李博的解释不太一样)。

时间传播

这种传播形式只能在处理立体视频序列时使用。假设当前视频帧的一个像素p和前一帧或连续图像中同一坐标的一个像素p′有可能具有相似的平面。显然,如果序列中的运动很小,这个假设更有可能成立,而这种情况往往是这样的。检查条件m( p , fp′) < m( p , fp)。如果满足,我们设fp:= fp′.

平面细化

此步骤的目标是精化像素 p=(x0,y0)p=\left(x_0, y_0\right)p=(x0,y0) 处的平面 fpf_pfp 的参数,以进一步降低方程(3)的代价值(防止patch match陷入局部最优)。我们将 fpf_pfp 转换为点法式的表示形式。我们有两个参数:Δz0max⁡\Delta_{z_0}^{\max }Δz0max,它定义了三维点的 视差z0z_0z0 所允许的最大变化量;以及 Δnmax⁡\Delta_n^{\max }Δnmax,它限定了法向量 n⃗\vec{n}n 各分量所允许变化量。

我们首先将 Δz0\Delta_{z_0}Δz0 估计为一个位于区间 [−Δz0max⁡,Δz0max⁡]\left[-\Delta_{z_0}^{\max }, \Delta_{z_0}^{\max }\right][Δz0max,Δz0max] 内的随机值,并计算 z0′:=z0+Δz0z_0^{\prime}:=z_0+\Delta_{z_0}z0:=z0+Δz0,这给了我们一个新的三维点 P′=(x0,y0,z0′)P^{\prime}=\left(x_0, y_0, z_0^{\prime}\right)P=(x0,y0,z0)。类似地,我们估计区间 [−Δnmax⁡,Δnmax⁡]\left[-\Delta_n^{\max }, \Delta_n^{\max }\right][Δnmax,Δnmax] 内的三个随机值,它们构成了向量 Δ⃗n\vec{\Delta}_nΔn 的分量。接着,我们根据 n′→:=u(n⃗+Δ⃗n)\overrightarrow{n^{\prime}}:=u\left(\vec{n}+\vec{\Delta}_n\right)n:=u(n+Δn) 来估计修改后的法向量,其中u()u()u() 为单位向量,将$ P^{\prime}$ 和 n′→\overrightarrow{n^{\prime}}n 定义的视差平面转换为方程(1)的表示形式,从而得到修改后的平面 fp′f_p^{\prime}fp。如果 m(p,fp′)<m(p,fp)m\left(p, f_p^{\prime}\right)<m\left(p, f_p\right)m(p,fp)<m(p,fp),我们则接受这个新平面,即令 fp:=fp′f_p:=f_p^{\prime}fp:=fp

此精化过程是迭代进行的。我们开始时设置 Δz0max⁡:=maxdisp⁡/2\Delta_{z_0}^{\max }:=\operatorname{maxdisp} / 2Δz0max:=maxdisp/2,其中 maxdisp 是最大允许视差,并设置 Δnmax⁡:=1\Delta_n^{\max }:=1Δnmax:=1。在每次精化之后,我们设置 Δz0max⁡:=Δz0max⁡/2\Delta_{z_0}^{\max }:=\Delta_{z_0}^{\max } / 2Δz0max:=Δz0max/2Δnmax⁡:=Δnmax⁡/2\Delta_n^{\max }:=\Delta_n^{\max } / 2Δnmax:=Δnmax/2,这将以指数级速度缩小搜索范围。当 Δz0max⁡<0.1\Delta_{z_0}^{\max }<0.1Δz0max<0.1 时,我们停止迭代。其思想是在最初的迭代中允许较大的变化,这在当前平面完全错误的情况下是合理的。在后续的迭代中,我们对非常接近当前平面的平面进行采样,这使得我们能够捕捉视差细节,例如在圆形曲面上的细节。

2.3后处理

我们现在通过左右一致性检查来进行遮挡处理。对于每个像素 p,我们计算其在另一视图中的匹配点 p′。接着我们检查条件 |dp − dp′ | ≤ 1 是否成立。如果此条件不成立,则像素 p 被标记为无效。这种一致性检查通常对于被遮挡的像素以及误匹配的像素会失败。

我们现在为无效像素填充视差值。对于一个无效的像素 p,我们分别向其左侧和右侧搜索最近的有效的像素,并记录这两个点的平面 f l 和 f r。接着,我们计算将 p 分别分配给平面 f l 和 f r 时所得到的视差(使用方程 (1)),并选择两者中较小的一个作为 p 的填充视差。选择较小视差的动机在于,遮挡通常发生在背景处。请注意,这种填充方案是对平面进行外推,而非像通常做法(例如 [7, 9])那样复制恒定的视差值。因此,我们在此阶段也能正确处理倾斜表面。

然而,明显的问题是这种策略会在视差图中产生水平条纹。为了缓解此问题,我们对填充的视差应用加权中值滤波器(亦见 [9])。该中值滤波器的权重掩码通过方程 (4) 计算得出。我们使用与匹配过程中相同的 γ 和窗口大小设置。(这也意味着在进行时序立体匹配时,我们应用的是三维中值滤波器。)请注意,所有通过左右一致性检查的像素均不受此操作的影响。后处理前后的视差图分别如图 3b 和图 3c 所示。

参考:
《PatchMatch Stereo - Stereo Matching with Slanted Support Windows》
《Local stereo matching with 3D adaptive cost aggregation for slanted surface modeling and sub-pixel accuracy》
李博知乎和csdn博客GitHub源码
https://ethanli.blog.csdn.net/article/details/106292615
https://github.com/ethan-li-coding/PatchMatchStereo.git

http://www.dtcms.com/a/474346.html

相关文章:

  • Visual Basic 概述
  • redis项目知识体系
  • C++11(列表初始化、右值引用和移动语义)
  • 北京规划建设 杂志 官方网站多说与网站账号绑定
  • 网站建站外包公司产品做网站如何谁来维护价格
  • 电子商务网站开发文档济宁seo优化公司
  • 提效工具推荐-任务关系和状态自动转为 UML图
  • 集合(Set)的使用场景与习惯养成指南
  • 【每日一题】3186. 施咒的最大总伤害
  • 如何做新网站php 资讯网站
  • 专门做推广的网站吗哪个网站可以改字体
  • 小迪安全v2023学习笔记(一百零三讲)—— 漏扫项目篇PoC开发Rule语法反链判断不回显检测Yaml生成
  • MySQL的练习题二----创建表的练习题
  • 设备技术支持东莞网站建设大连模板网站制作多少钱
  • Dockerfile 指令详解与实战指南
  • 10.1 快速排序(排序(下))
  • 前端梳理体系从常问问题去完善-框架篇(Vue2Vue3)
  • 【数据分享】青藏高原10米分辨率DEM数据集
  • 网站正在建设中空白模板网站建设调查通知
  • 【星闪】Hi2821 | 低功耗开发 + 低功耗管理及按键唤醒例程
  • 怎么做网站的网盘品牌网站建设公司有哪些
  • 【Linux】Socket编程基础
  • 长春建网站wordpress 图片打开慢
  • 91工业设计网模板网站有利于做seo吗
  • 做网站蓝色和什么颜色搭配好看万维网站注册
  • Windows 10 使用 VMware Workstation 搭建 Ubuntu 虚拟机
  • 深入解析Litho的多智能体协同架构与ReAct推理机制
  • 机器视觉---ViBe算法
  • Product Hunt 每日热榜 | 2025-10-12
  • C++11 多线程与并发编程