2012-09-19 11 views
17

मैं एक आवेदन जो Freak वर्णनकर्ता, बस OpenCV2.4.2 संस्करण में जारी का उपयोग शामिल है के विकास कर रहा हूँ।OpenCV फ्रिक: फास्ट रेटिना Keypoint वर्णनकर्ता

documentation केवल दो कार्यों में दिखाई देते हैं:

  • वर्ग निर्माता

  • एक भ्रामक विधि selectPairs()

मैं अपने ही डिटेक्टर का प्रयोग और फिर सनकी कॉल करना चाहते हैं वर्णित कुंजीपटलों को पारित करने वाले वर्णनकर्ता लेकिन मुझे स्पष्ट रूप से समझ में नहीं आता कि कक्षा कैसे काम करती है।

प्रश्न:

मैं सख्ती से selectPairs() उपयोग करने के लिए की जरूरत है? क्या यह FREAK.compute() पर कॉल करके पर्याप्त है? मैं वास्तव में समझ नहीं पा रहा हूं कि selectPairs का उपयोग कौन सा है।

उत्तर

18

बस पेपर के माध्यम से फिसल गया और अनुच्छेद 4.2 में देखा कि लेखकों ने ग्रहणशील क्षेत्रों के जोड़े का चयन करने के लिए एक विधि स्थापित की है अपने वर्णनकर्ता में मूल्यांकन करने के लिए, क्योंकि सभी संभावित जोड़े लेना बहुत अधिक बोझ होगा। SelectPairs() फ़ंक्शन आपको जोड़े के इस सेट को दोबारा करने देता है।

बाद में दस्तावेज़ पढ़ें जहां वे मूल आलेख में इस पैराग्राफ को बिल्कुल इंगित करते हैं। साथ ही, दस्तावेज़ीकरण में कुछ टिप्पणियां आपको बताती हैं कि पहले से उपलब्ध, ऑफलाइन सीखा सेट जो जोड़ों के लिए तैयार है जो FREAK Descriptor के साथ उपयोग करने के लिए तैयार है। तो मुझे लगता है कि कम से कम शुरुआत के लिए आप केवल प्रीकंप्यूटेड जोड़े का उपयोग कर सकते हैं, और एक तर्क के रूप में पास कर सकते हैं जो आपने अपनी विधि से FREAK.compute पर प्राप्त की है।

यदि आपके परिणाम निराशाजनक हैं, तो आप मूल पेपर (अनुच्छेद 2.1) में उपयोग की जाने वाली कीपॉइंट चयन विधि का प्रयास कर सकते हैं, फिर आखिरकार जोड़े के अपने सेट को सीख सकते हैं।

+0

हां, मैंने अनुमान लगाया कि यह ऐसा कुछ था। जो मुझे नहीं पता है, यदि आपके पास जोड़े का चयन करने के लिए एल्गोरिदम है तो कीपॉइंट्स के लिए डिटेक्टर का उपयोग करने की आवश्यकता है। कागज में मेरे लिए यह स्पष्ट नहीं है। मैं सनकी के साथ एक पायरफास्ट विकसित कर रहा हूं और मैं देखता हूं कि क्या होता है। –

+1

मेरी समझ यह है कि, एक मुख्य बिंदु स्थान (उदाहरण के लिए pyrFAST का उपयोग करके) दिया गया है, वर्णनकर्ता को इस कुंजीपटल के आस-पास के छोटे पड़ोस में बिंदुओं के जोड़े (! = कीपॉइंट) के बीच अंतर के संकेत के रूप में गणना की जाती है। यदि आप इससे परिचित हैं तो यह बीआरईईएफ के समान ही है। लेकिन FREAK की एक विधि है जो मानव दृष्टि प्रणाली – remi

+0

से प्रेरित पड़ोस में स्थानों का नमूना देती है, ठीक है, जो मुझे अधिक समझ में आता है। हां, मुझे BRIEF पता है (जो यादृच्छिक स्थान नमूने) और BRISK जो मंडलियों में नमूने। मंडलियों में भी झुकाव नमूने, लेकिन वे रेटिना की तरह अनावश्यक और मोटे-ठीक हैं। जो मैंने नहीं देखा था कि यह एक महत्वपूर्ण बिंदु के पड़ोस में किया जाता है, जिसमें एक बिंदु है। धन्यवाद! –

16
#include "iostream" 
#include <opencv2/core/core.hpp> 
#include <opencv2/highgui/highgui.hpp> 
#include "cv.h" 
#include "highgui.h" 
#include <opencv2/nonfree/nonfree.hpp> 
#include <opencv2/nonfree/features2d.hpp> 
#include <opencv2/flann/flann.hpp> 
#include <opencv2/legacy/legacy.hpp> 
#include <vector> 


using namespace cv; 
using namespace std; 

int main() 
{ 
    Mat image1,image2; 
    image1 = imread("C:\\lena.jpg",0); 
    image2 = imread("C:\\lena1.bmp",0); 

    vector<KeyPoint> keypointsA,keypointsB; 
    Mat descriptorsA,descriptorsB; 

    std::vector<DMatch> matches; 

    OrbFeatureDetector detector(400); 

    FREAK extractor; 

    BruteForceMatcher<Hamming> matcher; 

    detector.detect(image1,keypointsA); 
    detector.detect(image2,keypointsB); 

    extractor.compute(image1,keypointsA,descriptorsA); 
    extractor.compute(image2,keypointsB,descriptorsB); 

    matcher.match(descriptorsA, descriptorsB, matches); 

    int nofmatches = 30; 
    nth_element(matches.begin(),matches.begin()+nofmatches,matches.end()); 
    matches.erase(matches.begin()+nofmatches+1,matches.end()); 

    Mat imgMatch; 
    drawMatches(image1, keypointsA, image2, keypointsB, matches, imgMatch); 

    imshow("matches", imgMatch); 
    waitKey(0); 

    return 0; 
} 

यह एक सरल आवेदन दो छवियों में अंक मिलान करने के लिए है ... मैं Orb का इस्तेमाल किया है keypoints और उन keypoints पर वर्णनकर्ता के रूप में सनकी पता लगाने के लिए ... तो दो छवियों में इसी अंक का पता लगाने के brutforcematching .. .i ने शीर्ष 30 अंक प्राप्त किए हैं जिनके पास सबसे अच्छा मिलान है ... उम्मीद है कि यह आपको कुछ हद तक मदद करता है ...