Lidarから取得した点群を面として再構築したい!
- ここにLivoxで取得した点群があります。
- pointcloud library (pcl) のsurface moduleを使って面としての再構築ができそう
- いっぱい手法がある。どれがいいの?
- 一個一個見ていこう。
というわけで中身を見ていきます
surface module
https://pointclouds.org/documentation/group__surface.html
Base Classたち
pcl::CloudSurfaceProcessing
点群の表面を綺麗にする機能。表面平滑化、穴埋め、アップサンプリングなどができる。
pcl::MeshProcessing
その名の通りmesh processのBaseClass
pcl::SurfaceReconstruction
点群をインプットして表面を生成する機能のBaseClass
pcl::MeshConstruction
点群をインプットして表面を生成する機能のBaseClass SurfaceReconstructionとの違いは??
具体的なアルゴリズムたち(各アルゴリズムの結果は追記)
pcl::ConcaveHull
https://ja.wikipedia.org/wiki/%E5%87%B8%E5%8C%85
なるほど、ゴムで包んだ感じの表面が得られる、と。
pcl::EarClipping
https://youtu.be/OVwpj6OCClg
三角形で埋めていく
pcl::GreedyProjectionTriangulation
https://en.wikipedia.org/wiki/Greedy_triangulation
交差が生じないように一番近い頂点を結んでいく
pcl::GridProjection
http://www.pcl-users.org/file/n3567834/38.png
Grid 状になる。mesh ,surafceではないのかもしれない。
pcl::MarchingCubes
Voxcelをmeshに変換する手法。
http://www.sanko-shoko.net/note.php?id=js3z
http://www.paulbourke.net/geometry/polygonise/
pcl::MarchingCubesHoppe
具体的な説明が見つからず。結果がおかしいと訴える内容が検索によくヒットする(PCLの実装にバグが含まれていた時期があるのだと思います)。
pcl::MarchingCubesRBF
MarchingCubesHoppeとMarchingCubesRBFでは距離の取り方に違いがあるようです。詳細は省きます。
pcl::MovingLeastSquares
移動最小2乗法 (MLS)
pcl::OrganizedFastMesh
点群を2Dに一旦投影してその中での最近傍点を使って三角形を作る(のでしょうか?)
pcl::Poisson
pcl::TextureMapping
テクスチャーを貼るのだと思います。
雑感
mesh sarface reconstruction を調べてると http://hhoppe.com/ この人の名前が何回も出てくる。すごい。