2012-06-15 12 views
21

विभिन्न छवियों से बिंदुओं के दो सेटों के बीच एक होमोग्राफी का अनुमान लगाने के लिए ओपनसीवी के findHomography फ़ंक्शन का उपयोग करते समय, आपको कभी-कभी आपके इनपुट पॉइंट्स के भीतर आउटलाइन के कारण खराब होमोग्राफी मिल जाएगी, भले ही आप RANSAC या LMEDS का उपयोग करें।आप कैसे बता सकते हैं कि एक होमोग्राफी मैट्रिक्स स्वीकार्य है या नहीं?

// opencv java example: 
Mat H = Calib3d.findHomography(src_points, dst_points, Calib3d.RANSAC, 10); 

आप कैसे बता सकते हैं कि परिणामी 3x3 होमोग्राफी मैट्रिक्स स्वीकार्य है या नहीं?

मैंने यहां स्टैक ओवरफ्लो और Google में इसका उत्तर देखा है और इसे ढूंढने में असमर्थ था।

मैं इस लेख पाया है, लेकिन यह थोड़ा मेरे लिए गुप्त है: अगर homography स्वीकार्य है

"The geometric error for homographies"

+2

प्रश्न देखें http://stackoverflow.com/questions/10972438/detecting-garbage-homographies-from-findhomography-in-opencv/10981249#10981249 –

+0

अगर आपका कैमरा आंदोलन सीमित है, तो आप अपने homography विघटित करने की कोशिश कर सकता है और भारी मूल्यों के लिए परीक्षण पैमाने, रोटेशन और/या अनुवाद पैरामीटर। अन्य विधि: यदि आप जानते हैं (या बाधा लेते हैं) कि छवियों के बड़े हिस्सों को ओवरलैप करना चाहिए, तो आप युद्ध के बाद ओवरलैप की गणना कर सकते हैं और यह तय कर सकते हैं कि यह स्पष्ट रूप से झूठी होमोग्राफी हो सकती है या नहीं। अन्य विधि: यदि आप RANSAC का उपयोग करते हैं तो आप आंतरिक (और/या अनुपात में वृद्धि/कुल) की संख्या से तय कर सकते हैं कि क्या होमोग्राफी अस्वीकार करनी चाहिए) – Micka

+0

@ मिका आपकी मदद के लिए धन्यवाद, मैं पहले से ही RANSAC का उपयोग कर रहा था, कैमरा आंदोलन है सीमित नहीं है और मैं होमोग्राफी को लागू करने और ओवरलैप की जांच करने जैसे भारी गणनाओं में जाने से पहले homographies (मुख्य रूप से गणितीय) को त्यागने के तरीकों की तलाश में था। –

उत्तर

22

सर्वोत्तम तरीका।

1- एक छवि के अंक लें और गणना की गई होमोग्राफी का उपयोग करके उन्हें दोबारा दोहराएं।

//for one 3D point, this would be the projection 
px' = H * px; 
py' = H * py; 
pz' = H * pz; 

2- पुनः प्रक्षेपित अंक और छवि में वास्तविक बिंदुओं के बीच euclidean distance की गणना।

Reprojection error एक बिंदु के लिए। पी अनुमानित बिंदु है और क्यू असली बिंदु है।

enter image description here

3- एक treshold यदि पुनः प्रक्षेपण त्रुटि स्वीकार्य है कि फैसला करता है स्थापित करना।

उदाहरण के लिए, कई ट्रैकिंग अनुप्रयोगों के लिए एक पिक्सेल से अधिक त्रुटि स्वीकार्य नहीं होगी।

+11

आप जो सुझाव देते हैं वह ट्रैकिंग के लिए मान्य है, जब आप जानते हैं कि दो छवियां समान स्थानों में पैच साझा करती हैं। जब आप दो अलग-अलग छवियों के बीच एक होमोग्राफी की गणना करते हैं, यह जांचने के लिए कि क्या एक छवि में अन्य है, तो पुन: प्रक्षेपण त्रुटि बिल्कुल उपयोगी नहीं है। उदाहरण के लिए, मेरे मामले में मुझे अक्सर एक छवि से कई (~ 30) अंक मिलते हैं जो एक दूसरी छवि में उसी बिंदु (या कुछ, करीबी बिंदु) पर मैप किए जाते हैं। क्या आपके पास इस मामले के लिए कोई सुझाव है? –

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

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