たるこすの日記

たるこすの日記

リアルからバーチャルへ、バーチャルからリアルへ

MeshLab で Kinect v2 の点群データからテクスチャ付きメッシュを作成する

こんにちは、たるこすです。今回は MeshLab というアプリケーションを使って、点群(Point Cloud)データからテクスチャ付きメッシュを生成します。

MeshLab は以下のサイトから無料でダウンロードできます。

http://www.meshlab.net/

MeshLab での操作は以下の記事を参考にさせていただきました。

事前準備:点群データの用意

まずは元となる点群データが必要です。

今回は Kinect v2 で取得したデータを以下のような RGBXYZ のデータを並べた形式(拡張子は .txt)で保存しました。

40.3245 908.931 2242 168 156 129 
46.3256 907.308 2238 166 156 129 
52.3284 906.09 2235 167 157 130 
58.3671 905.683 2234 164 154 129 
...

コードは以下のものを元にして、データ保存部分を付け加えました。

Drawing the Point Cloud retrieved from Kinect v2 using Point Cloud Library without Grabber · GitHub

今調べると、以下のようなリポジトリもあったので、こちらを利用したほうが良いかと思います。

点群データのインポート

MeshLab を立ち上げ、プロジェクトに名前をつけて保存します。

File > Import Mesh を選択し、点群データをインポートします。

インポートすると以下のように点群が表示されます。

法線の計算

Filters > Point Set > Compute normals for point sets
を選択し、各点について法線方向の計算を行います。

表示されるダイアログの「Apply」ボタンを押し、処理が終わったら「Close」でダイアログを閉じます。

点群のダウンサンプリング

元の点群データは点の密度が高いので、メッシュ化の負荷削減のためにダウンサンプリングを行います。

Filters > Sampling > Clustered Vertex Subsampling
を選択します。

Cell Size を変更することでダウンサンプリングの粗さを調整できます。左側の world unit の値を調整するのが良いかと思います。今回は world unit を 30 に変更します。先ほどと同様、「Apply」ボタンを押して処理が終わったら「Close」でダイアログを閉じます。

右側にある目のマークをクリックすることで、各データの表示非表示を切り替えられます。一番上の元の点群データを非表示にすると、ダウンサンプリングされた点が分かりやすくなります。

メッシュの作成

右側のパネルでダウンサンプルされた点群を選択した状態で、
Filters > Remeshing, Simplification and Reconstruction > Surface reconstruction: Ball Pivotting
を選択します。

「Pivotting Ball raduis」を変更すると、メッシュの貼られ方が多少変わります。今回は、デフォルトのパラメータのままだとメッシュにいくつか穴が開いてしまったので、「Pivotting Ball raduis」の world unit を 30 にして「Apply」を押して処理を行った後、world unit を 100 に変更して「Apply」を押し再度処理を行うと、メッシュに空く穴がかなり少なくなりました。

頂点数、面数の削減

作成されたメッシュの頂点数、面数を減らすには、
Filters > Remeshing, Simplification and Reconstruction > Simplification: Quadric Edge Collapse Decimation
を選択します。

「Target number of faces」で面数、または、「Percentage reduction」で割合を指定することで、どの程度メッシュを削減するかを変更します。今回は「Percentage reduction」に 0.3 を指定しました。

テクスチャの作成

Filters > Texture > Parametrization: Trivial Per-Triangle
を選択します。

ダイアログの「Apply」ボタンを押し、処理が終わったら「Close」でダイアログを閉じます。

次の操作を行うために、メッシュを保存しておく必要があります。File > Export Mesh を選択するとダイアログが表示されるので、左下の方の「All」をクリックし、チェックボックスにすべてチェックを入れた状態で「OK」を押します。

次に、
Filters > Texture > Vertex Attributes to Texture (1 or 2 meshes)
を選択します。

Source Mesh は元の点群、Target Mesh は作成したメッシュを選択します。Assign Texture にチェックを入れ、「Apply」を押して処理を行います。

処理が終わると、以下のようにテクスチャ付きのメッシュができあがります。

Textured mesh created with MeshLab