Как создать базу данных дескрипторов SIFT [с Python]?
Как мне создать базу данных дескрипторов SIFT (изображений)? Я использую OpenCV в Pyhton 2.7, и я намерен внедрить обучающий набор под наблюдением на машине опорных векторов.
Вот мой код для 1 изображения
import cv2
import numpy as np
img = cv2.imread('C:\Python27\.Clocktower1.jpg')
gray= cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
sift = cv2.SIFT()
kp = sift.detect(gray,None)
img=cv2.drawKeypoints(gray,kp)
cv2.imwrite('sift_keypoints.jpg',img)
kp, des = sift.detectAndCompute(gray,None)
cv2.imshow('image',img)
k = cv2.waitKey(0)
if k == 27:
cv2.destroyAllWindows()
elif k == ord('s'):
cv2.destroyAllWindows()
a = np.arange(127*127).reshape(127, 127)
np.set_printoptions(edgeitems=127)
f = open('file.txt','w')
f.write('answer:'+str(des))
f.close()
У меня возникли проблемы с сохранением матрицы des, которая содержит векторы kypoint, и я до сих пор не знаю функции, позволяющей автоматизировать алгоритм для получения более 1 изображения за цикл.
Благодарю вас
Редактировать:
вывод в виде:
answer:[[ 5. 1. 0. 7. 14. 1. 3. 8. 2. 1. 0. 0.
0. 3. 12. 8. 0. 7. 14. 3. 2. 4. 3. 1.
1. 1. 6. 6. 17. 3. 0. 1. 29. 32. 4. 10.
29. 77. 22. 14. 98. 31. 1. 0. 4. 41. 84. 76.
13. 14. 38. 10. 59. 115. 53. 22. 16. 4. 21. 13.
56. 90. 72. 31. 45. 19. 7. 3. 10. 89. 85. 46.
115. 12. 2. 6. 16. 27. 115. 103. 55. 3. 4. 20.
115. 101. 15. 29. 113. 8. 16. 40. 33. 53. 61. 47.
65. 16. 0. 0. 5. 24. 90. 86. 8. 0. 8. 47.
63. 33. 67. 51. 6. 1. 19. 64. 89. 73. 36. 18.
21. 8. 60. 115. 31. 58. 11. 8.] ...
(other 128-numbers vectors)
Мне нужно выбрать n лучших дескрипторов, чтобы ограничить количество ключевых точек, которые я получаю в выводе; есть ли реализация к этому?
1 ответ
SIFT может принимать параметр, который указывает количество лучших функций для сохранения
Когда вы создаете экземпляр SIFT, вы должны сделать это следующим образом
sift = cv2.SIFT(n)
См. http://docs.opencv.org/trunk/modules/nonfree/doc/feature_detection.html