논문

하루에도 수만개의 글자를 읽고 있습니다. 하루에도 수백장의 종이를 들춰 읽습니다.
이것은 그 읽기에 대한 일기입니다.

Accurate camera calibration using iterative refinement of control points

[cite]http://10.1109/ICCVW.2009.5457474[/cite]

1. Introduction

카메라 캘리브레이션은 3D 환경을 다루는 영역에서는 매우 중요한 알고리즘이고 오차에 민감하기 때문에 조금의 성능 향상이라도 이득을 볼 수 있는 편입니다. 캘리브레이션 방법은 두가지로 나뉘는데, 이미 알고 있는 3D 물체를 이용는 방법과 카메라 스스로 캘리브레이션 하는 방법으로 나눌 수 있습니다. 스스로 캘리브레이션 하는 방법에는 평면 패턴을 이용한 방법도 포함합니다. 그 중 그 편리성 때문에 평면 패턴을 이용하는 방법이 주로 사용되고 있습니다.

평면 패턴을 이용하는 방법은 크게 컨트롤 포인트, 즉 사각형의 모서리나 원의 중심을 찾아낸 뒤에 그것들을 이용하여 파라미터를 구하는 과정으로 진행됩니다. 때문에 주된 오차는 계산 과정보다는, 찾아낸 컨트롤 포인트의 위치에 오차가 있는 경우가 대부분입니다.

이 논문에서는 반복적인 과정을 통해 컨트롤 포인트의 위치를 정교화하는 방법을 제안합니다. 이는 사각형이나 원, 링의 형태에 모두 적용할 수 있는 방법입니다.

2. Related Work

패턴에 있어 오차가 발생하는 주된 이유는 실제로 촬영된 이미지가 정면을 바라보고 찍힌 것이 아니기 때문입니다. 더군다나 카메라 자체의 왜곡 또한 영향을 받습니다. 이러한 이미지는 결국 컨트롤 포인트의 위치를 정확하게 찾아내지 못하게 만듭니다.

3. Traditional Camera Calibration

사각형 컨트롤 포인트를 사용하는 패턴은 아주 일반적으로 사용되는 방법입니다. Matlab과 OpenCV에도 알고리즘이 들어가있습니다. 최소 두장의 이미지 만으로도 캘리브레이션이 가능하며, 대여섯장만 있어도 높은 정확도를 보여줍니다. 그 과정은 코너의 검출과 그 것을 이용하여 Levenberg-Marquardt 방법을 이용하여 최적화하는 부분으로 이루어집니다.

3.1 OpenCV Square Control Point Refinement

OpenCV에서는 Harris의 방법을 사용하고 나서 Subpixel 방법을 이용하여 코너를 검출 합니다. Subpixel은 아래 수식을 만족한다면 최적화된 컨트롤 포인트라 생각할 수 있습니다.

$$\sum_{i \in N} \Delta_{p_i} \times (q - p_i) = 0$$

$ q $ 가 우리가 찾아야 할 컨트롤 포인트입니다. $ p_i $는 컨트롤 포인트 주변 N개의 이웃 픽셀이고 그곳의 그래디언트를 $ \Delta_{p_i} $로 표시합니다.

$$q = ( \sum_{i \in N} \Delta^T_{p_i} \Delta_{p_i})^{-1} \sum_{i \in N} \Delta^T_{p_i} \Delta_{p_i} p_i$$

를 계산하여 q를 구할 수 있습니다. 하지만 패턴 자체가 왜곡되어있으며 정면으로 촬영되지도 않았기 때문에 정확한 컨트롤 포인트가 계산되기는 쉽지 않습니다. 이것은 그래디언트가 에지에 수직이 아니기 때문에 나타납니다.

4. Iterative Control Point Refinement

이미지에 canonical transform을 수행하여 canonical view로 변환하면, 그래디언트가 에지에 수직이게 변하는 것을 볼 수 있습니다. 이렇게 변환된 이미지에서 컨트롤 포인트를 검출하면 더 결과가 좋을 것입니다. 이를 이용한 새로운 방법을 이야기해 봅시다.

처음 반복에서는 OpenCV와 같은 방법으로 카메라 파라미터를 계산하여 초기값으로 사용합니다. 그런 다음 이 파라미터를 이용하여 이미지의 왜곡을 제거한 뒤 정면에서 바라본 이미지로 역투영합니다. 이 이미지에서 컨트롤 포인트를 검출한 뒤, 이를 다시 카메라 좌표계로 투영시킵니다. 투영된 좌표를 이용하여 다시 카메라 파라미터를 계산합니다. 이러한 과정을 반복하면서 파라미터가 수렴할 때까지 반복합니다.

사실 이 방법은 사각형 패턴이 아니더라도 사용할 수 있는 장점이 있습니다.

기존의 OpenCV Iterative, Square iterative, Circle, Circle Iterative, Ring, Ring Iterative를 각각 비교하였을 때, RMS 오차가 15 ~ 1.7 픽셀에서 Iterative 방법을 적용할 결과, 1.7 ~ 0.23 픽셀로 줄어들었습니다.

5. Evaluation

합성 영상, 실제 영상에 대해 모두 성능 향상을 확인할 수 있었습니다.


Add a Comment Trackback