2013-03-18 4 views
5

मैं एक प्रोग्राम बना रहा हूं जो ओपनसीवी (2.43) से ओआरबी के साथ सुविधाओं को ट्रैक करता है, मैंने this tutorial का पालन किया और सलाह from here का उपयोग किया।ओपनसीवी की खोजहोमोग्राफी बकवास परिणाम पैदा करती है

मेरा लक्ष्य वीडियो फ़ीड (चेहरे) में ऑब्जेक्ट को ट्रैक करना और इसके चारों ओर एक आयत खींचना है।

मेरे कार्यक्रम keypoints पाता है और उन्हें सही ढंग से मेल खाता है, लेकिन (हालांकि कभी कभी यह सही homography रिटर्न) जब मैं findHomography + perspectiveTransform उपयोग करने के लिए छवि के लिए नए कोनों खोजने की कोशिश आम तौर पर कुछ बकवास प्रकार मान देता है।

Mat H = findHomography(obj, scene, CV_RANSAC); 

//-- Get the corners from the image_1 (the object to be "detected") 
std::vector<Point2f> obj_corners(4); 
obj_corners[0] = cvPoint(0,0); obj_corners[1] = cvPoint(img_object.cols, 0); 
obj_corners[2] = cvPoint(img_object.cols, img_object.rows); obj_corners[3] = cvPoint(0, img_object.rows); 
std::vector<Point2f> scene_corners(4); 

perspectiveTransform(obj_corners, scene_corners, H); 

//-- Draw lines between the corners (the mapped object in the scene - image_2) 
line(img_matches, scene_corners[0] + Point2f(img_object.cols, 0), scene_corners[1] + Point2f(img_object.cols, 0), Scalar(0, 255, 0), 4); 
line(img_matches, scene_corners[1] + Point2f(img_object.cols, 0), scene_corners[2] + Point2f(img_object.cols, 0), Scalar(0, 255, 0), 4); 
line(img_matches, scene_corners[2] + Point2f(img_object.cols, 0), scene_corners[3] + Point2f(img_object.cols, 0), Scalar(0, 255, 0), 4); 
line(img_matches, scene_corners[3] + Point2f(img_object.cols, 0), scene_corners[0] + Point2f(img_object.cols, 0), Scalar(0, 255, 0), 4); 

कोड के बाकी व्यावहारिक रूप से लिंक मैं प्रदान की के समान ही है: example

यहाँ इसी समस्याग्रस्त हिस्सा है:

यहाँ एक उदाहरण तस्वीर है। खींची गई रेखाएं पूरी तरह यादृच्छिक लगती हैं, मेरा लक्ष्य केवल नए दृश्य में स्रोत ऑब्जेक्ट का न्यूनतम आयत प्राप्त करना है, इसलिए यदि होमोग्राफी का उपयोग करने का विकल्प भी है जो काम करता है।

पीएस ट्रैक करने के लिए स्रोत छवि एक ऐसा क्षेत्र है जिसे वीडियो इनपुट से कॉपी किया गया है और उसके बाद उस इनपुट से नई तस्वीरों में ट्रैक किया गया है, क्या इससे कोई फर्क पड़ता है?

+0

अधिक जानकारी प्रदान करना उदा। आउटपुट की छवियां उपयोगी होंगी। –

+0

अच्छा यह यहां कुछ है: http://dl.dropbox.com/u/5481096/Clipboard02.jpg। – user2184001

+0

मैंने छवि को आपके प्रश्न में संपादित किया। यदि आप भविष्य में अधिक जानकारी प्रदान करना चाहते हैं तो अपने प्रश्न को संपादित करना सबसे अच्छा है ताकि अधिक लोग इसे आसानी से देख सकें। –

उत्तर

0

फ़ंक्शन perspectiveTransform अनुमान के तहत होमोग्राफी का अनुमान लगाता है कि आपके संबंधित अंक सेट त्रुटि प्रवण नहीं हैं। हालांकि, असली दुनिया के डेटा में आप इसे ग्रहण नहीं कर सकते हैं। समाधान समीकरणों की ओवरडेटर्मिन प्रणाली के रूप में होमोग्राफी समस्या को हल करने के लिए RANSAC जैसे मजबूत अनुमान फ़ंक्शन का उपयोग करना है।

आप findHomography फ़ंक्शन के बजाय एक होमोग्राफी लौटा सकते हैं। इस फ़ंक्शन का इनपुट बिंदुओं का एक सेट है। इस सेट को कम से कम 4 बिंदु की आवश्यकता है लेकिन एक बड़ा सेट बेहतर है। होमोग्राफी केवल एक अनुमान है लेकिन त्रुटियों के खिलाफ जो अधिक मजबूत है। CV_RANSAC ध्वज का उपयोग करके यह आउटलेटर्स (गलत बिंदु पत्राचार) internaly को हटाने में सक्षम है।

संबंधित मुद्दे