카메라 화각을 이용해 Intrinsic Parameter 계산하기 (Focal Length)
카메라 기반의 영상인식을 위해서 가장 처음 이해해야 할 것은 무엇일까?
그것은 카메라 파라미터, 즉 많은 사람들이 내부 파라미터라고 부르는 Intrinsic Parameter라고 생각된다.
내 개인적인 생각으로 Computer Vision 관련 서적에서 제일 중요한 부분 그것이 Camera Calibration이라고 생각된다.
이걸 이해하는 순간 Computer Vision의 절반은 이해했다고 본다.
오늘은 그 중에서도 카메라의 화각을 알고 있을때 Camera Calibration을 수행하지 않고, Ideal하다는 관점에서 Intrinsic Parameter를 추정해보자. 패턴보드 가지고 영상을 찍고 실제 Lens의 특성을 반영해 Intrinsic Parameter를 구하는 것이 더 정확하다는 건 누구나 알고 있다.
하지만, 그렇지 못한 상황에서 이러한 단순한 계산을 통해서 Ideal한 Intrinsic Parameter를 추정할 필요도 있다.
얼마 전 회사 동료가 카메라의 뷰를 시뮬레이션 하기 위해서 해당 카메라의 Intrinsic Parameter가 필요한 경우가 있었다.
물론 실제 그 카메라가 있고, Camera Calibration을 수행할 수 있다면 그걸 사용하면 되겠지만, 아직 원하는 FoV의 카메라가 없다면?
그런 경우에는 이런 단순하지만 Idle한 Parameter가 필요하다.
자, 각설하고 어떻게 구하는지 살펴보자.
카메라 FoV를 활용한 Intrinsic parameter 계산
Intrinsic Parameter (K)는 다음과 같이 구성된다.
Intrinsic Parameter는 Focal length, Skew factor, Principal Point로 구성된다.
이것들만 계산하면 우리의 오늘 일은 끝.
Skew factor (λ)
뒤틀림 정도를 나타내는 값으로 현재 CCD에서 Skew factor 0이라고 생각하면 된다.
Principal Point (Ox, Oy)
Principal Point (Ox, Oy)는 Ideal하게는 영상의 Optical Center가 된다.
예를 들어, 8.3MP 카메라의 경우 그 해상도가 3840x2160이므로 Principal Point는 아래와 같다.
- Ox = 1920
- Oy = 1080
Focal Length (fx, fy)
Focal Length가 이 계산의 핵심이다.
이 계산은 아래 그림이 가장 이해하기 쉽게 나타내고 있는 것 같다. (출처는 그림 아래에)
즉, 렌즈부터 CCD까지의 거리 이것이 초점거리가 된다.
따라서, 화각 (FoV)이 커지면 초점거리는 짧아지고, 화각이 줄어들면 초점거리는 길어진다.
(오타쿠들이 쓰는 망원렌즈의 렌즈 구경이 긴게 바로 이 원리 때문이다.)
이 초점거리는 아래 식으로 계산이 가능하다.
여기서 θ는 화각을 의미하고, D는 CCD의 대각 크기를 의미한다.
예를 들어 화각이 100도인 CCD가 1/1.7인치인 카메라가 있다고 가정해보자.
해당 센서의 경우 센서 업체의 정보에 따라 D를 계산하면 대략 9.5mm가 된다.
1/1.7인치라는 크기는 실제 센서의 실측치를 의미하진 않는다. 이건 과거의 센서 크기를 표현하는 관습에 따라 남아 있는 표기법일 뿐이다.
따라서 실제로는 16mm/1.7 = 9.5mm가 된다.
이제 focal length는 다음과 같이 계산할 수 있다.
이 focal length는 대각선에 대한 것이므로 이를 fx, fy로 분해해서 계산해주면 우리가 원하는 focal length 계산은 끝이 난다.
센서의 Aspect ratio가 16:9라면, CCD의 가로 (W)와 세로 (H)는 다음과 같다.
간단한 피타고라스의 정리로 계산이 가능하다.
- W = 8.27 mm
- H = 4.65 mm
이를 사용해서 fx, fy를 구하면 다음과 같다.
- fx = 3.99mm x 3840 pixel / 8.27 mm = 1852 pixel
- fy = 3.99mm x 2160 pixel / 4.65 mm = 1851 pixel
즉, 우리가 구하려던 fx = 1852, fy = 1851이 된다.
계산된 Intrinsic Parameter
생각보다 쉬운 중학교 수학만으로도 계산할 수 있다.
회사에서 누가 묻길래 오래간만에 정리해서 알려줬는데, 의외로 모르는 사람들이 많은 거 같아서 정리해둔다.
누군가에겐 도움이 되길...