게시판 즐겨찾기
편집
드래그 앤 드롭으로
즐겨찾기 아이콘 위치 수정이 가능합니다.
magic eye (입체시에 대해서)
게시물ID : science_25070짧은주소 복사하기
작성자 : aiidyn
추천 : 5
조회수 : 1553회
댓글수 : 2개
등록시간 : 2013/10/03 23:57:47
우리는 우리가 물체에서 입체감을 느끼는데 별로 어려움이 없다.
어떻게 이럴수가 있을까?
우리눈으로 들어오는 시각정보는 2차원인데 어떻게 물체의 깊이를 전혀 어려움 없이 지각할수 있을까?
 
그것은 2차원 영상에서도 다양한 깊이지각 단서들이 있기 때문이다.
먼곳은 점으로 수렴하는 원근감으로 부터 거리를 느낄수 있고
가려진 물체는 가리고 있는 물체보다 뒤에 있다는 것을 알수 있고
채도가 낮은 물체가 높은 물체보다 뒤에 있다는 것을 알고 있으며
같은 물체에서 작게 보이는 물체가 뒤에 있다는 것도 알고 있다.
 
그러나 이런 단안단서들은 그냥 거리감에 대한 단서일 뿐이고 이것을 통해서 입체감을 느낄수 없다.
3차원 입체감을 느끼려면 양안단서가 있어야 한다.
즉, 한쪽눈만으로는 입체감이란 것 자체를 느낄수 없다.
양안단서는 왼쪽눈에서의 상과 오른쪽눈에서의 상간의 차이로 부터 얻는다.
즉, 양눈에는 수cm정도지만 간격이 있고
이때문에 왼쪽 눈으로 들어오는 상과 오른쪽 눈으로 들어오는 상에는 미세하지만 차이가 있다.
이 차이를 바탕으로 입체감을 지각하는 것이다.
초첨보다 멀리 있는 물체의 상은 초점보다 가까이 있는 물체의 상보다 왼쪽눈과 오른쪽 눈에 맻히는 위치가 작다. (작을수 밖에 없다.)
즉, 우리 눈은 양안 상이 맺히는 각도 차이를 바탕으로 멀고 가까운 입체감을 느낀다.
 
매직아이는 이점을 역이용한 아주 기발한 트릭이다.
즉, 같은 거리에 있더라도 왼쪽눈과 오른쪽 눈에서 들어오는 상 간의 각도를 인위적으로 조절하는 것이다.
초점을 영상이 있는 곳에 두지 않고 더 먼곳을 둔다면 그것이 가능하다.
매직아이 영상도 거리에 따라 특정 물체가 맺히는 상의 간격을 조절해서 만들수 있다.
----------------------------------------
 
재미삼아 매트랩으로 매직아이 코드를 만들어 보았습니다.
코드가 조잡하지만 어쨌건 이걸로 그림과 깊이만 정해주면 매직아이 영상을 만들수 있습니다.
(다만, 가급적 그림 싸이즈는 가로 400 세로 200 전후 정도가 적당할듯..)
이것은 테스트 영상입니다.
(아래 두 흰점이 세개로 보일때 까지 눈을 푸세요..)
 
magiceye.jpg
 
이게 보여야 합니다.
ou.jpg
---------------------------------------------------------------------
clear
timage=imread('ou.bmp');
[rx,ty]=size(timage);
d=floor(rx/3);
 
for k=1:rx
    for i=1:d
        tag=1;
        while tag==1
            rimage(k,i)=ceil(rand(1)*d);
            plag=2;
            for j=1:i-1
                if rimage(k,i)==rimage(k,j)
                    plag=1;
                end
            end
            tag=plag;           
        end
    end
end
A=imhist(timage);
B=find(A>1);
depth=length(B);
for i=1:rx
    for j=1:ty        
        for k=1:depth     
            switch timage(i,j)
                case B(k)-1
                timage(i,j)=k-1;
            end
        end
    end
end
timage=double(timage);
 
sizemx=rx;
sizemy=d+ty;
mimage=zeros(sizemx+3, sizemy); 
for i=1:rx
    for j=1:d
        mimage(i,j)=rimage(i,j);
    end
end   
for i=1:sizemx
    for j=d+1:sizemy
        mimage(i,j)=mimage(i,j-d+timage(i,j-d));
    end
end
for i=1:3
    for j=1:3
        mimage(sizemx+i, sizemy/2 -d/2+j)=d;
        mimage(sizemx+i, sizemy/2 +d/2+j)=d;
    end
end
figure
imagesc(mimage); colormap(gray)
maxm=max(mimage);
maxm=max(maxm);
filename = sprintf('magiceye.bmp');
imwrite(mimage/maxm,filename);
전체 추천리스트 보기
새로운 댓글이 없습니다.
새로운 댓글 확인하기
글쓰기
◀뒤로가기
PC버전
맨위로▲
공지 운영 자료창고 청소년보호