13

Opencv を使用して Python で FREAK Descriptor を実装しようとしていました。ここに私が使用しているコードがあります:

def surf_freak_detect(image,hessianThreshold):
    surfDetector = cv2.SURF(hessianThreshold)
    surfDetector=cv2.GridAdaptedFeatureDetector(surfDetector,50)
    keypoints = surfDetector.detect(image,None) 
    freakExtractor = cv2.DescriptorExtractor_create('FREAK')
    keypoints,descriptors= freakExtractor.compute(image,keypoints)
    del freakExtractor
    return keypoints,descriptors

これはFreak Descriptorを初期化する正しい方法ですか? 少しデバッグを行ったところ、インタプリタが記述子の計算に非常に長い時間がかかり、最終的にクラッシュすることがわかりました。キーポイントは適切に検出されます。奇妙なことに、動作することもあればクラッシュすることもあります。

4

2 に答える 2

10

キーポイントが適切に検出されても、ディスクリプタの生成時にプログラムがクラッシュする場合は、ディスクリプタ領域(キーポイントを囲む) が画像の外に出て、存在しない位置へのメモリ アクセスがあるためです。

フリーク記述子の動作領域を何らかの方法で制限する必要があります。

于 2013-12-17T10:47:11.310 に答える
7

OpenCV 3.0 には、FREAK 用の Python バインディングが用意されています。設定オプションについては、こちらで説明しています。Python で実際に呼び出す方法のドキュメントが不足しているようですが、次のように Python で使用できます。

freakExtractor = cv2.xfeatures2d.FREAK_create()
keypoints,descriptors= freakExtractor.compute(image,keypoints)

(上記のコードで行ったように、別の特徴検出器からキーポイントを取得する必要があります。)

于 2015-11-20T03:55:31.933 に答える