OpenCV FAST算法-特征点过多

4
我正在尝试提取特征以便随后训练一个SVM,这将用于Android应用程序。我使用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)

原始图片:

enter image description here

处理后的图片:

enter image description here

我的目标是检测方向盘。


关键点具有“response”成员。您可以尝试过滤掉最弱的关键点。 - berak
谢谢你的帮助。我会看看的(希望能有更好的结果)。 - dephinera
仍然记得,整个关键点/特征检测的过程将找到确切的模型。(您可能无法以这种方式检测任意车轮。) - berak
那就是为什么我要训练一个SVM,而且我也不会只使用这张图片。 - dephinera
方向盘的特点并不像它们的整体轮廓那样突出。 - user334911
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. 现在,如果存在一组n个相邻的像素点,它们在16像素圆圈内均比I_p+t亮或比I_p-t暗,则像素点p为角点。(在上述图片中以白色虚线表示)。n的值被选为12。

你在Python中没有相同的构造函数吗? - JonasVautherin
1
我正在尝试查找文档,但出于某种原因我无法找到。 - dephinera
你试过使用 fast = cv2.FastFeatureDetector(40) 吗? - JonasVautherin
哦,我忘记了,真的很抱歉。是的,它起作用了。非常感谢!你能把你评论中的Python代码行添加到你的答案中吗?然后我会将其标记为已接受。 - dephinera

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接