2011-01-18 3 views
5

MATLAB을 사용하여 2D 이미지에서 3D 입체 영상을 만드는 방법은 무엇입니까?이미지 도구로 MATLAB을 사용하여 3D 스트레오 스코픽 이미지를 만드는 방법은 무엇입니까?

+3

무엇이 문제입니까? 너 뭐 해봤 니? – carlosdc

+1

3D 데이터가있는 경우 이미지를 만드는 것이 더 쉬울 것이라고 생각합니다. 그 이유는 서로 다른 각도의 투영을 만드는 것뿐입니다. –

+0

@carlosdc @Itamar Katz : 3D 유리를 사용하여 2D 이미지를보고 싶다면 3d 이미지 형식으로 볼 수 있습니다. 또는 다른 방법으로 3 차원으로 볼 수 있습니까? –

답변

11

질문이 잘못되었습니다. 사람들이 이미 명확하지 않다고 지적했거나 3D 비전의 작동 방식을 오해하고 있습니다. "3D 유리를 사용하여 2D 이미지를 볼 수 없습니다". 3D 시각은 왼쪽 이미지와 오른쪽 이미지의 두 가지 이미지, 즉 왼쪽 이미지와 오른쪽 이미지를 각각 제공함으로써 성취됩니다. 근본적인 수준에서 MATLAB은 아무 관련이 없습니다.

쉽게 이해할 수 있거나 일관된 질문이 없으면 내가 할 수있는 최선은 this과 같은 것을 원한다고 가정하는 것입니다. 하나의 2D 이미지이지만 여전히 "3D 이미지 형식으로 보려는"것이 좋습니다. 이 경우, 당신은 어떻게 든 두 개의 새로운 이미지로 그 하나의 이미지를 분할해야합니다

  1. 왼쪽 이미지를 왼쪽 눈에 대한
  2. 오른쪽 이미지를 오른쪽 눈이 사소한하지

을 위해. 일반적으로 2D 이미지에서 각 픽셀의 inferring the depth부터 시작합니다. 깊이 정보를 "추측"하기 때문에 두 개의 새로운 이미지는 3D 장면을 완벽하게 표현하지 못합니다.

다음으로, 심도 정보를 사용하여 이미지를 레이어로 분리합니다. 그것은 본질적으로 아이들의 책에서 팝업 차단과 같이 표시됩니다

alt text

더 많은 층을 당신이 가지고 올 수 있고,보다 정확한 당신의 깊이 추정이며, 더 현실적인 당신의 3D 표현이 될 것입니다 .

마지막으로 두 개의 서로 다른 위치 (왼쪽 눈 1 개와 오른쪽 눈 1 개)에서 2D로 계층 표현을 다시 투영합니다. 이렇게하면 필요한 두 개의 서로 다른 이미지를 얻을 수 있습니다.

편집

당신이 연결된 두 번째 video은 흔히 anaglyph image으로 알려진의 단순화 생성을 설명합니다. 3D 적색 시안 안경이 필요합니다. 이 아닙니다.은 대부분의 3D 영화관에서 사용하는 편광 안경입니다. 내가 으로 단순화 한 이유는 전경과 배경을 구별하지 않기 때문입니다.

포 그라운드를 백그라운드에서 분리하고 포어 그라운드에만 적용합니다. 이는 일반적으로 배경이 무한한 깊이를 가지며 모노에서 스테레오 비전으로 갈 때 변경되지 않기 때문입니다. 피아노의 경우 모든 것이 전경에 가까워 접근 방식이 효과적입니다. 동영상 설명

알고리즘은 두 개의 이미지, im1im2

  • 시작. 그들은 동일합니다
  • im1의 녹색과 파란색 채널을 0으로 설정하십시오. 그러면 빨간색 이미지가 생성됩니다.
  • im2의 빨간색 채널을 0으로 설정하십시오. 그러면 시안 색 이미지가 생성됩니다.
  • im1이 왼쪽에 있고 im2이 오른쪽에있는 것처럼 지정된 양 (피사체 깊이에 따라 다름)만큼 두 이미지를 오프셋합니다. 3D 적목 무늬 안경은 왼쪽에 빨간색, 오른쪽에는 청록색이 있으므로 주문을 올바르게해야합니다.
  • 두 개의 시프트 된 이미지를 요소별로 추가합니다. 채널이 포화되지 않습니다. 출력 여기

    alt text

    것 :

    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) 
    

    여기에 비디오에 사용되는 것과 유사한 이미지입니다 : 여기

은 내가 쓴 일부 파이썬/OpenCV의 코드입니다 alt text

불행히도 나는 이것이 작동하는지 확인하기 위해 3D 적색 시안 안경을 가지고 있지 않습니다. 그러나 그것은 적어도 이론적으로는 그렇듯이 보인다. 아마도 실수를 저 지르면 누군가가 저를 바로 잡을 수 있습니다.

+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

기본적으로 첫 번째 링크는 내가 한 일을 거의 설명했습니다. 깊이 맵을 계산하고 두 번째 이미지를 만듭니다. 실제 변위 필터 구현에 대해서는 잘 모르겠습니다. 두 번째 링크는 실제로 관련성이 전혀 없습니다. 스테레오 이미지가 아니며 단지 의사 3D 효과를냅니다. 이것이 당신이 원하는 것이라면, 그 아이가 비디오에서 말한 것과 똑같이 구현하는 것이 매우 간단합니다. 나중에 세 번째 비디오를 볼 수도 있습니다. 약간 길기 때문에 여기에 늦었습니다. 원래의 질문에 관련 링크를 넣어 원하는 것을 분명히하십시오. – misha

+0

감사합니다. @misha 예. 나는 2D 이미지에서 의사 3D 효과를 추가하고 싶다. 난 그냥 비디오 링크 당 단순한 3d 효과를 얻을 수 있습니다. 코드에 관해서는 나에게 답장 해주세요. - Abhi –

0

약간 다른 관점에서 두 개의 이미지를 찍은 경우 훨씬 쉽게 할 수 있습니다. 두 이미지를 정류하여 스테레오 애너 글리프를 만들 수 있습니다. 컴퓨터 비전 시스템 도구 상자의 관련 기능은 estimateUncalibratedRectifiationstereoAnaglyph입니다. Uncalibrated Stereo Image Rectification 예제를 참조하십시오.

또는 Stereo Camera Calibrator app을 사용하여 카메라를 보정 한 다음 recifyStereoImages 기능을 사용할 수 있습니다. Stereo Calibration and Scene Reconstruction을 참조하십시오.

+0

답변 해 주셔서 감사합니다. 단 하나의 이미지 만 있다면 입체감있는 이미지를 만들 수 있습니까 ?? –