- @android
- 2018.4.22
- PV 286
点群を扱いやすく持ちたい
ー 概要 ー
点群の処理をするにあたって、最近傍探索などは適切なデータ構造が用意されている。今回はそれらの点群処理目的とそれらに沿った手段についてまとめる。
この章を学ぶ前に必要な知識
条件
- 点群情報が入力
ポイント
- 点群処理の目的に合わせて適切なデータ構造などの保持方法を選択する
解 説
特定の目的にあったデータ保持の形式について説明する。
複数の持ち方があるが、それぞれにおいて達成される目的は異なる。 | 扱いやすい形でデータを持つ
概要 |
1.通常のデータ保持 | |
最も通常の3次元点群情報の保持の仕方は、
[x,y,z]の位置情報をそのまま配列で保持する方法である。
下記これ以外の保持の仕方は、この形式を基準と考えたときの特徴として記述している。
この形式の表現では連なった点データに関して特に情報の前提を持つことはできない。(データが隣接していたら距離的に近いなど)
形式:
[[x1,y1,z1], [x2,y2,z2], [x3, y3, z3]...] | 通常のデータ保持について |
2.高速化するためのデータ保持 | |
点群データがデプスセンサから得られたときには2.5次元データで表現されていることが多い。(PointCloudLibraryではこれはorganizedと呼ぶ)この場合一部の処理は行列形式で表現されているため高速化することが可能になる。
x,yに対応する行列に対して各画素に距離データzを入れている形で表現する。 | 点群を画像形式で持ちたい |
点群処理が遅くなるのは点データ数が膨大であることが原因の一つであるため、これを減らすことによって高速化することができます。
PointCloudLibraryでは、VoxelGridで点群を管理することができ、ある一定サイズの立方体の空間に結び付けられたVoxelの中に一つでも点群があるかどうかを表現することができる。ここでVoxelの中に含まれている点を使うのではなく、VoxelGridの重心を使ってデータを処理すれば点データが表現する大方の形状を崩さずに点群を間引くことができる。 | データを要約して高速化 |
3.探索するためのデータ保持 | |
点群の中から所定の条件を満たす点を探索することは点群処理において頻繁に行われる処理の一つである。通常のデータ保持の形では高速な探索は行えない。
そこで一般的には、OctreeやKdTreeなどの木構造形式のデータ構造を用いてデータを保持し点群処理を行う。この形では最近傍探索などの処理なども高速に行うことができる。 | 探索するためのデータ保持 |
点群の最近傍点を検出したい場合は右記参照 | 点群から最近傍点を検出したい |
4.差分を得るためのデータ保持 | |
差分も探索と同様にOctreeを用いて検出することができる | 点群同士の差分を検出したい |
この章を学んで新たに学べる
Comments
Reasons
知識: 点群同士の差分を検出したい
二つの点群同士の差分を検出する方法についてまとめます。二つの点群をセンサから取得するとき、小数点まで一致することはまずありません。なので幾らか同一とみなす距離が必要があります。
知識: 点群を画像形式で持ちたい
点群を二次元画像の形式でデータを表現する。通常のx,y,zで処理する点群より特定のケースにおいて高速に処理できることが特徴。多くのセンサで情報は画像データ形式で渡され、多くの場合処理後に形式が変わっていく。二次元画像形式で3次元情報を表現するため度々2.5次元データと表現される.