<div>우리는 우리가 물체에서 입체감을 느끼는데 별로 어려움이 없다.<br />어떻게 이럴수가 있을까? <br />우리눈으로 들어오는 시각정보는 2차원인데 어떻게 물체의 깊이를 전혀 어려움 없이 지각할수 있을까?</div> <div> </div> <div>그것은 2차원 영상에서도 다양한 깊이지각 단서들이 있기 때문이다.<br />먼곳은 점으로 수렴하는 원근감으로 부터 거리를 느낄수 있고<br />가려진 물체는 가리고 있는 물체보다 뒤에 있다는 것을 알수 있고<br />채도가 낮은 물체가 높은 물체보다 뒤에 있다는 것을 알고 있으며<br />같은 물체에서 작게 보이는 물체가 뒤에 있다는 것도 알고 있다.</div> <div> </div> <div>그러나 이런 단안단서들은 그냥 거리감에 대한 단서일 뿐이고 이것을 통해서 입체감을 느낄수 없다.<br />3차원 입체감을 느끼려면 양안단서가 있어야 한다.<br />즉, 한쪽눈만으로는 입체감이란 것 자체를 느낄수 없다. <br />양안단서는 왼쪽눈에서의 상과 오른쪽눈에서의 상간의 차이로 부터 얻는다.<br />즉, 양눈에는 수cm정도지만 간격이 있고<br />이때문에 왼쪽 눈으로 들어오는 상과 오른쪽 눈으로 들어오는 상에는 미세하지만 차이가 있다.<br />이 차이를 바탕으로 입체감을 지각하는 것이다.<br />초첨보다 멀리 있는 물체의 상은 초점보다 가까이 있는 물체의 상보다 왼쪽눈과 오른쪽 눈에 맻히는 위치가 작다. (작을수 밖에 없다.)<br />즉, 우리 눈은 양안 상이 맺히는 각도 차이를 바탕으로 멀고 가까운 입체감을 느낀다. </div> <div> </div> <div>매직아이는 이점을 역이용한 아주 기발한 트릭이다.<br />즉, 같은 거리에 있더라도 왼쪽눈과 오른쪽 눈에서 들어오는 상 간의 각도를 인위적으로 조절하는 것이다.<br />초점을 영상이 있는 곳에 두지 않고 더 먼곳을 둔다면 그것이 가능하다.<br />매직아이 영상도 거리에 따라 특정 물체가 맺히는 상의 간격을 조절해서 만들수 있다.<br /></div> <div>----------------------------------------</div> <div> </div> <div>재미삼아 매트랩으로 매직아이 코드를 만들어 보았습니다.</div> <div>코드가 조잡하지만 어쨌건 이걸로 그림과 깊이만 정해주면 매직아이 영상을 만들수 있습니다.<br />(다만, 가급적 그림 싸이즈는 가로 400 세로 200 전후 정도가 적당할듯..)</div> <div>이것은 테스트 영상입니다. </div> <div>(아래 두 흰점이 세개로 보일때 까지 눈을 푸세요..)</div> <div style="text-align: left"> </div> <div style="text-align: left"><img style="border-bottom: medium none; border-left: medium none; border-top: medium none; border-right: medium none" alt="magiceye.jpg" src="http://thimg.todayhumor.co.kr/upfile/201310/1380812222rULOHvnooXMJ.jpg" width="700" height="303" /></div> <div style="text-align: left"> </div> <div style="text-align: left">이게 보여야 합니다.</div> <div style="text-align: left"> <div style="text-align: left"><img style="border-bottom: medium none; border-left: medium none; border-top: medium none; border-right: medium none" alt="ou.jpg" src="http://thimg.todayhumor.co.kr/upfile/201310/13808122512fwBVFaE4.jpg" width="600" height="300" /></div></div> <div>---------------------------------------------------------------------<br /></div> <div>clear</div> <div>timage=imread('ou.bmp');<br />[rx,ty]=size(timage);<br />d=floor(rx/3);<br /> <br />for k=1:rx<br /> for i=1:d<br /> tag=1;<br /> while tag==1<br /> rimage(k,i)=ceil(rand(1)*d);<br /> plag=2;<br /> for j=1:i-1<br /> if rimage(k,i)==rimage(k,j)<br /> plag=1;<br /> end<br /> end<br /> tag=plag; <br /> end<br /> end<br />end</div> <div>A=imhist(timage);<br />B=find(A>1);<br />depth=length(B);<br />for i=1:rx<br /> for j=1:ty <br /> for k=1:depth <br /> switch timage(i,j)<br /> case B(k)-1<br /> timage(i,j)=k-1;<br /> end<br /> end<br /> end<br />end<br />timage=double(timage);<br /> <br />sizemx=rx;<br />sizemy=d+ty;<br />mimage=zeros(sizemx+3, sizemy); </div> <div>for i=1:rx<br /> for j=1:d<br /> mimage(i,j)=rimage(i,j);<br /> end<br />end </div> <div>for i=1:sizemx <br /> for j=d+1:sizemy<br /> mimage(i,j)=mimage(i,j-d+timage(i,j-d));<br /> end<br />end</div> <div>for i=1:3<br /> for j=1:3<br /> mimage(sizemx+i, sizemy/2 -d/2+j)=d;<br /> mimage(sizemx+i, sizemy/2 +d/2+j)=d;<br /> end<br />end</div> <div>figure<br />imagesc(mimage); colormap(gray)<br />maxm=max(mimage);<br />maxm=max(maxm);<br />filename = sprintf('magiceye.bmp'); <br />imwrite(mimage/maxm,filename); </div>
댓글 분란 또는 분쟁 때문에 전체 댓글이 블라인드 처리되었습니다.