Możesz przesłać listę cv2.KeyPoints
do sift.compute
. Ten przykład jest w Pythonie, ale pokazuje zasadę. Tworzę listę cv2.KeyPoint
s poprzez skanowanie przez lokalizacji piksela obrazu:
import skimage.data as skid
import cv2
import pylab as plt
img = skid.lena()
gray= cv2.cvtColor(img ,cv2.COLOR_BGR2GRAY)
sift = cv2.xfeatures2d.SIFT_create()
step_size = 5
kp = [cv2.KeyPoint(x, y, step_size) for y in range(0, gray.shape[0], step_size)
for x in range(0, gray.shape[1], step_size)]
img=cv2.drawKeypoints(gray,kp, img)
plt.figure(figsize=(20,10))
plt.imshow(img)
plt.show()
dense_feat = sift.compute(gray, kp)
Masz na myśli coś takiego jak funkcje DAISY? Jest w wersji opencv 3.0, ale w zewnętrznym pakiecie contrib. Musisz go skompilować samodzielnie – DawidPi
@DawidPi: Mam opencv_contrib zainstalowane i włączone xfeature2d do projektu, ale nadal nie mogłem znaleźć czegoś takiego jak DenseFeatureDetector. Gęste SIFT to po prostu funkcje SIFT obliczane na siatce w różnej skali. – Khue
Implementacja DenseFeatureDetector detectImpl wyglądała następująco. Sądzę, że możesz to zrobić sam, ale chyba nie mogę ci więcej pomóc, ponieważ nie jestem matematykiem ani ekspertem od CV. https://github.com/Itseez/opencv/blob/2.4/modules/features2d/src/detectors.cpp#L162 – DawidPi