2014-11-24 70 views
0

我想从一组图像补丁中创建一个代码簿。我已将图像(Caltech 101)分成20 X 20个图像块。我想为每个补丁创建一个SIFT描述符。但对于一些图像补丁,它不会返回任何描述符/关键点。我曾尝试使用OpenCV和vlfeat。 使用任何库的行为都是相同的。空/无SIFT描述符和python中生成的关键点

以下是使用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 

德是 '无'。如果我使用vlfeat,情况也是如此。 注意:如果我使用不同的图像,上面的作品。它会为某些图像返回无(10个中的6个)。

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

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

回答

2

功能sift.detectAndCompute第一尝试检测SIFT关键点然后计算描述在发现位置。

这不是你想要的:你想要为每个补丁有一个描述符。 您可以先制作关键点位置(将其pt属性调整为您的修补程序的中心并将其size属性调整为您的修补程序大小)。然后,只调用这组位置上的描述符提取器。