Computer Vision Theory : 3차원 비전
3차원 비전(3D Vision)
지금까지 다룬 알고리즘은 모두 2차원 평면 위의 픽셀을 대상으로 합니다. 그러나 카메라가 촬영하는 실제 대상은 3차원 공간에 놓여 있으며, 이미지는 그 공간을 평면에 눌러 담은 결과입니다. 이 과정을 투영(Projection)이라 합니다.
투영이 일어나는 순간 깊이 정보가 사라집니다. 카메라에서 1m 떨어진 작은 물체와 10m 떨어진 큰 물체가 이미지에서 같은 크기로 찍힐 수 있으며, 이미지만 보고서는 둘을 구분할 수 없습니다. 하나의 픽셀은 하나의 점이 아니라 카메라에서 뻗어 나가는 하나의 직선 전체에 대응하기 때문입니다.
3차원 비전(3D Vision)은 이렇게 잃어버린 깊이 정보를 되찾아, 이미지로부터 대상의 위치와 형상을 공간 좌표로 복원하는 분야입니다. 움직임 추적에서 언급한 깊이 지도(Depth Map)와 에고 모션(Ego Motion)도 여기에 속합니다.
자율 주행 자동차가 앞차와의 거리를 재거나, 로봇이 물체를 집기 위해 위치를 파악하거나, 증강 현실이 가상 객체를 실제 공간에 배치하는 작업은 모두 3차원 정보를 필요로 합니다. 2차원 검출만으로는 무엇이 어디에 보이는지까지만 알 수 있고, 실제로 얼마나 떨어져 있는지는 알 수 없습니다.
카메라 모델(Camera Model)
깊이를 복원하려면 먼저 3차원 공간의 점이 어떤 규칙으로 2차원 픽셀이 되는지를 수식으로 표현해야 합니다. 가장 널리 사용되는 것이 핀홀 카메라 모델(Pinhole Camera Model)로, 렌즈를 아주 작은 구멍 하나로 단순화한 모형입니다.
카메라 앞의 점 \((X, Y, Z)\)가 이미지 평면에 맺히는 위치는 다음과 같이 계산됩니다. 여기서 \(f\)는 초점 거리(Focal Length)이며, \(Z\)는 카메라로부터의 깊이입니다.
두 좌표 모두 \(Z\)로 나누어지므로, 같은 물체라도 멀어질수록 작게 맺힙니다. 멀리 있는 물체가 작게 보이는 현상이 이 수식 하나로 설명되며, 동시에 서로 다른 \((X, Y, Z)\)가 같은 \((x, y)\)로 맺힐 수 있다는 사실도 확인할 수 있습니다.
이 관계를 행렬로 정리한 것이 내부 파라미터(Intrinsic Parameter)입니다. 픽셀 단위의 초점 거리 \(f_x, f_y\)와 이미지 중심인 주점(Principal Point) \(c_x, c_y\)로 구성되며, 카메라 자체의 고유한 성질을 나타냅니다.
반면 외부 파라미터(Extrinsic Parameter)는 카메라가 공간 어디에 어떤 방향으로 놓여 있는지를 나타내며, 회전 행렬(Rotation Matrix)과 이동 벡터(Translation Vector)로 구성됩니다. 카메라를 옮기면 외부 파라미터는 바뀌지만 내부 파라미터는 그대로입니다.
- Tip : 내부 파라미터는 카메라와 렌즈의 조합마다 고유하므로 한 번 구해 두면 계속 사용할 수 있습니다. 다만 렌즈를 교체하거나 초점 거리를 조정하면 다시 구해야 합니다.
카메라 캘리브레이션(Camera Calibration)
실제 카메라는 핀홀이 아니라 렌즈를 사용하므로 모델과 오차가 생깁니다. 대표적인 것이 렌즈 왜곡(Lens Distortion)이며, 직선으로 찍혀야 할 물체의 가장자리가 휘어 보이는 현상으로 나타납니다.
왜곡은 크게 두 가지로 나뉩니다. 방사 왜곡(Radial Distortion)은 이미지 중심에서 멀어질수록 심해지며, 가장자리가 바깥으로 부푸는 배럴 왜곡(Barrel Distortion)과 안쪽으로 오목해지는 핀쿠션 왜곡(Pincushion Distortion)으로 구분됩니다. 접선 왜곡(Tangential Distortion)은 렌즈와 센서가 완전히 평행하지 않을 때 발생합니다.
카메라 캘리브레이션(Camera Calibration)은 이러한 내부 파라미터와 왜곡 계수를 구하는 과정입니다. 크기와 간격을 정확히 아는 패턴을 여러 각도에서 촬영한 뒤, 패턴이 실제로 찍힌 위치와 모델이 예측한 위치의 차이가 최소가 되도록 값을 추정합니다.
이때 사용하는 패턴으로는 체스보드(Chessboard)가 가장 널리 쓰입니다. 흑백이 교차하는 모서리는 특징 검출에서 다룬 모서리 검출로 정확하게 찾아낼 수 있고, 간격이 일정해 실제 좌표를 알기 쉽기 때문입니다.
OpenCV에서는 findChessboardCorners로 패턴의 모서리를 찾고, calibrateCamera로 파라미터를 계산한 뒤, undistort로 왜곡을 제거합니다. 광각 렌즈를 사용하거나 정밀한 측정이 필요한 경우라면 캘리브레이션 없이 얻은 좌표는 신뢰할 수 없습니다.
- Tip : 패턴은 화면의 여러 위치와 각도에서 15장 이상 촬영하는 것이 좋습니다. 비슷한 자세의 사진만 많이 찍으면 장수와 무관하게 정확도가 올라가지 않습니다.
스테레오 비전(Stereo Vision)
한 장의 이미지로는 깊이를 알 수 없지만, 서로 떨어진 두 대의 카메라로 같은 장면을 찍으면 깊이를 계산할 수 있습니다. 사람이 두 눈으로 거리를 가늠하는 원리와 같으며, 이를 스테레오 비전(Stereo Vision)이라 합니다.
가까운 물체일수록 두 이미지에서의 위치 차이가 크고, 먼 물체일수록 차이가 작습니다. 이 위치 차이를 시차(Disparity)라 하며, 시차 \(d\)로부터 깊이 \(Z\)를 다음과 같이 구할 수 있습니다. \(B\)는 두 카메라 사이의 거리인 기선(Baseline)입니다.
수식에서 알 수 있듯 깊이는 시차에 반비례합니다. 그러므로 가까운 곳은 정밀하게 측정되지만, 멀어질수록 시차가 작아져 같은 오차라도 깊이 오차는 급격히 커집니다. 기선을 넓히면 먼 거리의 정확도가 올라가지만 두 카메라가 함께 보는 영역이 줄어들므로, 측정하려는 거리에 맞춰 기선을 정해야 합니다.
시차를 구하려면 한쪽 이미지의 점이 다른 쪽 이미지의 어디에 대응하는지를 찾아야 합니다. 다행히 대응점은 이미지 전체가 아니라 에피폴라 선(Epipolar Line)이라는 하나의 직선 위에만 존재하며, 이 성질을 에피폴라 기하(Epipolar Geometry)라 합니다.
두 이미지를 변환해 에피폴라 선이 가로로 나란히 놓이도록 맞추면, 대응점 탐색은 같은 행을 좌우로 훑는 1차원 문제로 단순해집니다. 이 과정을 정합(Rectification)이라 하며, 스테레오 처리의 연산량을 크게 줄여 줍니다.
OpenCV는 정합된 이미지로부터 시차를 계산하는 StereoBM과 StereoSGBM을 제공합니다. StereoBM은 블록 단위로 비교해 빠르지만 무늬가 없는 영역에서 값이 비게 되고, StereoSGBM은 주변과의 일관성까지 고려해 더 조밀한 결과를 얻는 대신 느립니다.
- Tip : 스테레오 비전은 무늬가 없는 면에 취약합니다. 흰 벽처럼 모든 지점이 똑같이 생긴 영역에서는 대응점을 특정할 수 없어 시차를 구할 수 없습니다.
깊이 정보를 얻는 다른 방법
스테레오 비전처럼 장면에 아무것도 투사하지 않고 받아들인 빛만으로 깊이를 구하는 방식을 수동형(Passive)이라 합니다. 반대로 빛이나 신호를 직접 쏘아 되돌아온 결과로 깊이를 재는 방식을 능동형(Active)이라 합니다.
능동형에는 빛을 쏘아 되돌아오는 시간을 재는 ToF(Time of Flight), 알려진 패턴을 투사해 그 일그러짐으로 형상을 계산하는 구조광(Structured Light), 레이저를 사용하는 라이다(LiDAR) 등이 있습니다. 무늬가 없는 면에서도 안정적으로 동작하지만 장비가 비싸고, 햇빛이 강한 실외에서는 투사한 신호가 묻히기 쉽습니다.
카메라가 한 대뿐이더라도 카메라를 움직이면 서로 다른 위치에서 촬영한 여러 장을 얻을 수 있습니다. 이 이미지들로부터 카메라의 이동 경로와 장면의 3차원 구조를 동시에 복원하는 방법을 SfM(Structure from Motion)이라 하며, 이를 실시간으로 수행하면서 지도를 만들어 가는 것이 SLAM(Simultaneous Localization and Mapping)입니다.
최근에는 한 장의 이미지만으로 깊이를 추정하는 딥러닝 모델도 널리 사용됩니다. 물체의 상대적인 크기나 가려짐, 원근감 같은 단서를 학습해 깊이를 예측하는 방식으로, 별도의 장비 없이 사용할 수 있다는 장점이 있습니다.
다만 단안 깊이 추정은 원리상 절대적인 거리를 알 수 없습니다. 같은 장면을 그대로 두 배 크게 만들고 두 배 멀리 놓으면 이미지가 동일하기 때문이며, 이를 스케일 모호성(Scale Ambiguity)이라 합니다. 실제 거리가 필요하다면 기준이 될 크기나 다른 센서의 값을 함께 사용해야 합니다.
깊이 측정 방식 정리
| 방식 | 구분 | 장점 | 한계 |
|---|---|---|---|
| 스테레오 비전 | 수동형 | 장비가 저렴하고 실외에 강함 | 무늬 없는 면에 취약, 캘리브레이션 필요 |
| ToF · 라이다 | 능동형 | 무늬와 무관하게 안정적 | 장비 비용이 높음 |
| 구조광 | 능동형 | 근거리에서 정밀도가 높음 | 햇빛이 강한 실외에 취약 |
| SfM · SLAM | 수동형 | 카메라 한 대로 넓은 공간 복원 | 연산량이 크고 누적 오차 발생 |
| 단안 깊이 추정 | 수동형 | 추가 장비가 필요 없음 | 절대 거리를 알 수 없음 |
어느 방식을 사용하든 카메라의 내부 파라미터를 모르면 픽셀 좌표를 실제 거리로 환산할 수 없습니다. 그러므로 3차원 비전에서는 캘리브레이션이 선택이 아니라 출발점이 되며, 이후의 모든 계산이 그 정확도에 좌우됩니다.
- Tip : 측정 환경이 실내인지 실외인지, 대상까지의 거리가 어느 정도인지, 실시간 처리가 필요한지에 따라 적합한 방식이 달라집니다. 여러 방식을 함께 사용해 서로의 약점을 보완하는
센서 융합(Sensor Fusion)도 흔히 사용됩니다.
- Writer by : 윤대희
공유하기
Kakao
Naver
Twitter
LinkedIn
Facebook
댓글 남기기