続:MeshLabによる、3次元測定データの穴埋め
昨日に、MeshLabを用いた3次元測定データの穴埋めについて紹介しました。
すると、データを測定した学生が、元の研究論文にとても興味を持って理解したいけど、内容が難しい・・というメールをくれました。
結果にとても驚いて、どのように実現しているかを知りたい、ということのようです。
形状処理の研究に興味を持ってもらえることは、とても嬉しいことで、次のような回答を送りました。
いろいろ書いていたら長文になりました。
せっかくなので、同様に興味を持たれた方もいるかと思い、ここで紹介します(一部あとから加筆修正)。
論文を読むのはとても難しいことです。
特に、優れた成果を出している論文の場合は、その成果が突然でてきたわけではなくて、
過去の成果からの改善の積み重ねであることが多いので、いきなりそこから読み始めても理解できません。
参考文献を地道にさかのぼって、古いものから順番に読んでいかなければなりません。
たとえば、今回の論文
Michael Kazhdan, Matthew Bolitho, Hugues Hoppe. Poisson surface reconstruction, Symposium on Geometry Processing 2006, 61-70.
は、次の論文の方法と似ていると書かれています。
この論文の中では、形状復元の手法は主に3つのカテゴリに分かれると書かれて
います。キーワードは次の通りです。
・Delaunay triangulation
・Surface fitting
・Implicit function
そして、提案手法は3番目のImplicit functionをベースにしていると書かれています。
これらに分類される過去の手法として、次の論文が紹介されています。
これは1992年の論文です。
そして、著者は最初の論文に登場する Hugues Hoppe です。彼はCGの分野でとても有名な人です。
つまり、1992年から2006年までの14年の時を経て、今回紹介したような論文の成果が得られたわけです。
さらに、2013年にも最新の成果が報告されていて、実に20年以上が経った現在でも進行中のテーマであることがわかります。
簡単に理解するのは難しそうですね。
一応、概念だけ説明を試みますと、Implicit function ベースの形状復元は次のように行います。
3次元空間の座標をxで表します。
これを入力として、スカラー値を出力する関数f(x)を考えます。
この関数は、立体の内部では1を、外部では0という値をとるものとします。
値が滑らかに変化するとした場合、ちょうど値が0.5になるような場所を探し出すと、それが立体の表面ということになります。
このような関数f(x)を見つけよう。というのが、Implicit function ベースの形状復元の考え方です。一般に、立体の表面全体を一つの関数f(x)で表現することは無理なので、いくつかの階層に分けて、ラフな近似からより、細かい高精度の復元までを行います。
直接は関係しませんが、次のページの図を見ると、なんとなく直観的にわかると思います。
http://isg.cs.tcd.ie/spheretree/
Poisson 方程式は、電磁気学の世界で登場する方程式で、ある領域の内部の2階微分の関数および境界の条件を表したもので、これによって3次元空間の各座標の
値を決定することができます。
今回の論文の手法では、測定点群に定められた法線方向を立体の境界付近での値の変化の様子(勾配)と定めることで、境界の条件を設定します。
長くなりましたが、実験を通して、CG分野のことに興味を持ってもらえるのは、私にとって嬉しいことです。