2013-05-31 11 views
5

मैं ओपन सीवी के लिए नया हूं, मैं दो छवियों src और dst छवि को बदलना चाहता हूं। मैं रूपांतरण मैट्रिक्स की गणना करने के लिए cv::estimateRigidTransform() का उपयोग कर रहा हूं और उसके बाद cv::warpAffine() का उपयोग करके dst से src में परिवर्तित करने के लिए उपयोग कर रहा हूं। जब मैं नई छवि के साथ नई छवि की तुलना करता हूं तो यह लगभग समान होता है (रूपांतरित), लेकिन जब मुझे नई रूपांतरित छवि और src छवि का abs अंतर मिल रहा है, तो बहुत अंतर है। मुझे क्या करना चाहिए क्योंकि मेरी डीएसटी छवि में कुछ घूर्णन और अनुवाद कारक भी हैं। यहाँ मेरी कोडओपनसीवी ट्रांसफॉर्मिंग छवि

enter image description here

गंतव्य छवि

enter image description here

उत्पादन छवि

enter image description here

है

cv::Mat transformMat = cv::estimateRigidTransform(src, dst, true); 
cv::Mat output; 
cv::Size dsize = leftImageMat.size(); //This specifies the output image size--change needed 
cv::warpAffine(src, output, transformMat, dsize); 

एसआरसी छवि

पूर्ण अंतर छवि

enter image description here

धन्यवाद

+0

सबसे पहले, आप वास्तव में क्या हासिल करना चाहते हैं? बेशक, कुछ सामान्य परिवर्तन करते समय, abs-diff शून्य-शून्य होगा। यहां तक ​​कि 1 डिग्री के घूर्णन परिवर्तन से पिक्सेल इंटरपोलेशन की वजह से बड़े बदलाव आएंगे। – jnovacho

+0

हैलो, jnovacho, मैं opencv – Mudasar

+0

का उपयोग कर छवियों को सुधारना चाहता हूं, मुझे अभी भी समस्या दिखाई नहीं दे रही है। आपका कोड मेरे लिए ठीक लगता है। क्या आप कुछ स्क्रीनशॉट - स्रोत और गंतव्य छवि और आउटपुट छवि भी प्रदान कर सकते हैं। – jnovacho

उत्तर

4

आप प्रक्रिया के बारे में कुछ गलतफहमी है।

विधि सीवी :: estimateRigidTransform इनपुट के दो सेट इनपुट के रूप में लेता है। और उसके बाद रूपांतरण मैट्रिक्स खोजने के लिए समीकरणों का सेट हल करता है। परिवर्तन का आउटपुट स्रोत बिंदुओं को डीएसटी पॉइंट से जोड़ता है (सटीक या बारीकी से, यदि सटीक मिलान संभव नहीं है - उदाहरण के लिए फ्लोट निर्देशांक)।

यदि आप दो छवियों पर अनुमान RigidTransform लागू करते हैं, तो OpenCV पहले कुछ आंतरिक विधि का उपयोग करके अंक के मिलान करने वाले जोड़े ढूंढता है (opencv docs देखें)।

सीवी :: warpAffine फिर दिए गए परिवर्तन मैट्रिक्स के अनुसार src image को dst में बदल देता है। लेकिन किसी भी (लगभग किसी भी) परिवर्तन हानि ऑपरेशन है। एल्गोरिदम को कुछ डेटा अनुमान लगाना पड़ता है, क्योंकि वे उपलब्ध नहीं हैं। ज्ञात जानकारी का उपयोग करके आप अज्ञात मान की गणना करते हुए, इस प्रक्रिया को इंटरपोलेशन कहा जाता है। छवि स्केलिंग के बारे में कुछ जानकारी wiki पर मिल सकती है। वही नियम अन्य परिवर्तनों पर लागू होते हैं - घूर्णन, तिरछा, परिप्रेक्ष्य ... जाहिर है यह अनुवाद पर लागू नहीं होता है।

अपनी परीक्षण छवियों को देखते हुए, मुझे लगता है कि OpenCV संदर्भ के रूप में दीपक को ले जाता है। अंतर से स्पष्ट है कि लैंपशेड सबसे अच्छा बदल जाता है। डिफ़ॉल्ट ओपनसीवी वारिंग के लिए रैखिक इंटरपोलेशन का उपयोग करता है क्योंकि यह सबसे तेज़ तरीका है। लेकिन आप बेहतर परिणामों के लिए अधिक प्रगति विधि निर्धारित कर सकते हैं - फिर opencv docs से परामर्श लें।

निष्कर्ष: आपको जो परिणाम मिला है वह बहुत अच्छा है, अगर आप ध्यान में रखते हैं, तो यह स्वचालित प्रक्रिया का परिणाम है। यदि आप बेहतर परिणाम चाहते हैं, तो आपको संबंधित बिंदुओं का चयन करने के लिए एक और तरीका खोजना होगा। या बेहतर इंटरपोलेशन विधि का उपयोग करें। किसी भी तरह से, परिवर्तन के बाद, diff 0 नहीं होगा। यह प्राप्त करने के लिए लगभग असंभव है, क्योंकि बिटमैप पिक्सेल की अलग ग्रिड है, इसलिए हमेशा कुछ अंतराल होंगे, जिन्हें अनुमान लगाने की आवश्यकता है।

+0

ठीक धन्यवाद :) स्पष्टीकरण के लिए – Mudasar

+0

हैलो जेनोवाचो, क्या आप मुझे बता सकते हैं कि वार्प एफ़िन को लागू करने से पहले रोटेशन को केंद्र में कैसे सेट किया जाए, वास्तव में यह इसे शीर्ष बाएं कोने से घुमा रहा है जबकि स्टीरियो छवियों में अधिकांश समय घूर्णन होता है केंद्र से है। धन्यवाद – Mudasar

+1

हाय, एक पकड़ है। सभी परिवर्तन मूल [0,0] के संबंध में हैं। तो यहां वांछित केंद्र को वांछित केंद्र का अनुवाद करना है, घूर्णन करना और वापस अनुवाद करना है। मैट्रिक्स ट्रांसफॉर्मेशन के बारे में कुछ जानकारी यहां http://www.willamette.edu/~gorr/classes/GeneralGraphics/Transforms/transforms2d.htm लेकिन मुझे नहीं लगता कि यह ओपनसीवी में काम करेगा, क्योंकि आप डेटा खो देंगे नकारात्मक निर्देशांक। इसके अलावा मुझे नहीं लगता कि आपको वास्तव में इसकी आवश्यकता है। कार्य आंतरिक रूप से इस समस्या से निपटते हैं, यह छवि को इसी तरह के अंक मिलान करता है। – jnovacho

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