OpenCV 有非常好的文档可以生成SIFT描述符, 但这是一个“弱SIFT”版本,该版本使用原始Lowe算法检测关键点。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中有两种方法可以实现这一点:
- 我可以自己将图像划分为网格,然后以某种方式将这些补丁转换为关键点
- 我可以使用基于网格的特征检测器
我的问题是OpenCV文档的其余部分,特别是Python方面,非常缺乏,因此我不知道如何实现这两个事情。我在C++文档中看到了基于网格的关键点检测器,但我不知道如何从Python中使用它们。
另一种选择是切换到VLFeat,它有一个非常好的DSift / PHOW实现,但意味着我必须从python切换到matlab。
有什么想法吗?谢谢。