我试图理解FeatureDetector班级和FeatureFinder班级之间的区别.我已经看到在OpenCV中编写的全景示例使用这两个类,并且似乎可以将SURF算法与其中任何一个一起使用.据我所知,由于SURF算法可能出现问题而SURF FeatureDetector被移动/nonfree,但是,FeatureFinder也可以采用该SURF算法.
这两个班级有什么区别?
我的目标是在静态图像和视频中找到已知的徽标.我希望通过使用KAZE或AKAZE和RanSac进行特征检测来实现这一目标.
我的目标是:https://www.youtube.com/watch?v = nzrqH ...
我知道二维图的semilogx和semilogy.SURF和MESH有任何等价物吗?
我做了一个视频聊天,但像往常一样,很多男人都喜欢嗯,滥用服务(我把它留给你来判断这种滥用的性质),这不是我支持的任何方式,也不是大多数我的用户 不,我没有偷走chatroulette.com :-)坦率地说,我半尴尬地把它带到这里,但我的问题是技术性和相当具体的:
我想基于他们的视频内容过滤/拒绝用户,因为这个内容是犯罪人物,比如用户在相机上闪烁他的垃圾.什么样的图像比较算法适合我的需求?
我花了一周左右的时间阅读一些科学论文,并且已经了解了多种理论及其实现,例如SIFT,SURF和一些基于小波的方法.当然,这些中的每一个都具有缺点和优点.但由于我的图像比较的性质非常具体 - 如果在一系列位置的视频中遇到某个身体部位而拒绝服务 - 我想知道哪种方法最适合我?
目前,我倾向于以下内容(基于小波的加上我认为是一些专有创新):http: //grail.cs.washington.edu/projects/query/
通过上述内容,我可以简单地绘制违规的身体部位,并且期望违规内容被视为基于阈值的匹配.再说一次,我不确定这种方法对于转换是否是不变的,如果是这样的话,那么这篇文章是不是真的具体.
或者,我认为SURF实施可以做到,但我担心它可能会给我误报.是否可以对此类实施进行培训,以识别/赋予特定功能权重?
我知道这里有很多关于SURF和SIFT的问题,但是大多数都是通用的,因为它们通常解释了如何"比较"两个图像.我的比较是特定功能,而不是通用的.我需要一种方法,不仅可以比较两个相似的图像,而且可以为我提供一个特征的等级/索引/权重(但是该方法可以让我描述它,无论是图像本身还是其他东西)存在于图片.
我正在尝试使用OpenCV和SURF方法实现交通标志识别器.我的问题是我得到随机结果(有时真的很准确,有时候显然是错误的)而且我不能解决这个问题.以下是我如何实施比较:
轮廓检测效果非常好:使用高斯模糊和精确边缘,我设法找到类似于这个的轮廓:

然后我提取对应于此轮廓的图像,并将此图像与交通标志模板图像进行比较,例如:


cvExtractSURF返回轮廓图像的189个描述符.然后我使用naiveNearestNeighbor方法找出我的轮廓图像和每个模板图像之间的相似性.
这是我的结果:
6/189为第一个模板(这是我期待找到的模板)
92/189用于第二个模板(在各个方面与轮廓图像明显不同)
我真的不明白这些结果......
以下是我执行的步骤列表:
为了评估两个图像之间的相似性,我使用比率:
goog点数/描述符总数
PS:有关我遵循本教程的信息:http://www.emgu.com/wiki/index.php/Traffic_Sign_Detection_in_CSharp
并使用OpenCV的find_obj示例在C中进行调整.
我想比较一个图像(A)中的SURF描述符和几个其他图像(B,C,D,..)中的描述符,以找到与A最相似的图像.描述符有64个维度.
使用C#和Emgu,匹配是通过将A的描述符与B,然后是C,然后是D'等进行比较来完成的.当图像数超过10时,这非常慢,因为必须搜索许多不相关的描述符.
为了加快这个过程,正确的方法(根据文章)似乎是为(B,C,D,..)中的描述符构建一个kd树,以快速匹配在A中找到描述符.kd -tree根据级别进行尺寸分割.第一次分割由第一维度决定,第二次分割由第二维度等决定.但是,对于描述符(64),在维度数量高的情况下,使用KD树的好处变小.
所以我的问题是:使用KD树/其他方法将SURF描述符从一个图像(A)与几个图像(B,C,D ......)匹配时,您有什么经验或知识.什么运作良好,不太好,你做过这样的事情吗?
FLANN将是一个选项,因为OpenCV使用它,但我找不到C#的版本.近似最近的Neightboor也可以选择加速kd树,但这对匹配图像有效吗?
最好的问候莫滕
SURF默认适用于灰色图像.我想在HSV图像上做SURF.我的方法是将通道分成H,S和V.我使用S和V进行关键点检测.我试图比较SV与RGB中关键点的数量,并且在通道方面,HSV提供了更多功能.

不确定我在做什么是正确的.需要一些解释在HSV图像上应用SURF的可能性.我读过一篇关于在不同颜色空间而不是SURF上应用SIFT的论文.
感谢您的时间.
我正在尝试使用函数 SURF() 进行特征匹配的代码。执行时它会给出一个错误,说“AttributeError:'module' object has no attribute 'SURF'”。
如何为 Python (Windows) 下载此模块并修复此错误?
我写了一个小脚本,可以在全局图片中找到一个对象SIFT descriptors method.但我对同一张照片中的多个检测有疑问.
我有这张全球图片:
我有这个模板:
我的脚本看起来像:
import numpy as np
import cv2
#########################
# SIFT descriptors part #
#########################
img1 = cv2.imread('/Users/valentinjungbluth/Desktop/SIFT:SURF Algo/lampe.jpg',0)
img2 = cv2.imread('/Users/valentinjungbluth/Desktop/SIFT:SURF Algo/ville.jpg',0)
# Initiate SIFT detector
sift = cv2.xfeatures2d.SIFT_create()
print (img1.dtype)
print (img2.dtype)
kp1, des1 = sift.detectAndCompute(img1,None)
kp2, des2 = sift.detectAndCompute(img2,None)
bf = cv2.BFMatcher()
matches = bf.knnMatch(des1,des2,k=2)
good = []
for m,n in matches :
if m.distance < 0.2*n.distance :
good.append([m])
img3 = cv2.drawMatchesKnn(img1,kp1,img2,kp2,good,None,flags=2)
cv2.imwrite('matches.jpg',img3)
Run Code Online (Sandbox Code Playgroud)
结果是:
我的问题是:
我怎么能发现这个其他的灯?因为所有灯都非常相似,我想与图片中的所有灯匹配.
非常感谢 !
编辑与Micka的回答:
0.2比例距离没有出现,但如果我放0.75:
在回答这个问题时,我想以原始颜色显示图像,因此gray从这行代码中删除了参数:
plt.imshow(im_out, 'gray')
Run Code Online (Sandbox Code Playgroud)
然而,当这样做时,我得到的图像显示为黄色和紫色,而不是图像的原始颜色。
我该怎么做才能以原始颜色显示图像?
谢谢。
编辑 1我遇到了这个教程,似乎我应该使用:
plt.imshow(cv2.cvtColor(im_out, cv2.COLOR_BGR2RGB))
Run Code Online (Sandbox Code Playgroud)
然而,当我这样做时,我得到了以下结果:
Calculated scale difference: 0.99
Calculated rotation difference: 44.51
OpenCV Error: Assertion failed (scn == 3 || scn == 4) in cvtColor, file /home/user/opencv/modules/imgproc/src/color.cpp, line 10606
Traceback (most recent call last):
File "align_surf.py", line 47, in <module>
deskew()
File "align_surf.py", line 9, in deskew
plt.imshow(cv2.cvtColor(im_out, cv2.COLOR_BGR2RGB))
cv2.error: /home/user/opencv/modules/imgproc/src/color.cpp:10606: error: (-215) scn == 3 || scn == 4 in function cvtColor
Run Code Online (Sandbox Code Playgroud)
我该如何解决这个问题?
编辑2上面的原因是图像在原始代码中的读取方式如下: …