#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 अंक प्राप्त किए हैं जिनके पास सबसे अच्छा मिलान है ... उम्मीद है कि यह आपको कुछ हद तक मदद करता है ...
स्रोत
2012-09-19 17:10:54
हां, मैंने अनुमान लगाया कि यह ऐसा कुछ था। जो मुझे नहीं पता है, यदि आपके पास जोड़े का चयन करने के लिए एल्गोरिदम है तो कीपॉइंट्स के लिए डिटेक्टर का उपयोग करने की आवश्यकता है। कागज में मेरे लिए यह स्पष्ट नहीं है। मैं सनकी के साथ एक पायरफास्ट विकसित कर रहा हूं और मैं देखता हूं कि क्या होता है। –
मेरी समझ यह है कि, एक मुख्य बिंदु स्थान (उदाहरण के लिए pyrFAST का उपयोग करके) दिया गया है, वर्णनकर्ता को इस कुंजीपटल के आस-पास के छोटे पड़ोस में बिंदुओं के जोड़े (! = कीपॉइंट) के बीच अंतर के संकेत के रूप में गणना की जाती है। यदि आप इससे परिचित हैं तो यह बीआरईईएफ के समान ही है। लेकिन FREAK की एक विधि है जो मानव दृष्टि प्रणाली – remi
से प्रेरित पड़ोस में स्थानों का नमूना देती है, ठीक है, जो मुझे अधिक समझ में आता है। हां, मुझे BRIEF पता है (जो यादृच्छिक स्थान नमूने) और BRISK जो मंडलियों में नमूने। मंडलियों में भी झुकाव नमूने, लेकिन वे रेटिना की तरह अनावश्यक और मोटे-ठीक हैं। जो मैंने नहीं देखा था कि यह एक महत्वपूर्ण बिंदु के पड़ोस में किया जाता है, जिसमें एक बिंदु है। धन्यवाद! –