입체 이미지와 3차원 이미지 처리
〈화상정보처리〉 수업 노트
일반적인 화상은 3차원 공간을 2차원 평면에 투영한 것이어서, 깊이 방향의 정보가 소실된다. 입체 화상은 이 깊이 정보를 어떤 방식으로든 보존하고 있는 화상을 의미한다.
인간의 시야와 원근 지각
인간을 포함해 동물의 시야 범위는 종에 따라 크게 다르다. 예를 들어, 소, 말, 토끼 등의 초식동물은 포식자를 넓은 범위에서 감시하기 위해 눈이 머리 양옆에 위치하여 매우 넓은 시야를 가질 수 있다.
양안에 의한 입체 지각
하지만 입체 지각은 두 눈을 모두 사용해 시야가 겹치는 영역으로부터 입체 정보를 획득하는 것이 효과적이어서, 시야가 겹치는 영역이 좁은 초식동물들은 입체 지각 능력이 제한적이다.
관련해서 두 눈의 시야가 겹치는 영역에서 양 쪽의 화상이 미세하게 다른데, 이것을 양안 시차라고 한다. 인간의 두 눈은 수평 방향으로 약 6~7 cm 떨어져, 좌안과 우안이 보는 화상이 미세하게 다르다. 뇌는 이 두 화상의 차이, 즉 시차를 계산하여 대상까지의 거리를 산출한다. 대상이 가까울수록 시차가 크고, 멀어질수록 시차는 줄어든다.
두 눈을 이용하면 폐색(Occlusion)으로부터도 깊이 정보를 얻을 수 있다. 폐색은 가까이 있는 물체가 그 뒤에 있는 물체를 부분적으로 가리는 현상이다. 어느 물체가 앞에 있고 어느 물체가 뒤에 있는지를 판단하는 단서가 된다. 두 눈의 시야 차이로 인해, 한쪽 눈에서는 보이지만 다른 쪽 눈에서는 가려지는 영역이 발생하며, 이것도 입체감을 강화한다.
단안에 의한 입체 지각
하지만 의외로 개별 안구에 의해서도 입체 지각이 가능하다. 단안에 의한 입체 지각은 양안 시차가 없더라도, 시선 이동, 명암, 원근법, 텍스처 변화 등 다양한 단서를 활용하여 깊이를 인식할 수 있다.
시선 이동과 관련해서는, 한쪽 눈에서 얻은 시각 정보가 뇌에서 두 가지 경로를 통해 처리되어 대상의 위치와 형태 정보가 추출된다. 또한 급속 안구 운동(REM: Rapid Eye Movement)처럼 눈을 빠르게 움직이며 장면을 훑을 때, 시선 이동에 따른 화상의 변화 자체가 깊이 지각의 단서로 작용한다.
명암에 관해서는 두 가지 측면에서 깊이 정보를 확인한다. 하나는 광원으로부터의 빛의 반사와 확산 상태로, 물체 표면에서 빛이 반사되고 확산되는 양상이 재질감과 곡면의 방향을 전달하여 형태의 입체성을 읽어낼 수 있게 한다. 다른 하나는 명암(shade)와 그림자(shadow)로, 광원과 물체의 위치 관계에 따라 표면에 생기는 명암과 다른 면에 드리우는 그림자가 깊이와 입체감을 전달하는 강력한 단서가 된다.
원근법은 윤곽선의 형상을 통해 나타난다. 멀리 있는 물체는 작게, 가까이 있는 물체는 크게 보이며, 평행한 선들이 먼 쪽으로 수렴하는 등의 기하학적 왜곡 패턴이 깊이 지각의 근거가 된다.
텍스처의 방향과 밀도 변화도 중요한 단서다. 나뭇결, 무늬, 표면 상태와 같은 텍스처는 가까운 쪽에서는 조밀하게, 먼 쪽에서는 성기게 보인다. 이 변화의 기울기가 대상 표면의 기울기와 깊이를 나타낸다. 여기에 더해 물체나 배경에 관한 사전 지식, 즉 하늘은 위에, 지면은 아래에 있고 가까운 물체가 먼 물체를 가린다는 등의 지식도 화상에서 원근과 순서를 판단하는 데 활용된다.
입체 시각의 구현

source: https://www.stereoeye.jp/howto/principle_e.html
입체 화상을 구현하기위한 시도는 꾸준히 이어져왔다. 대개의 핵심은 위의 원근 지각 단서들을 인위적으로 만들어내어, 입체감을 유발하는 것이다.
나안 입체시
좌우 눈에 서로 다른 화상을 제시함으로써 입체감을 만들어내는 것이 기본 원리이나, 도구 없이도 이를 실현하는 방법이 있다.

source: https://www.stereoeye.jp/howto/parallel_e.html
평행법은 좌안용 화상을 왼쪽에, 우안용 화상을 오른쪽에 나란히 배치하고, 시선을 평행하게 유지하도록 하여 구현한다. 대상 인물에게는 먼 곳을 보듯 시선을 멀리 두고, 화면 너머 먼 곳을 보듯 긴장을 풀어 각 눈이 해당 화상을 응시하도록 한다.

source: https://www.stereoeye.jp/howto/cross_e.html
이와 반대로 좌안용과 우안용 화상의 배치를 바꾸고, 시선을 화면 앞에서 교차시켜 보도록 하여 구현할 수도 있는데, 이것을 교차법이라고 한다.
다만 이들 방법은 대상 인물에 시선 조절을 요구하고, 연습이 필요하다. 입체 화상을 구현해 도입하기 위한 배경 상황, 동기, 활용 방법 등을 고려하였을 때, 널리 채택되기에는 제한되는 방법이다.
안경을 사용하는 방법

source: https://www.stereoeye.jp/howto/anaglyph_e.html
아나글리프(Anaglyph)는 좌안용 화상을 적색으로, 우안용 화상을 청녹색으로 컬러 인코딩하여 하나의 화상에 중첩한 뒤, 적-청녹 색필터가 달린 안경으로 분리하는 방식이다. 특별한 디스플레이가 불필요하고 인쇄물에도 적용 가능하지만, 색 정보가 손실된다.
액정 셔터 글래스(LCD Shutter Glasses)는 디스플레이가 좌안용과 우안용 화상을 번갈아 표시하는 것에 동기화하여, 안경의 좌우 액정 셔터를 교대로 차폐하는 방식이다. 풀컬러 입체 화상이 가능하지만 고속 동기화와 고주사율 디스플레이가 필요하다.
프리즘 글래스(Prism Glasses)는 프리즘의 굴절을 이용한 안경이다. 좌안용과 우안용 화상을 각각 다른 방향으로 굴절시켜, 양 눈이 서로 다른 화상을 보도록 한다. 안경 자체에 광학적 요소가 포함되어 있어, 디스플레이는 일반적인 2D 화상을 표시하면 된다.
편광 글래스는 좌안용과 우안용 화상을 서로 다른 편광 상태로 인코딩하여, 편광 필터가 달린 안경으로 분리하는 방식이다. 풀컬러 입체 화상이 가능하고, 디스플레이의 밝기를 유지할 수 있지만, 편광 필터가 필요한 디스플레이와 안경이 필요하다.
나안 입체시 모니터
실험적인 시도로서 특별한 안경 없이도 맨눈으로 입체시가 가능한 모니터도 개발되어 있다. FUJIFILM의 3D 디지털카메라와 모니터, NINTENDO 3DS, AQUOS Phone 등이 그 사례이다. 안경이 불필요하지만, 입체시가 가능한 위치가 한정되어있기도 하다. 구현 방식으로는 두 가지 전략이 주로 사용된다.
패럴랙스 배리어(Parallax Barrier) 방식은 통상 액정 화면의 전면에 유광 차폐 슬릿을 배치하고, 우안용과 좌안용 화상을 가는 띠 모양으로 분리하여 좌, 우, 좌, 우 순으로 배열하는 방식이다. 슬릿이 각 눈에 해당하는 화상만 도달하도록 빛을 차단하여 입체감을 만들어낸다.
렌티큘라 렌즈(Lenticular Lens) 방식은 패럴랙스 배리어 방식의 슬릿에 의한 화면 어둠 문제를 해결하는 방법이다. 차폐 슬릿 대신 단면이 반원형인 원통형 볼록렌즈를 나란히 배열한 시트를 배치하여, 빛을 차단하는 대신 굴절시켜 각 눈의 방향으로 해당 화상의 빛을 유도한다. 빛이 차단되지 않고 굴절되어 분배되므로, 패럴랙스 배리어 방식에 비해 화면이 밝게 유지된다.
헤드 마운트 디스플레이와 VR 고글
가장 몰입감이 높으면서, 4D 영화를 제외하고 가장 상용화된 입체 시각 구현 방식은 헤드 마운트 디스플레이(Head-Mounted Display, HMD)이다. HMD는 머리에 장착하여 좌안과 우안 앞에 각각 독립된 디스플레이를 배치하도록 한다.
시야 전체를 화상으로 덮을 수 있어 몰입감이 높고, 두 디스플레이에 시차가 있는 화상을 공급함으로써 입체감을 구현한다. VR 고글은 이를 발전시켜 헤드 트래킹을 결합한 형태로, 머리의 방향에 따라 표시 화상이 연동하여 완전한 가상 공간 체험이 가능하다. 메타의 퀘스트 시리즈, 소니의 플레이스테이션 VR 등이 이들 제품의 대표적인 사례이다.
입체 화상 데이터와 그 획득
3차원 공간의 정보를 디지털로 표현하는 데 있어 주로 네 가지 전략 중 하나를 사용한다.
CT나 MRI 의료 영상에서는 볼륨 데이터(Volume Data) 방법을 주로 사용한다. 이 방법은 3차원 공간을 격자형으로 분할하여 각 셀(복셀, voxel)에 값을 할당한다.
각 화소에 색상 정보뿐 아니라 카메라로부터의 거리 값을 함께 기록해 RGB-D(RGB + Depth) 값으로 표현하기도 한다. 이 방법을 깊이 카메라 화상(Depth Camera Image)이라고 한다.
점군 데이터(Point Cloud Data)는 3차원 공간상의 좌표 점들의 집합으로 대상의 표면 형상을 표현하며, LiDAR 스캔 등을 통해 취득된다.
서피스 폴리곤 데이터(Surface Polygon Data)는 삼각형이나 사각형 등의 다각형 면의 집합으로 3차원 형상의 표면을 근사하는 방식으로, 컴퓨터 그래픽스 분야에서 광범위하게 사용된다.
이들 데이터를 취득하는 방법은 크게 수동 방식과 능동 방식으로 나뉜다. 수동 방식은 외부에서 빛을 발하지 않고 주변 빛에 의존하는 방식으로, 스테레오 카메라가 대표적이다. 수평으로 배치된 두 카메라의 시차를 분석하여 거리를 추정하는 방식으로, 인간의 양안 시차를 기반으로 한 입체 지각과 동일한 원리다.
능동 방식은 센서가 직접 빛을 방사하고 그 반사를 수신하여 거리를 계측한다. 마이크로소프트의 KINECT나 인텔의 RealSense처럼 근적외선의 반사 시간(Time of Flight)이나 구조광을 이용하는 깊이 센서는 RGB 컬러 정보와 거리 정보를 결합한 RGB-D 화상을 출력한다.
LiDAR는 레이저 펄스를 조사하고 반사되어 돌아오는 시간을 측정하여 정밀한 거리를 계측, 결과를 점군 데이터로 출력한다. 정밀도가 높아 자율주행 차량이나 건조물의 공간 조사에 활용된다.
입체 화상 데이터의 파일 형식
3차원 형상 데이터를 저장하고 교환하기 위한 표준 파일 형식이 여러 가지 존재한다.
STL 파일 형식
STL(Stereolithography)은 3차원 형상을 표현하는 가장 기초적인 파일 포맷 중 하나로, ‘Standard Triangulated Language’, ‘Standard Tessellation Language’를 의미한다. 형상을 작은 삼각형들의 집합으로 기술하며, 원칙적으로 삼각형 이외의 다각형이나 곡선은 취급하지 않는다. 색채 데이터나 위상(토폴로지) 정보도 포함하지 않는 단순한 형식으로, 3D 프린터에서 광범위하게 사용되고 있다.
STL은 ASCII 형식, 혹은 바이너리 형식으로 직렬화된다.
ASCII 형식
1
2
3
4
5
6
7
8
9
10
solid name
facet normal ni nj nk
outer loop
vertex v1x v1y v1z
vertex v2x v2y v2z
vertex v3x v3y v3z
endloop
endfacet
...(삼각형 패치 정보가 계속됨)
endsolid name
바이너리 형식
1
2
3
4
5
6
7
8
9
UINT8[80] - 헤더 (임의 문자열)
UINT32 - 파일 내 삼각형의 수
foreach triangle
REAL32[3] - 법선 벡터
REAL32[3] - 좌표 1
REAL32[3] - 좌표 2
REAL32[3] - 좌표 3
UINT16 - 미사용 데이터
end
바이너리 형식은 IEEE 754 방식, 리틀 엔디언으로 처리되는 것이 관례이지만 공식적으로 명세된 것은 없다. STL은 단순한 형식이지만, 삼각형 패치로만 형상을 표현하기 때문에, 복잡한 모델링이나 텍스처링이 필요한 경우에는 다른 포맷이 선호된다.
OBJ 파일 형식
OBJ 형식은 원래 Wavefront사의 ‘Advanced Visualizer’용으로 개발된 포맷으로, 현재는 다수의 CG 소프트웨어가 지원하는 사실상의 표준 중간 파일 형식으로 자리잡았다.
OBJ 파일에는 정점 좌표값, 정점 법선 벡터, 텍스처 좌표값, 볼록 다각형 면 데이터가 기록된다. 정점 좌표값, 정점 법선 벡터, 텍스처 좌표값 각각에 X, Y, Z 성분이 기재되며, 면(face) 데이터는 각 요소의 번호 배열로서 기록된다. 텍스처 데이터와 머티리얼(material) 데이터도 함께 기록할 수 있으며, 전체가 ASCII 형식으로 저장된다.
1
2
3
4
5
6
7
8
9
10
11
12
# 코멘트
mtllib 머티리얼파일명
g 그룹명
usemtl 머티리얼명
v x값 y값 z값 # 정점 좌표
...
vt x값 y값 # 텍스처 좌표
...
vn x값 y값 z값 # 정점 법선 벡터
...
f 정점번호/텍스처번호/법선번호 ... # 면 정의
...
glTF 파일 형식
glTF(GL Transmission Format)는 JSON을 사용하여 3D 모델과 씬(scene) 전체를 표현한다. Khronos Group의 3D Formats Working Group이 개발하였으며, 특정 API에 종속되지 않는 런타임 에셋 배포 포맷으로서 2016년 HTML5 개발자 컨퍼런스에서 발표되었다.
glTF는 3D 씬 데이터를 효율적으로 압축하여, WebGL 등의 API를 활용하는 애플리케이션의 런타임 처리를 최소화하도록 설계되어 상호운용성이 높다.
JSON 기반이므로 사람이 읽을 수 있으며, 메시, 머티리얼, 텍스처, 애니메이션 등 3D 씬의 구성 요소를 망라하여 기술할 수 있다. 머티리얼은 PBR(Physically Based Rendering, 물리 기반 렌더링) 방식을 채택하여 금속성(metallic)과 러프니스(roughness) 파라미터로 표현한다.
1
2
3
4
5
6
7
8
9
10
11
12
{
"materials": [
{
"name": "gold",
"pbrMetallicRoughness": {
"baseColorFactor": [1.000, 0.766, 0.336, 1.0],
"metallicFactor": 1.0,
"roughnessFactor": 0.0
}
}
]
}







