Categories: open3d

Open3Dでポリゴンの枚数を減らして簡単に3Dデータ圧縮を実現(Open3DとPythonによる実装)

3Dデータ処理ができる手軽なライブラリとして、Open3Dがあります。

本日はこのOpen3Dを用いて、3Dメッシュ(ポリゴン)を読み込み、その枚数を減らすプログラムを紹介します。

Open3Dを用いることで、容易にポリゴンの枚数を減らすことができます。

もちろん形状は粗くなってしまいますが、枚数を減らすことでデータサイズの削減や、その後の処理を軽量に実施することができます。

Open3Dの環境構築に関しては、以下の環境構築に関する記事をご覧ください。

今回は3Dデータ処理のためにOpen3Dの環境構築をしてみたいと思います。 このOpen3DはIntel Labsから2018年に論...

PLYファイルの入手

PLYファイルは3D点群データや3Dメッシュを保存するための汎用フォーマットで、広く用いられています。

PLYファイルで保存された3Dメッシュはさまざまなサイトで公開されていますが、今回は以下のサイトで公開されているスタンフォードバニーのPLYファイルを読み込み、実験を行いました。

外部サイト:3D Models

ポリゴンリダクションプログラム(Open3DとPythonによる実装)

実行環境

  • OS:Windows 10
  • Python 3.9
  • Open3D ver. 0.15.1

ソースコード

コードの解説

メッシュデータの読込

メッシュの読み込みに必要なのは以下の箇所で、「io.read_triangle_mesh」を用いて読み込みたいメッシュデータのパスを指定することで読み込みが可能です。

メッシュの法線の計算

メッシュの表示を行う際に、法線ベクトルがないと陰影が付かず、表示結果が綺麗になりません。そこで、以下の箇所でメッシュの法線を計算しています。

ポリゴンリダクション

以下の箇所でポリゴンの数を減らします。

Open3Dには、ポリゴンリダクションを実現できる関数として「simplify_quadric_decimation関数」が標準で実装されています。

引数として、リダクション後のポリゴンの枚数を指定することができます。上記のプログラムでは「10000」を設定しているため、リダクション後のポリゴンの枚数が10000枚になります。

メッシュの表示

最後に以下の箇所でメッシュデータを表示します。今回はリダクションを行わないもの、行ったものの計2回ウィンドウを表示するようにしています。

実行結果

「target_number_of_triangles」を変更して、いくつかリダクション結果を出力してみました。さすがに100ポリゴンまで減らすと原型を留めていないですが、まずまず上手く枚数を減らせているように見えます。

リダクション無し(69451ポリゴン)

ポリゴンリダクション結果(target_number_of_triangles=10000ポリゴン)

ポリゴンリダクション結果(target_number_of_triangles=1000ポリゴン)

ポリゴンリダクション結果(target_number_of_triangles=100ポリゴン)

まとめ

Open3Dでポリゴンの枚数を減らす方法を紹介しました。

アプリケーションの要求に対して、ポリゴンの枚数が多すぎる場合などには、リダクションでデータを減らすことが有効です。

Haruoka

Share
Published by
Haruoka