2015-10-14 12 views
5

में संस्करण 3.0 के बाद से, डेन्सफ़ेचरडेटेटर अब उपलब्ध नहीं है। क्या कोई मुझे दिखा सकता है कि ओपनसीवी 3.0 में डेंस सिफ्ट सुविधाओं की गणना कैसे करें? मैं इसे दस्तावेज में नहीं मिला।ओपनसीवी 3.0

अग्रिम में बहुत बहुत धन्यवाद!

+0

आपका मतलब डेविस सुविधाओं की तरह कुछ है? यह ओपनसीवी 3.0 में है लेकिन बाहरी contrib पैकेज में है। आपको इसे स्वयं संकलित करना होगा – DawidPi

+0

@DawidPi: मेरे पास opencv_contrib स्थापित है और प्रोजेक्ट में xfeature2d शामिल है, लेकिन अभी भी DenseFeatureDetector जैसे कुछ भी नहीं मिला। घने एसआईएफटी बस विभिन्न पैमाने पर एक ग्रिड पर गणना की गई एसआईएफटी विशेषताएं है। – Khue

+0

DenseFeatureDetector detectImpl का कार्यान्वयन इस तरह था। मुझे लगता है कि आप इसे अपने आप कर सकते हैं, लेकिन मुझे लगता है कि मैं आपकी मदद नहीं कर सकता क्योंकि मैं कोई गणितज्ञ नहीं हूं और न ही सीवी विशेषज्ञ हूं। https://github.com/Itseez/opencv/blob/2.4/modules/features2d/src/detectors.cpp#L162 – DawidPi

उत्तर

2

यहाँ कैसे मैं में OpenCV 3 सी घने झारना इस्तेमाल किया है ++:

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); 

से नकल: http://answers.opencv.org/question/73165/compute-dense-sift-features-in-opencv-30/?answer=73178#post-id-73178

मैं चित्र का पिक्सेल स्थानों के माध्यम से स्कैनिंग द्वारा cv2.KeyPoint रों की एक सूची बना

अच्छी तरह से काम करता है

+0

यदि मैं कई छवियों से सुविधाओं को निकालना चाहता हूं ... क्या मुझे सभी छवियों को पहले एक सामान्य आकार में बदलना चाहिए? –

+0

बहुत बहुत धन्यवाद। (और देरी के लिए खेद है) – Khue

5

आप cv2.KeyPoints से sift.compute की एक सूची पास कर सकते हैं। यह उदाहरण पायथन में है, लेकिन यह सिद्धांत दिखाता है।

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) 
+0

हाय जैसे SIFT के विकल्प का उपयोग कर सकते हैं, क्या आप जानते हैं कि इसके विपरीत कैसे लागू करें इस मामले में दहलीज? मैंने SIFT_create() में कंट्रास्ट थ्रेसहोल्ड पैरामीटर जोड़ने की कोशिश की लेकिन इसे अनदेखा कर दिया गया। – pomxipum

+0

मैं 100% निश्चित नहीं हूं, लेकिन ऐसा लगता है कि आपको इसे स्वयं लागू करना होगा। जवाब एक अलग सवाल के रूप में पोस्ट करने के लिए पर्याप्त जटिल है। हालांकि, इसके विपरीत गणना की गणना की जाती है https://github.com/opencv/opencv_contrib/blob/7238cd27bae5436605d9e32ca0b87f266381a9e0/modules/xfeatures2d/src/sift.cpp#L457 –