Structured Light의 원리와 배경
이번 글에서는
Structured Light
에 대하여 살펴보겠습니다.
Structured Light 는
특정 패턴의 빛을 객체 비추고,
패턴이 어떻게 객체의 표면에서
변형되는지를 관찰하여
3D 정보를 추출하는 방법입니다.
차근차근 살펴보겠습니다.

이전까지는 주로 카메라를 여러대
이용하여 Stereo 를 구성하여
3D 정보를 추출했습니다.
그림과 같이 프로젝터를 이용하여
패턴을 직접 쏴서,
객체 위에 나타나는 패턴을 이용해서도
3D 정보 추출이 가능합니다.
우리는 프로젝터 1개와
카메라 1개로 구성된 환경을
가정하고 살펴보도록 하겠습니다.

패턴은 우리가 프로젝터를 통하여
직접 쏘기 때문에 컨트롤이 가능합니다.
이렇게 쏜 패턴이 객체 위에서
울툴불퉁 하기 때문에 변형이 발생합니다.
세로 일직선의 빛을 쐈는데
객체 위에서 구부러진다면
얼마나 구부러지는지를 이용하여
Depth 를 구할 수 있습니다.
실제 응용: Kinect와 고속 스캔 사례

마이크로소프트가 개발하여 Xbox 에서
사람의 움직임을 추적하기 위한
Kinect 라는 센서가 있습니다.

보시면 사진이 2장 입니다.
위에가 우리가 쏜 패턴이고
아래는 객체 위에서 변형이
일어난 것을 확인할 수 있습니다.
이 변형을 이용하여
Disparity 를 구할 수 있습니다.

저기에 발사된 수많은 점들은
무작위로 만든 것이 아니라,
딱 보면, 대응점이 어디인지
매우 구분이 쉽도록
설계된 정밀한 패턴입니다.

우리가 쏜 패턴의 원래
모양을 알고 있고,
객체 표면에서의 패턴을
촬영한 사진이 있으므로,
우리는 대응점을 구할 수 있습니다.
패턴 투사 방식과 Binary 코드 활용

예를 들어, 포인트 한 개만 쏴 보겠습니다.
객체 위에 점이 하나 나타납니다.
이 점이 무조건 대응점이 됩니다.
우리는 점을 하나만
프로젝트를 통하여
쏘고 있으니까요.
이렇게 대응점을 찾으면
모든 이미지의 픽셀에
해당하는 대응점을 찾기 위해서
이미지를 모든 픽셀 수
만큼 찍어야 하므로,
세로 직선을 쏴서,
촬영하면 이미지 화질의 열에
해당하는 만큼만 촬영해주면 됩니다.

한 점씩 대응점을 촬영하면
3시간 소요되던 작업이
21초로 줄었습니다.

여러 줄을 쏴서 시간을
더 단축할 수도 있습니다.
단, 이렇게 여러 줄을 이용하기 위해서는
어떤 줄이 객체 위에서
어느 줄인지 정확하게 대응되는 것을
찾을 수 있어야 합니다.

우리는 7줄을 사용하여
3장의 이미지 만으로
몇 번째 패턴인지 Binary code 를
이용하여 알 수 있습니다.

그림과 같이 각 패턴을 찍은
3장의 이미지가 있고,
동일한 위치에 1, 0, 1 을 확인한다면
5번째 줄인 것을 알 수 있습니다.
n 장의 이미지가 있으면
2의 n승 -1 만큼의 줄을 이용하고,
구분할 수 있습니다.

Structured Light 의 단점으로는
프로젝터를 쏘는 빛이 객체에
잘 나와야 하므로,
어두운 환경에서 주로 찍어
RGB 가 안 나온다던가,
IR 프로젝터와 카메라를 쓰는 경우,
야외 환경은 사용 못한다는 단점과
대상이 우리가 쏘는 패턴과
오해 될 만한 어떤 패턴이 있거나,
움직이면 안된다는 단점이 있습니다.
항목 | 설명 |
---|---|
사용 장비 | 프로젝터 1개 + 카메라 1개 |
핵심 원리 | 투사된 패턴의 변형으로 Disparity 계산 |
Binary Coding | 줄마다 2진 값을 부여해 매칭 정확도 향상 |
대표 사례 | 마이크로소프트 Kinect 센서 |
장점 | 빠른 속도, 높은 정밀도, 전체 픽셀 활용 |
단점 | 야외 환경 부적합, 움직임에 민감함 |
그런 건 난 잘 모르겠고,
Structured Light는 객체에
빛의 패턴을 투사하고
카메라로 촬영하여 정밀한
3D 정보를 복원하는 기술
참고자료
Slide credit : Shree Nayar
First Principles of Computer Vision
http://www.cs.cmu.edu/~16385/s15/lectures/Lecture19.pdf