Since version 3.0, DenseFeatureDetector is no longer available. Could anybody please show me how to compute Dense SIFT features in OpenCV 3.0? I couldn't find it in the documentation.
Thank you very much in advance!
Example: SIFT detector in Python jpg” generates the “image-with-keypoints. jpg” which contains the interest points, detected using the SIFT module in OpenCV, marked using circular overlays. Note: SIFT detector has been removed in the latest versions of OpenCV ( ≥ 3.4. 2.16).
Dense SIFT collects more features at each location and scale in an image, increasing recognition accuracy accordingly. However, computational complexity will always be an issue for it (in relation to normal SIFT).
You can pass a list of cv2.KeyPoints
to sift.compute
. This example is in Python, but it shows the principle. I create a list of cv2.KeyPoint
s by scanning through the pixel locations of the image:
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)
Here's how I used dense SIFT in OpenCV 3 C++:
SiftDescriptorExtractor sift;
vector<KeyPoint> keypoints; // keypoint storage
Mat descriptors; // descriptor storage
// manual keypoint grid
int step = 10; // 10 pixels spacing between kp's
for (int y=step; y<img.rows-step; y+=step){
for (int x=step; x<img.cols-step; x+=step){
// x,y,radius
keypoints.push_back(KeyPoint(float(x), float(y), float(step)));
}
}
// compute descriptors
sift.compute(img, keypoints, descriptors);
copied from: http://answers.opencv.org/question/73165/compute-dense-sift-features-in-opencv-30/?answer=73178#post-id-73178
seems to work well
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With