Have a Question?

平面扫描 (Plane Sweeping)

You are here:

1 算法原理

平面扫描 (Plane Sweeping) 算法基于如下基本假设:假设空间依据深度划分成无数平面,对于某一深度 d 的平面上某一点 p 如果其投影到各个相机视角的颜色值均相同,那么该深度有很大概率就是该点的真实深度(位于物体表面上);反之如果颜色值不同,则该深度很大概率不是该点的真实深度(不在物体表面上)。

2 算法流程

2.1 变量定义

已知参考帧 I_{\text{ref}} (可视为坐标系原点)和对应的 N 个关键帧 I_k=I_1 \ldots I_n,以及 N 个相机投影矩阵为:
\begin{equation} P_k=K_k\left[R_k^T-R_k^T t_k\right] \text { with } k=1, \ldots, N \end{equation}
其中 K_k]、[latex]R_kt_k 分别代表内参矩阵、旋转矩阵和平移向量。

相对于参考帧在距离区间 \left[d_{\text {near }}, d_{\text {far }}\right] 划分的 M 个相机平面为:
\begin{equation} \Pi_m=\left[n_m^T-d_m\right] \text { for } m=1, \ldots, M \end{equation}
其中 n_md_m 分别代表单位法线(注意各个平面不一定平行,如果是平行划分的平面法向为 n_m^T=\left[\begin{array}{lll} 0 & 0 & 1 \end{array}\right])和相机光心到平面的距离。

2.2 单应变换

根据单应变换性质,平面 \Pi_m 上一点 X_{\Pi} 在相机 CC^{\prime} 上的齐次坐标分别为 \mathbf{x}=\begin{bmatrix} x\\ y\\ 1 \end{bmatrix}\mathbf{x^{\prime }}=\begin{bmatrix} x^{\prime }\\ y^{\prime }\\ 1 \end{bmatrix},二者满足如下单应变换关系:
\begin{equation} \mathbf{x^{\prime} }=H\mathbf{x} \end{equation}
在参考图像 I_{ref} 投影单应矩阵为:
\begin{equation} H_{\Pi_m, P_k}=K_k\left(R_k^T+\frac{R_k^T C_k n_m^T}{d_m}\right) K_{r e f}^{-1} \end{equation}
具体推导可以参见 单应变换 (Homography)

因此得到:
\begin{equation} \left[\begin{array}{lll} \tilde{x} & \tilde{y} & \tilde{w} \end{array}\right]^T=H_{\Pi_m, P_k}\left[\begin{array}{lll} x & y & 1 \end{array}\right]^T \end{equation}
其中 \left[\begin{array}{lll} \tilde{x} & \tilde{y} & \tilde{w} \end{array}\right]

2.3 Cost Function

有了同一个点在 N 个不同平面上投影回来的对应关系,我们可以设计一个代价函数来进行优化。考虑到单个像素的不稳定性,通常我们使用一个以 \left(x, y\right) 为中心的 W \times W 窗口内的像素块来定义代价(当然除此以外也可以使用类似 ZNCC 之类的公式):
\begin{equation} \begin{aligned} C\left(x, y, \Pi_k\right) &=\sum_{k=0}^{N-1} \sum_{(i, j) \in W} \mid I_{r e f}(x-i, y-j) \\ &-\beta_k^{r e f} I_k\left(x_k-i, y_k-j\right) \mid, \end{aligned} \end{equation}

其中 \left(x_k, y_k\right) 由上面公式获得,\beta_k^{r e f} 表示增益因子与光照有关。

有了以上代价函数,一个像素点所对应的最佳的平面就是:
\begin{equation} \tilde{\Pi}(x, y)=\underset{\Pi_m}{\operatorname{argmin}} C\left(x, y, \Pi_m\right) . \end{equation}

这里使用的是 Winner-Take-All 的策略。有了对应平面后,该点的深度按照以下公式计算:
\begin{equation} Z_m(x, y)=\frac{-d_m}{[x, y \quad 1] K_{r e f}^{-T} n_m} \end{equation}

参考文献

[1] Multi-Resolution Real-Time Stereo on Commodity Graphics Hardware
[2] Real-time Plane-sweeping Stereo with Multiple Sweeping Directions
[3] Accurate Multiple View 3D Reconstruction Using Patch-Based Stereo for Large-Scale Scenes
[4] Image-Based Rendering using Plane-Sweeping Modelisation
[5] https://blog.csdn.net/xuangenihao/article/details/81392684
[6] https://blog.csdn.net/heyijia0327/article/details/53782094

上一个 TSDF (Truncated Signed Distance Function)
下一个 Voxel Hashing

Add a Comment

Your email address will not be published.

Table of Contents