基本トピック
タスク概要と活用シーン
点群(Point Cloud)のノイズ除去(Denoising)は特徴点ベースのSLAMなどの3次元再構成システムの中間の処理で得られる点群からノイズを除去するタスクです。画像などからSIFTなどによって得られる特徴点ベースの3次元再構成では得られる点にノイズが含まれることが多いのでその除去を行うことでより高品質の結果が得られます。
SOR(Statistical Outlier Removal)を用いたノイズ除去
SOR(Statistical Outlier Removal)は「それぞれの点が近傍の点から離れているかどうか」を元に外れ値(Outlier)の除去を行うアルゴリズムです。
\begin{align}
\mu_{i} &= \frac{1}{k}(d_1 + d_2 + \cdots + d_k) \\
i &= 1, 2, \cdots , N
\end{align}
$X$に含まれる点のk個の近傍と該当する点のdistanceを$d_1, d_2, \cdots , d_k$とおくとき、平均のdistanceの$\mu_{i}$を上記のように定義します。このときSORでは$\mathbf{x}_{i}$が外れ値(Outlier)かどうかを判定する関数$\mathrm{Outlier}$を下記のように定義します。
\begin{align}
\mathrm{Outlier}(\mathbf{x}_{i}) &= \left\{ \,
\begin{aligned}
& \mathrm{True} \qquad \mathrm{if} \, \mu_{i} \geq \bar{\mu} + \sigma \\
& \mathrm{False} \qquad \mathrm{otherwise}
\end{aligned}
\right. \\
\bar{\mu} &= \frac{1}{N} \sum_{i=1}^{N} \mu_{i}, \quad \sigma = \frac{1}{N} \sqrt{\sum_{i=1}^{N} (\mu_{i}-\bar{\mu})^{2}}
\end{align}
上記は異常検知(Anomaly Detection)などでよく用いられる平均と標準偏差を用いた外れ値判定と対応させながら理解すると良いと思います。
ノイズ除去のアルゴリズムの評価
PointCleanNetやScore-Based Point Cloud DenoisingなどのDeepLearninを用いたノイズ除去のアルゴリズムの評価にあたってはCD(Chamfer Distance)やP2M(Point-to-Mesh) Distanceなどのメトリクスが用いられることが一般的です。以下それぞれのメトリクスについて数式を元に簡単に確認します。
CD(Chamfer Distance)
CD(Chamfer Distance)はノイズを含む点群の集合$X$とノイズのない点群の集合の$Y$がある際に集合$X$の評価にあたって下記のように定義されます。
\begin{align}
\mathrm{CD}(X, Y) &= \frac{1}{M} \sum_{\mathbf{x}_{i} \in X} \min_{\mathbf{y}_{j} \in Y} || \mathbf{x}_{i} - \mathbf{y}_{j} ||_{2}^{2} + \frac{1}{N} \sum_{\mathbf{y}_{j} \in Y} \min_{\mathbf{x}_{i} \in X} || \mathbf{y}_{j} - \mathbf{x}_{i} ||_{2}^{2} \\
X &= \{ \mathbf{x}_{i} \}_{i=1}^{M} \\
Y &= \{ \mathbf{y}_{i} \}_{i=1}^{N}
\end{align}
上記の式は下記のように解釈すると良いです。
右辺の第1項: ノイズを含む点群の集合の$X$の点から最も近い点の$\mathbf{y}_{j}$の差分のノルムの2乗の平均
右辺の第2項: ノイズのない集合の$Y$の点から最も近い点の$\mathbf{x}_{i}$の差分のノルムの2乗の平均
P2M(Point-to-Mesh) Distance
DeepLearningを用いたアルゴリズム
タスク(データセット)
PUNet
PointCleanNet
PointCleanNetで用いられたデータセットの概要(PointCleanNet論文 Figure.6)
上記がPointCleanNetの論文で用いられているデータセットの概要です。上記の入手方法については下記で詳しくまとめたので省略します。
入手したデータセットにはpointCleanNetOutliersTrainingSet
、pointCleanNetOutliersTestSet
、pointCleanNetDataset
の3つのディレクトリが用意されており、それぞれ下記の目的で用いることができます。
pointCleanNetOutliersTrainingSet: それぞれのオブジェクトについて外れ値を含む140,000個の点(`xyz`で3Dの位置情報、`outliers`で点が外れ値かどうかを定義)。
pointCleanNetOutliersTestSet:
pointCleanNetDataset:
以下、pointCleanNetOutliersTrainingSet
、pointCleanNetOutliersTestSet
、pointCleanNetDataset
の3つのディレクトリについてそれぞれ可視化を行います。
・pointCleanNetOutliersTrainingSet