카메라와 입력 확장
이 문서는 물리 카메라의 카메라 모델, 파라미터 및 기타 사용상의 주의점, 그리고 custom camera를 사용하여 입력을 확장하는 방법을 소개합니다.

Input frame
Input frame은 AR의 기본 데이터 단위입니다. 카메라 또는 다른 데이터 소스에서 캡처한 한 frame의 모든 관련 정보를 나타냅니다. input frame은 일반적으로 다음을 포함합니다.
- Raw image data(camera image)
- 카메라 파라미터(예: intrinsics)
- Timestamp
- 월드 좌표계에서의 카메라 transform matrix
- Tracking status
이 정보는 AR 알고리즘에 localization, tracking, rendering 등에 필요한 시공간 context data를 제공합니다.
물리 카메라
현재 전자 기기에 사용되는 카메라는 보통 여러 개의 렌즈와 반사경으로 구성됩니다. 하지만 일반적으로 실제 광학 구조를 사용해 카메라 모델을 구축하지 않고, 단순화된 모델을 사용합니다.
Pinhole camera model

이는 일반적으로 사용되는 가장 단순한 모델입니다. 빛이 작은 구멍을 통과하여 180도 회전한 상을 만들지만, 카메라 출력 데이터에서는 이미지를 바로 세웁니다. 이 모델을 설명하려면 여섯 개의 파라미터가 필요합니다. pixel width와 height \(w, h\), pixel focal length \(f_x, f_y\), principal point pixel position $c_x, c_y$입니다. pixel width와 height가 scale될 때 pixel focal length와 principal point pixel position도 함께 scale되므로 이미지 위치를 유지할 수 있습니다.
OpenCV camera model
일부 카메라에는 뚜렷한 radial distortion과 tangential distortion이 있습니다. OpenCV camera model은 pinhole camera model에 고차 파라미터를 추가하여 radial distortion과 tangential distortion을 설명합니다. radial distortion은 $k_1, k_2, k_3, \cdots$로 설명합니다. tangential distortion은 $p_1, p_2$로 설명합니다.
참고
일부 trackers는 OpenCV camera model을 지원하지 않습니다.
OpenCV fisheye camera model
Fisheye camera는 perspective projection을 통해 큰 시야각의 내용을 더 작은 imaging area로 압축합니다. OpenCV fisheye camera model은 distortion correction을 포함하지 않으며, pinhole camera model의 여섯 파라미터를 기반으로 $k_1, k_2, k_3, k_4, \cdots$를 사용해 설명합니다.
참고
일부 trackers는 OpenCV fisheye camera model을 지원하지 않습니다.

카메라 방향과 이미지 방향
휴대폰에서 보통 가로로 들고(정상 세로 방향에서 반시계 방향으로 90도 회전) 화면 표시 방향도 가로인 경우, 후면 카메라가 출력하는 이미지는 화면에서 실제 scene과 같은 방향으로 표시됩니다. 화면의 물리적 방향은 바꾸지 않고 화면 표시 방향만 바꾸면 물리 카메라가 출력하는 이미지 방향은 바뀌지 않습니다. 정상 세로 방향으로 들고 화면 표시 방향도 정상 세로인 경우, 후면 카메라가 출력하는 이미지는 실제 scene과 일치하도록 화면에 표시되기 전에 시계 방향으로 90도 회전해야 합니다. 화면 표시 방향이 회전할 때 카메라 이미지를 rendering하려면 실제 scene과 일치하도록 반대 방향의 회전 보상이 필요합니다.
카메라 방향과 이미지 방향은 일반적으로 device의 natural orientation을 기준으로 정의됩니다.
휴대폰
Android
Android는 natural orientation을 정의하며, 이는 휴대폰을 정상적으로 세로로 들었을 때의 방향입니다. inertial measurement unit(IMU)도 이 방향을 기준으로 사용합니다. 이 방향에 대한 카메라 출력 이미지의 회전각은 카메라 파라미터로 얻을 수 있습니다.
iOS
iOS에서는 natural orientation이 명시적으로 정의되어 있지는 않지만, inertial measurement unit은 Android와 같은 기준을 사용합니다.
태블릿
태블릿의 natural orientation은 일부는 가로 방향이고, 일부는 휴대폰과 같이 정상 세로 방향입니다.
안경
안경의 natural orientation은 일반적으로 가로 방향입니다.
카메라 이미지를 rendering할 때는 카메라 방향과 화면 방향을 종합하여 rendering합니다.
카메라 유형과 camera flip
휴대폰에는 일반적으로 후면 카메라와 전면 카메라가 있습니다. 전면 카메라가 출력하는 이미지는 거울을 시뮬레이션하기 위해 화면에 표시하기 전에 좌우 반전해야 합니다. 좌우 반전을 하지 않으면 매우 어색하게 보입니다.
입력 확장
EasyAR는 custom camera를 사용한 입력 확장을 지원합니다. custom camera는 외부에서 input frames를 얻어 AR 시스템으로 전달하여 trackers가 사용할 수 있도록 할 수 있습니다. custom camera의 이미지 데이터 획득은 직접 구현할 수 있습니다.
플랫폼 전용 가이드
카메라와 입력 확장의 사용은 플랫폼과 밀접하게 관련됩니다. 대상 플랫폼에 따라 다음 가이드를 참고하여 개발하십시오.