2016年10月15日

RANSACのテスト

論文などでよく見るRANSACですが、試してなかったので試してみました。RANSACについては[1]を参考にさせていただきました。アルゴリズム的には簡単ですね。モデルも自由に変更できますし。今回は2次曲線の方程式を使ってみます。

equation_001.png

テスト画像は下記のものです。ペイントで適当に書きました。楕円で近似できればいいなといった図形です。

circle_test.png

白画素を点群として、2次曲線で近似します。未知数が6個ですので、6点以上使って特異値分解します。この辺のやり方は過去記事を参考にしました。全ての点群を使って特異値分解した場合には、左上の円に引っ張られて誤差の大きな近似曲線になります。

use_all_points.png

今回はRANSACで6点使って特異値分解で近似して、点群との距離?が閾値以下の点の数が最も多いパラメータを選んでみました。本当は点と曲線の距離を計算しないといけないのですが、近似したパラメータに点の座標を代入して、0に近いかどうかで判定したので正確ではありません。

実行結果

use_ransac_001.png

赤が全画素に対して行った閾値以下の点の領域で、緑が点群の中で閾値以下のものです。適当に描いた絵なのできれいにとはいきませんが、2次曲線で大きい方の楕円が近似できています。切り出しを行いたい場合は、範囲内の点で再度パラメータを計算して、閾値以下の点を取り除いて、残った点でまたRANSACということを行えば、2つの2次曲線を取り出せるみたいですが、今回はそこまでは試していません。

本当は3次元でKinectなどで取得した点群から球や平面を抽出したりといったことをしようと思っていたのですが、その辺はまた今度試してみたいと思います。まぁPCLなどで実装されているので、自分でやる意味はあまりないのですが。

[1] 【お勉強してみた】RANSACのおはなし - Qiita
web拍手 by FC2
posted by シンドラー at 18:18 | Comment(0) | TrackBack(0) | Image Processing | このブログの読者になる | 更新情報をチェックする