1

我正在尝试从一组图像补丁创建一个密码本。我已将图像 (Caltech 101) 划分为 20 X 20 图像块。我想为每个补丁创建一个 SIFT 描述符。但是对于某些图像补丁,它不返回任何描述符/关键点。我尝试过使用 OpenCV 和 vlfeat。使用任何库的行为都是相同的。

以下是我使用 OpenCV 的代码 -

sift = cv2.SIFT()
img = cv2.imread('patch_temp.jpg',0)
imgptch = cv2.imread('image_patch.jpg',cv2.CV_LOAD_IMAGE_GRAYSCALE)
kp, des = sift.detectAndCompute(imgptch,None)
print des

des 是“无”。如果我使用 vlfeat,情况也是如此。注意:如果我使用不同的图像,以上工作。对于某些图像(10 个中的 6 个),它返回 None。

我已经使用 OpenCV 索引创建了图像补丁 -

patch = img[0:20,0:20]
cv2.imwrite('image_patch.jpg',img)
4

1 回答 1

3

该函数sift.detectAndCompute首先尝试检测 SIFT 关键点,然后在找到的位置计算描述符。

这不是您想要的:您希望每个补丁都有一个描述符。您可以先手工制作关键点位置(通过将它们的pt属性调整到补丁的中心并将它们的size属性调整到您的补丁大小)。然后,仅在这组位置上调用描述符提取器。

于 2014-11-24T08:32:47.253 回答