【发布时间】:2013-11-22 13:55:01
【问题描述】:
OpenCV 有very good documentation on generating SIFT descriptors,但这是“弱 SIFT”的一个版本,其中的关键点由原始的Lowe algorithm 检测。 OpenCV 示例如下所示:
img = cv2.imread('home.jpg')
gray= cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
sift = cv2.SIFT()
kp = sift.detect(gray,None)
kp,des = sift.compute(gray,kp)
我正在寻找的是强/密集 SIFT,它不会检测关键点,而是计算一组补丁(例如 16x16 像素,8 像素填充)的 SIFT 描述符,将图像覆盖为网格。据我了解,在 OpenCV 中有两种方法可以做到这一点:
- 我可以自己将图像划分为网格,然后以某种方式将这些补丁转换为关键点
- 我可以使用基于网格的特征检测器
换句话说,我必须将sift.detect() 行替换为能够提供所需关键点的内容。
我的问题是 OpenCV 文档的其余部分,尤其是 wrt Python,严重缺乏,所以我不知道如何实现这些东西。我在 C++ 文档中看到网格有关键点检测器,但我不知道如何在 Python 中使用它们。
另一种方法是切换到 VLFeat,它具有非常好的 DSift/PHOW 实现,但意味着我必须从 python 切换到 matlab。
有什么想法吗?谢谢。
【问题讨论】:
-
OpenCV 的最新版本(或者至少是它的 Python 绑定)似乎不再支持 .detect 和 .compute...相反,您必须使用 .detectAndCompute,这意味着它不再支持可以生成自己的关键点。
-
opencv3 不是这样