2011-01-18 8 views
5

MATLAB का उपयोग कर 2 डी छवि से मैं 3 डी स्टीरियोस्कोपिक छवि कैसे बना सकता हूं?छवि उपकरण के साथ MATLAB का उपयोग कर 3 डी स्ट्रोस्कोपिक छवियां कैसे बनाएं?

+3

प्रश्न क्या है? आपने क्या प्रयास किया है – carlosdc

+1

मुझे लगता है कि यदि आपके पास 3 डी डेटा है तो इसे बनाना आसान होगा, तब से आपको केवल अलग-अलग कोणों के साथ 2 अनुमान बनाना होगा। –

+0

@carlosdc @Itamar Katz: अगर मैं 3 डी ग्लास का उपयोग करके 2 डी छवि देखना चाहता हूं तो इसे 3 डी छवि प्रारूप में देखा गया .. इस तरह। या कोई अन्य तरीका इसे 3 आयाम के साथ देख सकता है? –

उत्तर

11

या तो मैं आपके प्रश्न को गलत समझ रहा हूं (लोगों ने पहले ही बताया है कि यह स्पष्ट नहीं है), या आप 3 डी दृष्टि के तरीके को गलत तरीके से समझ रहे हैं। आप "3 डी ग्लास का उपयोग करके 2 डी छवि नहीं देखते"। 3 डी दृष्टि दो अलग-अलग छवियों, बाएं छवि और दाएं छवि, क्रमशः बाएं आंख और दाहिनी आंखों की सेवा करके हासिल की जाती है। एक मौलिक स्तर पर MATLAB के साथ इसके साथ कुछ भी करने की ज़रूरत नहीं है।

तो, आसानी से समझने योग्य या सुसंगत प्रश्न की अनुपस्थिति में, सबसे अच्छा मैं कर सकता हूं मान लीजिए कि आप this जैसे कुछ चाहते हैं: आपके पास एक एकल 2 डी छवि है, लेकिन आप अभी भी "3 डी छवि प्रारूप में देखना चाहते हैं"। बाईं आंख के लिए

  • सही छवि दाहिनी आँख
  • यह तुच्छ नहीं है के लिए

    1. वाम छवि: उस मामले में, आप किसी भी तरह दो नए छवियों में है कि एकल छवि को विभाजित करने की जरूरत है। आम तौर पर, आप 2 डी छवि में प्रत्येक पिक्सेल के inferring the depth से शुरू करते हैं। चूंकि आप गहराई की जानकारी "अनुमान लगा रहे हैं", इसलिए दो नई छवियां 3 डी दृश्य का एक आदर्श प्रतिनिधित्व नहीं होगी।

      अगला, आप अपनी गहराई की जानकारी का उपयोग करके अपनी छवि को परतों में अलग करते हैं। यह मूलतः एक बच्चों की किताब से एक पॉप-अप कटआउट तरह दिखेगा:

      alt text

      अधिक परतों आप के साथ आ सकते हैं, और अधिक सटीक अपने गहराई आकलन है, और अधिक यथार्थवादी अपने 3D प्रतिनिधित्व किया जाएगा ।

      अंत में, आप दो अलग-अलग स्थितियों से 2 डी पर स्तरित प्रतिनिधित्व वापस प्रस्तुत करते हैं - एक बाएं आंखों के लिए, और एक दाहिने आंख के लिए। यह आपको आवश्यक दो अलग-अलग छवियां देता है।

      संपादित

      दूसरा video आप से जुड़ा हुआ जो सामान्यतः एक anaglyph image रूप में जाना जाता है सरलीकृत निर्माण का वर्णन है। इसके लिए 3 डी लाल-सायन चश्मे की आवश्यकता होती है - ये ध्रुवीकृत चश्मे अब वे अधिकांश 3 डी सिनेमाघरों में उपयोग करते हैं। कारण मैं कहता हूं सरलीकृत यह है कि यह अग्रभूमि और पृष्ठभूमि के बीच भेदभाव नहीं करता है।

      सर्वोत्तम प्रभाव के लिए, आप अग्रभूमि को पृष्ठभूमि से अलग कर देंगे, और केवल अग्रभूमि पर दृष्टिकोण लागू करेंगे। ऐसा इसलिए है क्योंकि आम तौर पर पृष्ठभूमि में अनंत गहराई होती है और मोनो से स्टीरियो दृष्टि में जाने पर यह नहीं बदलती है। पियानो के मामले में, सबकुछ कम या ज्यादा अग्रभूमि है, इसलिए दृष्टिकोण काम करता है।

      एल्गोरिथ्म वीडियो का वर्णन करता है:

      • दो छवियों, im1 और im2 के साथ शुरू। वे समान हैं
      • im1 के हरे और नीले चैनलों को शून्य पर सेट करें। यह लाल छवि
      • im2 के लाल चैनल को शून्य पर सेट करेगा। यह सियान छवि बना देगा।
      • कुछ निर्दिष्ट राशि (विषय को गहराई के आधार पर) ऐसी है कि im1 बाईं तरफ है और im2 सही पर है द्वारा दो छवियों ऑफसेट। आपको यह आदेश सही ढंग से प्राप्त करने की आवश्यकता है क्योंकि 3 डी लाल-सायन चश्मा बाईं ओर लाल होते हैं, और दाईं तरफ सायन होते हैं।
      • तत्व के लिहाज से इसके प्रदर्शन दो स्थानांतरित कर दिया छवियों की। ध्यान दें कि कोई भी चैनल संतृप्त नहीं होगा।

        import cv 
        SHIFT=8 
        
        if __name__ == '__main__': 
            import sys 
            _, fname = sys.argv 
            im = cv.LoadImage(fname) 
        
            size = cv.GetSize(im) 
            width, height = size 
            left = cv.CreateImage(size, im.depth, im.nChannels) 
            right = cv.CreateImage(size, im.depth, im.nChannels) 
            anaglyph = cv.CreateImage((width - SHIFT, height), im.depth, im.nChannels) 
        
            # 
            # This would be easier if we had COI support for cv.Set, but it doesn't 
            # work that way. 
            # OpenCV uses BGR order (even if input image is greyscale): 
            # http://www.cs.iit.edu/~agam/cs512/lect-notes/opencv-intro/opencv-intro.html 
            # red goes on the left, cyan on the right: 
            # http://en.wikipedia.org/wiki/Anaglyph_image 
            # 
            b = cv.CreateImage(size, im.depth, 1) 
            g = cv.CreateImage(size, im.depth, 1) 
            r = cv.CreateImage(size, im.depth, 1) 
            cv.Split(im, b, g, r, None) 
        
            zeros = cv.CreateImage(size, r.depth, 1) 
            cv.Merge(zeros, zeros, r, None, left) 
            cv.Merge(b, g, zeros, None, right) 
        
            # 
            # cvRect is (x, y, width, height) and it MUST be a tuple, not a list 
            # 
            cv.SetImageROI(left, (SHIFT, 0, width - SHIFT, height)) 
            cv.SetImageROI(right, (0,  0, width - SHIFT, height)) 
            cv.Add(left, right, anaglyph, None) 
        
            cv.SaveImage('anaglyph.jpeg', anaglyph) 
        

        यहाँ जो वीडियो में प्रयोग किया जाता है करने के लिए इसी तरह की एक छवि है::

        alt text

        यहाँ उत्पादन है:

      यहाँ कुछ अजगर/OpenCV कोड मैंने लिखा है alt text

      दुर्भाग्यवश मेरे पास यह काम करने के लिए 3 डी लाल-सायन चश्मे नहीं हैं। लेकिन ऐसा लगता है कि कम से कम सिद्धांत में ऐसा होना चाहिए। अगर मैंने कोई गलती की है तो शायद कोई मुझे सही कर सकता है।

    +0

    बहुत बहुत शुक्रिया @misha .. लेकिन मैं उस तरह चाहते वीडियो लिंक देखें http://www.youtube.com/watch?v=3r4M_KHt6aw, http://www.youtube.com/watch?v=g_JRHtHpuSY, http : //www.youtube.com/watch? v = zdXxS2KHXlo उस तरह .. - धन्यवाद अभि। –

    +1

    असल में, पहला लिंक मैंने जो कुछ किया है, उसका वर्णन किया है। गहराई का नक्शा गणना करें, दूसरी छवि बनाएं। मैं वास्तविक विस्थापन फ़िल्टर कार्यान्वयन के बारे में निश्चित नहीं हूँ। दूसरा लिंक वास्तव में सभी प्रासंगिक नहीं है - यह एक स्टीरियो छवि नहीं है, यह सिर्फ छद्म-3 डी प्रभाव प्राप्त करता है। यदि आप यही चाहते हैं, तो यह लागू करने के लिए काफी सरल है, बस वही करें जैसा कि उस वीडियो में वीडियो कह रहा था। मैं बाद में तीसरा वीडियो देख सकता हूं - यह थोड़ा लंबा है, और यह देर हो चुकी है। अपने मूल प्रश्न में प्रासंगिक लिंक को यह स्पष्ट करने के लिए रखें कि आप क्या चाहते हैं। – misha

    +0

    धन्यवाद @ मिशा हां आपको मिलता है। मैं 2 डी छवि से छद्म-3 डी प्रभाव जोड़ना चाहता हूं। मैं सिर्फ वीडियो लिंक के अनुसार सरल 3 डी प्रभाव प्राप्त करता हूं। आप के बारे में कोड है, तो यह मेरे लिए उत्तर .. - अभि –

    0

    यह बहुत अगर आप दो छवियों को देखने का थोड़ा अलग अंक से लिया है करने के लिए आसान है। आप दो छवियों को सुधारकर एक स्टीरियो एनालिफ बना सकते हैं। कंप्यूटर विजन सिस्टम टूलबॉक्स में प्रासंगिक फ़ंक्शन estimateUncalibratedRectifiation और stereoAnaglyph हैं। Uncalibrated Stereo Image Rectification उदाहरण देखें।

    वैकल्पिक रूप से, आप Stereo Camera Calibrator app का उपयोग करके अपने कैमरों को कैलिब्रेट कर सकते हैं, और फिर recifyStereoImages फ़ंक्शन का उपयोग कर सकते हैं। Stereo Calibration and Scene Reconstruction देखें।

    +0

    आपके उत्तर के लिए धन्यवाद .. अगर हमारे पास केवल एक छवि है तो क्या हम स्टीरियोस्कोपिक छवि बना सकते हैं ?? –

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