例如,在使用OpenCV时,通常使用SURF等算法来检测关键点.我的问题是这些关键点究竟是什么?
我知道它们是图像中的某种"兴趣点".我也知道它们是尺度不变的并且是圆形的.
此外,我发现他们有方向但我无法理解这实际上是什么.这是一个角度,但在半径和东西之间?你能解释一下吗?我想我首先需要的是更简单的东西,然后更容易理解论文.
我使用了Andrea Vedaldi的SIFT实现来计算两个相似图像的筛选描述符(第二个图像实际上是从不同角度放大同一个对象的图片).
现在我无法弄清楚如何比较描述符以告诉图像有多相似?
我知道这个问题是不负责任的,除非你之前真的玩过这些东西,但我认为之前做过这个的人可能知道这个,所以我发布了这个问题.
我做的很少生成描述符:
>> i=imread('p1.jpg');
>> j=imread('p2.jpg');
>> i=rgb2gray(i);
>> j=rgb2gray(j);
>> [a, b]=sift(i); % a has the frames and b has the descriptors
>> [c, d]=sift(j);
Run Code Online (Sandbox Code Playgroud) matlab image-comparison pattern-matching computer-vision sift
我正在尝试一个简单的事情
detector = cv2.SIFT()
Run Code Online (Sandbox Code Playgroud)
并得到这个错误的错误
detector = cv2.SIFT()
AttributeError: 'module' object has no attribute 'SIFT'
Run Code Online (Sandbox Code Playgroud)
我不明白,因为安装了cv2.
cv2.__version__ 是
$Rev: 4557 $
Run Code Online (Sandbox Code Playgroud)
我的系统是Ubuntu 12.04.
也许某人有同样的问题,可以帮助我.
编辑:
长话短说,testypypypy.py:
import cv2
detector = cv2.SIFT()
Run Code Online (Sandbox Code Playgroud)
错误:
Traceback (most recent call last):
File "testypypy.py", line 3, in <module>
detector = cv2.SIFT()
AttributeError: 'module' object has no attribute 'SIFT
Run Code Online (Sandbox Code Playgroud)
如果我认为SURF它是有效的,因为SURF它在,dir(cv2)但如果我也采取cv2.BFMatcher()我得到相同的错误...所以它失踪了,我必须添加它,但我不知道如何.
我已经从OpenCV 2.4.9转移到3.0以利用drawMatches和drawMatchesKnn功能.我开始知道它没有像SIFT,SURF这样的非自由算法.所以我通过以下步骤从https://github.com/Itseez/opencv_contrib安装了opencv_contrib
cmake -DOPENCV_EXTRA_MODULES_PATH=/home/zealous/Downloads/opencv_contrib-master/modules /usr/local ..
make -j5
make install
Run Code Online (Sandbox Code Playgroud)
我还交叉检查了opencv的模块,xfeatures2d就在那里.然后,当我试图做
>>> import cv2
>>> help(cv2.xfeatures2d)
Run Code Online (Sandbox Code Playgroud)
它给了我以下错误
Traceback (most recent call last):
File "<pyshell#5>", line 1, in <module>
help(cv2.xfeatures2d)
AttributeError: 'module' object has no attribute 'xfeatures2d'
Run Code Online (Sandbox Code Playgroud)
我在这做错了什么.仅供参考,我使用的是OpenCV 3.0测试版.有没有为xfeatures2d打开 OpenCV的python包装器或者我没有正确安装它?
SURF声称比SIFT更快更强大,但我在测试中发现这不是真的.具有中等图像(600*400)的SIFT与SURF的速度相同,它可以很好地识别物体(甚至可能比SURF更好).
难道我做错了什么?
[编辑]
请注意,有一篇文章解释了如何通过对opencv代码进行一些更改来提高SURF的速度.
如果你认识一些活跃的opencv开发者,请让他看看.
假设我有一组 N 个图像,并且我已经计算了每个图像的 SIFT 描述符。我知道想计算不同特征之间的匹配。我听说一种常见的方法是 Lowe 比率测试,但我无法理解它是如何工作的。有人可以向我解释一下吗?
在python(2.7.x)opencv(2.4.9)中使用SIFT比较两个图像后,我一直试图找到一种生成相似度得分(%)的方法.我只能找到在比赛之间画线的例子.我该如何处理.
在询问这里并尝试SURF和SIFT之后,它们都没有足够高效地产生足够快的兴趣点来跟踪来自摄像机的流.
例如,SURF需要大约3秒的时间来生成图像的兴趣点,这对于跟踪来自网络摄像头的视频来说太慢了,而且在手机上使用它时情况会更糟.
我只需要一个跟踪某个区域,它的比例,倾斜等的算法.我可以在此基础上构建.
谢谢