点群局所構造から点群の法線ベクトル
接平面構造から抜き出して点群に法線ベクトルを設定して大きく前進してさっさと切り上げて買い物に出かけようと考えていたが完全にはまってしまった。問題の多発である。経緯を簡単に書くと。
点の近傍接平面から点の法線を決定すると陰関数でフィットできるばずである。
ボロボロである。原因は幾つかあったのだが、
・グリッドセルの境界付近で法線が決まらない。
・局所的に接平面を決めているので各場所で接平面がひっくり返るような所がある。
・点群間隔が広い場所ではサンプリング点が足りない。
ということでグリッドセルの隣接セル付近も検査して近傍で決定した接平面の向きと辻褄を合わせる事にした。その後に最後に点群の包含BOXの外部から見て外側を向くように接平面の向きを合わせる。
少しは良くなるがさらに隣接セル付近を広げて見るようにするとその影響が他に伝播してしまい改善される兆候はまったく無い。広げたためにまじめに決定されない法線は周囲の状態の平均的な法線となってしまい本来の法線とはかなり異なる方向に向いてしまっている。
結局このアルゴリズムではもう少し密な点群でないとうまく決められない。RBFはスカスカでも穴埋め効果があってうまくいく所に利点があるが。。。結局この効果を期待して適当な点群を間引きしすぎないようにしておく必要がある。そうなると最初に思った総当り検査を止めておいてよかったぁー。でどのくらいグリッド構造だけでも効果があったのか?
総当り検査では40秒、2x2x2グリッドにしただけでも 22秒、10x10x10では14秒 劇的では無いが効果はある。しかし
20x20x20グリッドでは16秒となる。検索セルが多くなることが原因だろう。本格的にやるにはやはりOctTreeとかkdTreeといったアルゴリズムが必要なのだろう。
さて、点群を間引くのを止めて再チャレンジである。
OpenGLには点にもシェーディングする機能というか光源の影響を反映した表示が出来ることをつい最近しったので試してみた。今回のは点と法線のセットを求めているのでこの機能で描画すれば適合性がさらによく見えるはずである。少し引いて見てみると
おぉーっ!!良い!!。点群だけでもモデルの形状が見えてくる。法線がそれなりに正しく求められていないとこうはならないはずだ。一気にフィッティングしてみると。
だいぶ良い感じだ。しかし何かイボのようなものが。。。。
パラメータを少し変えてみると。
どうやってもイボが。。。
明日はNormalMap画像を生成できるようにして法線の状態をチェックしてみる。
※これら計算結果は
WCCTL
によって得られたものです
2006年01月03日 23時58分57秒