标签: surf

OpenCV中的FeatureDetector与FeatureFinder

我试图理解FeatureDetector班级和FeatureFinder班级之间的区别.我已经看到在OpenCV中编写的全景示例使用这两个类,并且似乎可以将SURF算法与其中任何一个一起使用.据我所知,由于SURF算法可能出现问题而SURF FeatureDetector被移动/nonfree,但是,FeatureFinder也可以采用该SURF算法.

这两个班级有什么区别?

opencv surf feature-detection

7
推荐指数
1
解决办法
540
查看次数

使用opencv进行特征检测的正确方法

我的目标是在静态图像和视频中找到已知的徽标.我希望通过使用KAZE或AKAZE和RanSac进行特征检测来实现这一目标.

我的目标是:https://www.youtube.com/watchv = nzrqH ...

在尝试使用文档中检测示例时,我遇到了几个问题:

  • 对象分辨率:已知对象与对象应该位于的场景的分辨率之间的大小差异有时会破坏检测算法 - 尽管图像质量仍然可以正常,但在低分辨率的图像中将无法识别对象.人类的眼睛.
  • 与背景的颜色对比:看起来,检测很容易被不同的背景对比分散注意力(例如:对象是白色背景上的徽标黑色,黑色背景上的场景中的徽标是白色).如何针对不同的发光和背景对比使检测更加稳健?
  • 预处理:是否应该对对象/场景进行任何类型的预处理?例如,将场景放大到特定大小?是否有任何指导如何在几个步骤中进行特征检测以获得最佳结果?

opencv surf sift feature-detection

7
推荐指数
1
解决办法
670
查看次数

如何绘制(半)对数3d图?(Matlab的)

我知道二维图的semilogx和semilogy.SURF和MESH有任何等价物吗?

matlab plot mesh surf

6
推荐指数
2
解决办法
1万
查看次数

用于检测图像中特定特征的存在的好方法

我做了一个视频聊天,但像往常一样,很多男人都喜欢嗯,滥用服务(我把它留给你来判断这种滥用的性质),这不是我支持的任何方式,也不是大多数我的用户 不,我没有偷走chatroulette.com :-)坦率地说,我半尴尬地把它带到这里,但我的问题是技术性和相当具体的:

我想基于他们的视频内容过滤/拒绝用户,因为这个内容是犯罪人物,比如用户在相机上闪烁他的垃圾.什么样的图像比较算法适合我的需求?

我花了一周左右的时间阅读一些科学论文,并且已经了解了多种理论及其实现,例如SIFT,SURF和一些基于小波的方法.当然,这些中的每一个都具有缺点和优点.但由于我的图像比较的性质非常具体 - 如果在一系列位置的视频中遇到某个身体部位而拒绝服务 - 我想知道哪种方法最适合我?

目前,我倾向于以下内容(基于小波的加上我认为是一些专有创新):http: //grail.cs.washington.edu/projects/query/

通过上述内容,我可以简单地绘制违规的身体部位,并且期望违规内容被视为基于阈值的匹配.再说一次,我不确定这种方法对于转换是否是不变的,如果是这样的话,那么这篇文章是不是真的具体.

或者,我认为SURF实施可以做到,但我担心它可能会给我误报.是否可以对此类实施进行培训,以识别/赋予特定功能权重?

我知道这里有很多关于SURF和SIFT的问题,但是大多数都是通用的,因为它们通常解释了如何"比较"两个图像.我的比较是特定功能,而不是通用的.我需要一种方法,不仅可以比较两个相似的图像,而且可以为我提供一个特征的等级/索引/权重(但是该方法可以让我描述它,无论是图像本身还是其他东西)存在于图片.

image-comparison image-processing surf sift

6
推荐指数
1
解决办法
1042
查看次数

与SURF比较的奇怪结果

我正在尝试使用OpenCV和SURF方法实现交通标志识别器.我的问题是我得到随机结果(有时真的很准确,有时候显然是错误的)而且我不能解决这个问题.以下是我如何实施比较:

  • 首先,我检测到我的图像上的轮廓
  • 然后在每个轮廓上,我使用SURF来查明交通标志是否在里面以及哪个交通标志

轮廓检测效果非常好:使用高斯模糊和精确边缘,我设法找到类似于这个的轮廓:

在此输入图像描述

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

在此输入图像描述

在此输入图像描述

cvExtractSURF返回轮廓图像的189个描述符.然后我使用naiveNearestNeighbor方法找出我的轮廓图像和每个模板图像之间的相似性.

这是我的结果:

6/189为第一个模板(这是我期待找到的模板)

92/189用于第二个模板(在各个方面与轮廓图像明显不同)

我真的不明白这些结果......

以下是我执行的步骤列表:

  • 以灰度转动轮廓图像
  • 以灰度转动模板图像
  • 均衡轮廓图像的直方图(cvEqualizeHist)
  • 调整模板图像的大小以使其与轮廓图像匹配
  • 模糊模板图像(cvSmooth)
  • 模糊轮廓图像(cvSmooth)
  • 在模板图像上执行cvExtractSURF
  • 在轮廓图像上执行cvExtractSURF
  • 对于轮廓图像的每个描述符,我做一个naiveNearestNeighbor
  • 我存储了"好"点的数量

为了评估两个图像之间的相似性,我使用比率:

goog点数/描述符总数

PS:有关我遵循本教程的信息:http://www.emgu.com/wiki/index.php/Traffic_Sign_Detection_in_CSharp

并使用OpenCV的find_obj示例在C中进行调整.

opencv surf

6
推荐指数
1
解决办法
2527
查看次数

将一个图像中的SURF描述符与其他图像中的描述符列表进行比较

我想比较一个图像(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树,但这对匹配图像有效吗?

最好的问候莫滕

c# opencv kdtree computer-vision surf

6
推荐指数
1
解决办法
3401
查看次数

彩色SURF探测器

SURF默认适用于灰色图像.我想在HSV图像上做SURF.我的方法是将通道分成H,S和V.我使用S和V进行关键点检测.我试图比较SV与RGB中关键点的数量,并且在通道方面,HSV提供了更多功能.

在此输入图像描述

不确定我在做什么是正确的.需要一些解释在HSV图像上应用SURF的可能性.我读过一篇关于在不同颜色空间而不是SURF上应用SIFT的论文.

  1. 有没有更好的方法来实现这一目标?
  2. 我们可以将SURF应用于彩色,HSV空间吗?

感谢您的时间.

opencv surf

6
推荐指数
1
解决办法
4725
查看次数

如何在 OpenCV for Python 中使用 surf 和 sift 检测器

我正在尝试使用函数 SURF() 进行特征匹配的代码。执行时它会给出一个错误,说“AttributeError:'module' object has no attribute 'SURF'”。

如何为 Python (Windows) 下载此模块并修复此错误?

python opencv surf

6
推荐指数
1
解决办法
9437
查看次数

在图片上检测多个对象

我写了一个小脚本,可以在全局图片中找到一个对象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:

在此输入图像描述

python opencv computer-vision surf sift

6
推荐指数
1
解决办法
972
查看次数

Python-以原始颜色显示图像

在回答这个问题时,我想以原始颜色显示图像,因此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上面的原因是图像在原始代码中的读取方式如下: …

python matplotlib surf

6
推荐指数
1
解决办法
8706
查看次数