2016-01-29 8 views
6

में ज्ञात पहलू अनुपात के साथ आयताकार की दूरी ढूँढना मैं कैमरे से दूरी को एक ज्ञात पहलू अनुपात के साथ एक आयत में दूरी खोजने के लिए ओपनसीवी प्रोग्राम पर काम कर रहा हूं। एक आयत एक सामने वाले दृश्य से देखा के रूप में दूरी ढूँढना काम करता है ठीक:ओपनसीवी

   wtarget · pimage 
d = c —————————————————————————— 
     2 · ptarget · tan(θfov/2) 

कहाँ w:

forward-facing

वास्तविक दूरी बहुत दूरी इस द्वारा गणना के करीब है लक्ष्य लक्ष्य की वास्तविक चौड़ाई (इंच में) है, पी छवि समग्र छवि की पिक्सेल चौड़ाई है, पी लक्ष्य का पता चला चतुर्भुज के सबसे बड़े चौड़ाई (पिक्सेल में) की लंबाई है, और θ FOV हमारे वेब कैमरा के FOV है। इसके बाद कुछ स्थिर सी द्वारा गुणा किया जाता है।

मुद्दा यह है कि सामने वाले नहीं है तब होता है जब लक्ष्य आयत एक नजरिए से देखा जाता है:

not forward-facing

इन दो झुकाव के बीच वास्तविक दूरी में अंतर छोटा है, लेकिन पता चला दूरी अलग है लगभग 2 फीट तक।

मैं क्या जानना चाहता हूं कि विभिन्न परिप्रेक्ष्य कोणों के लिए लेखांकन, लगातार दूरी की गणना कैसे करें। मैंने getPerspectiveTransform के साथ प्रयोग किया है, लेकिन मुझे लक्ष्य के परिणामस्वरूप पैमाने को जानने की आवश्यकता है - मुझे केवल पहलू अनुपात पता है।

+0

पहली बार उपयोग किए जाने पर संक्षेप में वर्तनी प्राप्त करने के लिए संभव है (SOAWFU)? क्या एक एफओवी है? क्या यह कैमरे के लेंस के दृश्य के कोण का कोण है? क्या कैमरे के लेंस में स्क्वाड बॉक्स को सामान्य करना संभव है, और उस तरह की दूरी की गणना करना संभव है?(परिप्रेक्ष्य बॉक्स को मध्य बिंदुओं का उपयोग करके शुद्ध आयताकार में परिवर्तित करें, फिर सामान्य दृश्य गणना का उपयोग करके दूरी निर्धारित करें?) – zipzit

+0

@zipzit हां, यह कैमरे के दृश्य का क्षैतिज क्षेत्र है। ऐसा लगता है कि midpoints का उपयोग एक समानांतर बनाता है। यकीन नहीं है कि मैं इस समानांतर चक्र के साथ क्या करूँगा। – August

उत्तर

0

यहाँ आप क्या जानते हैं:

  1. इंच में शीर्ष बाएँ और ऊपर दाईं कोनों के बीच की दूरी (w_target)
  2. एक 2D विमान पर पिक्सल में उन कोनों के बीच की दूरी (p_target)

तो समस्या यह है कि आयत पर कोण होने पर p_target की घटती दूरी के लिए आप लेखांकन नहीं कर रहे हैं। उदाहरण के लिए, जब आयताकार 45 डिग्री हो जाता है, तो आप p_target में अपने पिक्सेल के आधा खो देंगे, लेकिन आपका सूत्र w_target मानता है, इसलिए आप दूरी को अधिक महत्व देते हैं।

इसके लिए खाते में, आपको अनुमान लगाया जाना चाहिए कि बॉक्स चालू है। मुझे getPerspectiveTransform से उस जानकारी को निकालने का एक आसान तरीका सुनिश्चित नहीं है, लेकिन यह संभव हो सकता है। आप एक सीमित ऑप्टिमाइज़ेशन सेट कर सकते हैं जहां निर्णय चर दूरी और स्कू कोण हैं और बॉक्स पर बाएं और दाएं बिंदुओं के बीच मीट्रिक दूरी को लागू करते हैं।

अंत में, कोई फर्क नहीं पड़ता कि आप क्या कर रहे हैं, आपको यह सुनिश्चित करना चाहिए कि आपका कैमरा कैलिब्रेटेड हो। आपके आवेदन के आधार पर, आप अपनी समस्या को हल करने के लिए AprilTags का उपयोग करने में सक्षम हो सकते हैं।