4

Androidアプリで使用されるSVMを後でトレーニングできるように、機能を抽出しようとしています。記述が簡単で時間を節約できるため、機能を見つけて抽出するために python を使用しています。私の問題は、機能が多すぎて、最良の機能だけを取得する方法がわからないことです。OpenCVのC++ APIにretainBestというメソッドがあるのを見つけたのですが、pythonでは見つけられませんでした。どうすればよいかアドバイスいただけますか?

これは私が使用するコードです:

import numpy as np
import cv2
from matplotlib import pyplot as plt

img = cv2.imread('./positive_images/1.jpg',cv2.CV_LOAD_IMAGE_GRAYSCALE)
#img = cv2.resize(cv2.imread('./positive_images/3.png',cv2.CV_LOAD_IMAGE_GRAYSCALE), (100, 100))
#th3 = cv2.adaptiveThreshold(img,255,cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY,11,2)
ret,th3 = cv2.threshold(img,127,255,cv2.THRESH_TOZERO_INV)
cv2.imwrite("result1.jpg", th3)

img = th3

# Initiate FAST object with default values
fast = cv2.FastFeatureDetector()

# find and draw the keypoints
keypoints = fast.detect(img,None)
img2 = cv2.drawKeypoints(img, keypoints, color=(255,0,0))

cv2.imwrite('fast_true.png',img2)

# Disable nonmaxSuppression
fast.setBool('nonmaxSuppression',0)
keypoints = fast.detect(img,None)

print "Total Keypoints without nonmaxSuppression: ", len(keypoints)

img3 = cv2.drawKeypoints(img, keypoints, color=(255,0,0))
cv2.imwrite("result.jpg",img3)

元の画像:

ここに画像の説明を入力

そして結果の画像:

ここに画像の説明を入力

私の目標は、ハンドルを検出することです。

4

1 に答える 1

4

ドキュメントを見ると、FAST 検出器のしきい値を設定できることがわかります。

FastFeatureDetector( int threshold=1, bool nonmaxSuppression=true, type=FastFeatureDetector::TYPE_9_16 );

ここでは、デフォルトthresholdは 1 に設定されています。コードで、次のように 40 に設定して結果を確認してください。

fast = cv2.FastFeatureDetector(40)

しきい値の意味の詳細については、次を参照してください

  1. 関心点として識別される画像内のピクセル p を選択します。その強度を I_p とする
  2. ...
  3. ...
  4. ピクセル p は、(16 ピクセルの) 円内にすべて I_p + t より明るい、またはすべて I_p − t より暗い n 個の連続するピクセルのセットが存在する場合、コーナーです。(上の画像では白い破線で示されています)。n は 12 が選択されました。
于 2014-12-27T18:36:53.867 に答える