0

OpenCVの学習を始めようとしています。私の理解では、ExtractSURFは0から360の間の角度を返す必要があります。何らかの理由で、キーポイントは常に90の方向を返します。なぜ何かアイデアはありますか?

このコード:

import cv
image = cv.LoadImageM('lena.bmp', cv.CV_LOAD_IMAGE_GRAYSCALE)
(keypoints, descriptors) = cv.ExtractSURF(image, None, cv.CreateMemStorage(), (0, 6000, 1, 3))
for keypoint in keypoints:
    ((x, y), laplacian, size, dir, hessian) = keypoint
    print "x=%d y=%d laplacian=%d size=%f dir=%f hessian=%f" % (x, y, laplacian, size, dir, hessian)

戻り値

x=345 y=201 laplacian=1 size=22.000000 dir=90.000000 hessian=6674.604492
x=82 y=270 laplacian=-1 size=18.000000 dir=90.000000 hessian=7615.113770
x=90 y=278 laplacian=-1 size=15.000000 dir=90.000000 hessian=12525.487305
x=112 y=254 laplacian=1 size=22.000000 dir=90.000000 hessian=8894.154297
x=273 y=274 laplacian=-1 size=24.000000 dir=90.000000 hessian=16313.005859
x=154 y=319 laplacian=-1 size=15.000000 dir=90.000000 hessian=9818.360352
x=172 y=333 laplacian=-1 size=26.000000 dir=90.000000 hessian=8314.745117
x=137 y=386 laplacian=-1 size=15.000000 dir=90.000000 hessian=9148.833984
x=140 y=363 laplacian=-1 size=22.000000 dir=90.000000 hessian=7735.985840
4

1 に答える 1

1

_upright角度を計算するかどうかをOpenCVに指示するパラメーターがありません。したがって、OpenCVは、指定しない場合は90度を返すことを決定したと思います。cv古いインターフェースで指定する方法があるかどうか思い出せません。ただし、新しいcv2インターフェイスでは、非常に簡単です。

import cv2

必要なSURFパラメーターを指定します。

surf_params = {"_hessianThreshold":1000,
 "_nOctaves":4, 
"_nOctaveLayers":2, 
"_extended":1, 
"_upright":0}

uprightasを渡すと、1常に。の角度が返されることに注意してください90

SURFオブジェクトを作成し、画像を読み取ります。

surf = cv2.SURF(**surf_params)
image = cv2.imread('img.jpg', cv2.CV_LOAD_IMAGE_GRAYSCALE)
(keypoints, descriptors) = surf.detect(image, mask=None, useProvidedKeypoints=False)

for keypoint in keypoints:
    x,y = keypoint.pt
    size = keypoint.size 
    orientation = keypoint.angle
    response = keypoint.response 
    octave = keypoint.octave
    class_id = keypoint.class_id
    print (x,y), size, orientation

これが(x、y)、サイズ、向きに対して返すものの例:(私は別の画像を使用しています)

(523.3077392578125, 933.419189453125) 156.0 199.023590088
(1417.82470703125, 957.7914428710938) 166.0 127.772354126
(1398.8065185546875, 971.0693359375) 165.0 126.83026123
(1009.0242309570312, 1032.0604248046875) 176.0 164.367050171

以上です。cv2これが、私が常に新しいインターフェースに切り替えるようにアドバイスする多くの理由の1つです。切り替えてから、パラメータの欠落などに対処する必要がなくなりました。

これがお役に立てば幸いです。

于 2012-11-12T17:50:43.053 に答える