我正在尝试从一组图像补丁中创建一个密码本。我已将图像(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,情况也是如此。
注意:如果我使用其他图像,以上方法适用。对于某些图像,它返回None(10张中的6张)。
我已经使用OpenCV索引创建了图像补丁-
patch = img[0:20,0:20]
cv2.imwrite('image_patch.jpg',img)
最佳答案
函数sift.detectAndCompute
将首先尝试检测SIFT关键点,然后在找到的位置计算描述符。
这不是您想要的:您希望每个补丁都有一个描述符。
您可以首先手工制作关键点位置(通过将其pt
属性调整到补丁的中心,并将其size
属性调整到补丁的大小)。
然后,仅在这组位置上调用描述符提取器。
关于python - 空/无SIFT描述符和在python中生成的关键点,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27099760/