Have a Question?
平面扫描 | Plane Sweeping
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_k 和 t_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_m 和 d_m 分别代表单位法线(注意各个平面不一定平行,如果是平行划分的平面法向为 n_m^T=\left[\begin{array}{lll}0 & 0 & 1\end{array}\right])和相机光心到平面的距离。
2.2 单应变换
根据单应变换性质,平面 \Pi_m 上一点 X_{\Pi} 在相机 C 和 C^{\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