핀홀 카메라 모델

주변 센서 중에 가장 많이 이용되는 것 중 하나가 카메라인 것 같아요. 많은 데이터를 얻을 수 있으면서도 값도 싸고 소형화도 가능해 어디든 잘 활용될 수 있어요. 그리고 사용하기 쉽게 패키징 되어있어 유저 입장에서는 별다른 노력 없이도 익숙하게 사용할 수 있죠. 

그런데 카메라의 개괄적인 모델만 알고 있어도 사진찍는데도 도움이 될 뿐더러 Computer Vision에서 만나는 여러문제를 이해할 수 있습니다. 가장 간단하고 기본적인 Pinhole camera model을 가지고 차근차근 살펴볼게요.

이후 포스팅에 사용되는 대부분의 그림은 Stanford의 Silvio교수가 강의한 CS231A 클래스의 그림을 사용하도록 하겠습니다.

우선 저희가 어떤 object를 필름 혹은 CCD에 담기 위해서는 어떻게 해야할까요? 

위와 같이 찍으려는 Object에서 반사된 ray를 필름에 모두 담으면 각 픽셀마다 object의 여러부분에서 반사된 ray들이 모두 합쳐져서 이미지를 얻을 수 없게 될 겁니다. 그렇다면 벽을 치고 그 벽에 작은 구멍(조리개, Aperture)만 뚫어서 픽셀당 하나의 ray만 닿을수 있게끔 해볼 수 있겠죠? 그림을 보면 다음과 같이 보일겁니다.
이 것이 가장 간단한 Pinhole camera model입니다. 이렇게 대략적으로 3D object의 한 점과 fixel간에 1:1매칭 관계를 만들 수 있고 그 결과로 필름에 object를 매핑할 수 있습니다. 그럼 Aperture의 크기를 변화시켜 볼까요? 크기를 키우면 들어오는 ray가 많아져 1:1매칭이 되질 않습니다. 그러므로 흐릿한 영상이 얻어지겠죠. 

위의 그림은 aperture를 줄여가면서 찍은 사진들 입니다. 확실히 구멍이 작았을때 더 선명한 사진을 얻을 수 있죠. 그럼 계속해서 줄이면 어떻게 될까요? 아마 빛이 충분히 들어오지 못해 어두운 사진을 얻게 될겁니다. 또한 빛의 회절현상으로 더 흐릿한 사진을 얻게 될 수 도 있을 것 같습니다.

그래서 충분한 빛을 모으기 위한 방법으로 렌즈가 사용됩니다. 볼록렌즈로 빛을 모아서 한점에 맞추면 초점이 잘맞아서 선명하게 보입니다. 그러나 그 외는 초점이 맞질 않아 흐릿하게 보여 사진을 찍을 때 out of focus가 일어납니다.
위 그림에서 보면 Object의 점 P보다 멀거나 가까울 땐 초점이 맞지 않아 그 부분에서 흐릿한 영상을 얻게 됩니다. 그런데 디지털 카메라나 스마트폰의 카메라는 밑의 사진 같이 극단적인 경우가 아니면 자동모드에서 모든 지점에 초점이 잘 맞는것을 볼 수 있습니다. 아마 Multi-AF 기술이거나 aperture를 작게 하고 iso를 높이거나 하드웨어 성능이 높아진 만큼 software로 후처리해 밝게 만드는 방법을 사용하지 않을까 합니다. 


그럼 실제 pinhole 카메라 모델에서 3D object가 2D이미지로 어떻게 매핑 되는지 확인해 볼까요?

위의 이미지만 잘 기억하고 있으면 됩니다. 여기서 $f$는 focal length $O$는 camera center입니다. 그래서 이렇게 3차원 점 $P$를 2차원 점 $P'$에 맵핑하는 것을 Projective transformation이라고도 합니다. $z$는 초점(O)부터 P까지의 거리, $f$는 focal length로써 초점부터 이미지 평면과의 거리로 나타낼 수 있습니다. $z:f=x:x'$와 같은 비례식을 이용한다면, 이 관계는
$$P=\begin{bmatrix} x\\ y\\ z \end{bmatrix} \rightarrow P'=\begin{bmatrix}x'\\y' \end{bmatrix}$$
$$x'=f\frac{x}{z},\,  y'=f\frac{y}{z}$$
그런데 이미지 픽셀은 왼쪽 아래꼭지점을 Origin으로 보고 좌표를 계산하기 때문에 결과로써 center값을 더해주어야하죠. 그럼 다시 매핑 관계를 표현하면
$$(x,\,y,\,z) \rightarrow (f\frac{x}{z}+c_x,\, f\frac{y}{z}+c_y)$$
또한 한가지 더 고려해야할 점은 보통 가로 세로 같은 수의 fixel이 있거나 가로 세로 같은 크기의 fixel들로 구성되어 있지 않습니다. 그래서 meter to fixel 표현에서 고려해야하죠.
$$(x,\,y,\,z) \rightarrow (fk\frac{x}{z}+c_x,\, fl\frac{y}{z}+c_y)$$
$k,l$ : pixel/m 이고 $f$: meter입니다. 그러므로 $fk$을 $\alpha$, $fl$을 $\beta$로 간단히 하면 최종적으로
$$(x,\,y,\,z) \rightarrow (\alpha \frac{x}{z}+c_x,\, \beta \frac{y}{z}+c_y)$$
로 나타낼 수 있습니다. 이 $\alpha, \beta$를 구하는것이 intrinsic calibration으로 미리 알고있는 가로세로길이의 체커보드로 구할 수 있는 파라미터입니다.

Share this

Related Posts

Previous
Next Post »