サイバーワールド・メモランダム

電脳世界でのあれこれを備忘録として綴ります。

pythonでのSURF利用方法

2012-06-13 16:55:27 | OpenCV
pythonでOpenCV2.3を動かしているとき、
局所特徴量抽出手法の一つであるSURFを用いる場合、
以前の関数呼び出し方法ではうまくいかないことがある。

OpenCVのpython版リファレンスマニュアルでは

kp, desc = cv.ExtractSURF(cv_im, None, cv.CreateMemStorage(), params)

のように書いている。これでもkeypointsの座標とscaleはうまく検出されるが、
angleがすべて90度になってしまう。

surf = cv2.SURF(params)
kp, desc = surf.detect(cv_im, None, False)

と書くと、angleもうまく検出される。
ちなみに、kp: keypoints desc: descriptors, cv_im: image(grayscale)
kp.ptで座標値、kp.sizeやkp.angleでサイズと角度を得ることができる。
これらはKeyPoint構造体の記述を参照。
descriptorsは(keypoint size x descriptor size, 1)のarrayになっているので、
desc.shape=(-1, surf.descriptorSize())とすることで、
(keypoint size, descriptor size)のarrayに変更することができる。
desc.reshape(len(kp), surf.descriptorSize())を用いてもよい。

これらはpythonのsample code "find_obj.py"およびC++のリファレンスマニュアルを
読むとわかる。
早くpython版のマニュアルが更改されればいいんですよね…


コメントを投稿

ブログ作成者から承認されるまでコメントは反映されません。