MATLAB을 사용하여 2D 이미지에서 3D 입체 영상을 만드는 방법은 무엇입니까?이미지 도구로 MATLAB을 사용하여 3D 스트레오 스코픽 이미지를 만드는 방법은 무엇입니까?
답변
질문이 잘못되었습니다. 사람들이 이미 명확하지 않다고 지적했거나 3D 비전의 작동 방식을 오해하고 있습니다. "3D 유리를 사용하여 2D 이미지를 볼 수 없습니다". 3D 시각은 왼쪽 이미지와 오른쪽 이미지의 두 가지 이미지, 즉 왼쪽 이미지와 오른쪽 이미지를 각각 제공함으로써 성취됩니다. 근본적인 수준에서 MATLAB은 아무 관련이 없습니다.
쉽게 이해할 수 있거나 일관된 질문이 없으면 내가 할 수있는 최선은 this과 같은 것을 원한다고 가정하는 것입니다. 하나의 2D 이미지이지만 여전히 "3D 이미지 형식으로 보려는"것이 좋습니다. 이 경우, 당신은 어떻게 든 두 개의 새로운 이미지로 그 하나의 이미지를 분할해야합니다
- 왼쪽 이미지를 왼쪽 눈에 대한
- 오른쪽 이미지를 오른쪽 눈이 사소한하지
을 위해. 일반적으로 2D 이미지에서 각 픽셀의 inferring the depth부터 시작합니다. 깊이 정보를 "추측"하기 때문에 두 개의 새로운 이미지는 3D 장면을 완벽하게 표현하지 못합니다.
다음으로, 심도 정보를 사용하여 이미지를 레이어로 분리합니다. 그것은 본질적으로 아이들의 책에서 팝업 차단과 같이 표시됩니다
더 많은 층을 당신이 가지고 올 수 있고,보다 정확한 당신의 깊이 추정이며, 더 현실적인 당신의 3D 표현이 될 것입니다 .
마지막으로 두 개의 서로 다른 위치 (왼쪽 눈 1 개와 오른쪽 눈 1 개)에서 2D로 계층 표현을 다시 투영합니다. 이렇게하면 필요한 두 개의 서로 다른 이미지를 얻을 수 있습니다.
편집
당신이 연결된 두 번째 video은 흔히 anaglyph image으로 알려진의 단순화 생성을 설명합니다. 3D 적색 시안 안경이 필요합니다. 이 아닙니다.은 대부분의 3D 영화관에서 사용하는 편광 안경입니다. 내가 을으로 단순화 한 이유는 전경과 배경을 구별하지 않기 때문입니다.
포 그라운드를 백그라운드에서 분리하고 포어 그라운드에만 적용합니다. 이는 일반적으로 배경이 무한한 깊이를 가지며 모노에서 스테레오 비전으로 갈 때 변경되지 않기 때문입니다. 피아노의 경우 모든 것이 전경에 가까워 접근 방식이 효과적입니다. 동영상 설명
알고리즘은 두 개의 이미지, im1
및 im2
와
- 시작. 그들은 동일합니다
im1
의 녹색과 파란색 채널을 0으로 설정하십시오. 그러면 빨간색 이미지가 생성됩니다.im2
의 빨간색 채널을 0으로 설정하십시오. 그러면 시안 색 이미지가 생성됩니다.im1
이 왼쪽에 있고im2
이 오른쪽에있는 것처럼 지정된 양 (피사체 깊이에 따라 다름)만큼 두 이미지를 오프셋합니다. 3D 적목 무늬 안경은 왼쪽에 빨간색, 오른쪽에는 청록색이 있으므로 주문을 올바르게해야합니다.- 두 개의 시프트 된 이미지를 요소별로 추가합니다. 채널이 포화되지 않습니다. 출력 여기
것 :
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의 코드입니다
불행히도 나는 이것이 작동하는지 확인하기 위해 3D 적색 시안 안경을 가지고 있지 않습니다. 그러나 그것은 적어도 이론적으로는 그렇듯이 보인다. 아마도 실수를 저 지르면 누군가가 저를 바로 잡을 수 있습니다.
고맙습니다. @misha ..하지만 비디오 링크 http://www.youtube.com/watch?v=3r4M_KHt6aw, http://www.youtube.com/watch?v=g_JRHtHpuSY, http를보고 싶습니다. : //www.youtube.com/watch? v = zdXxS2KHXlo 이렇게 ... - 감사합니다. –
기본적으로 첫 번째 링크는 내가 한 일을 거의 설명했습니다. 깊이 맵을 계산하고 두 번째 이미지를 만듭니다. 실제 변위 필터 구현에 대해서는 잘 모르겠습니다. 두 번째 링크는 실제로 관련성이 전혀 없습니다. 스테레오 이미지가 아니며 단지 의사 3D 효과를냅니다. 이것이 당신이 원하는 것이라면, 그 아이가 비디오에서 말한 것과 똑같이 구현하는 것이 매우 간단합니다. 나중에 세 번째 비디오를 볼 수도 있습니다. 약간 길기 때문에 여기에 늦었습니다. 원래의 질문에 관련 링크를 넣어 원하는 것을 분명히하십시오. – misha
감사합니다. @misha 예. 나는 2D 이미지에서 의사 3D 효과를 추가하고 싶다. 난 그냥 비디오 링크 당 단순한 3d 효과를 얻을 수 있습니다. 코드에 관해서는 나에게 답장 해주세요. - Abhi –
약간 다른 관점에서 두 개의 이미지를 찍은 경우 훨씬 쉽게 할 수 있습니다. 두 이미지를 정류하여 스테레오 애너 글리프를 만들 수 있습니다. 컴퓨터 비전 시스템 도구 상자의 관련 기능은 estimateUncalibratedRectifiation
및 stereoAnaglyph
입니다. Uncalibrated Stereo Image Rectification 예제를 참조하십시오.
또는 Stereo Camera Calibrator app을 사용하여 카메라를 보정 한 다음 recifyStereoImages
기능을 사용할 수 있습니다. Stereo Calibration and Scene Reconstruction을 참조하십시오.
답변 해 주셔서 감사합니다. 단 하나의 이미지 만 있다면 입체감있는 이미지를 만들 수 있습니까 ?? –
무엇이 문제입니까? 너 뭐 해봤 니? – carlosdc
3D 데이터가있는 경우 이미지를 만드는 것이 더 쉬울 것이라고 생각합니다. 그 이유는 서로 다른 각도의 투영을 만드는 것뿐입니다. –
@carlosdc @Itamar Katz : 3D 유리를 사용하여 2D 이미지를보고 싶다면 3d 이미지 형식으로 볼 수 있습니다. 또는 다른 방법으로 3 차원으로 볼 수 있습니까? –