カメラと入力拡張
この記事では、物理カメラのカメラモデル、パラメータ、その他の使用上の注意点、および custom camera を使用して入力を拡張する方法について説明します。

Input frame
Input frame は AR における基本データ単位です。カメラまたはその他のデータソースから取得された 1 frame の関連情報すべてを表します。input frame には通常、次が含まれます。
- Raw image data(camera image)
- カメラパラメータ(intrinsics など)
- Timestamp
- ワールド座標におけるカメラ transform matrix
- Tracking status
これらの情報は、localization、tracking、rendering などに必要な時空間コンテキストデータを AR アルゴリズムに提供します。
物理カメラ
現在の電子機器で使用されるカメラは、通常、複数のレンズとミラーで構成されています。ただし、カメラモデルを構築する際には実際の光学構造は一般的に使用せず、簡略化されたモデルを使用します。
Pinhole camera model

これは通常使用される最も単純なモデルです。光は小さな穴を通過して 180 度回転した像を形成しますが、カメラが出力するデータでは像が正立されます。このモデルを記述するには 6 つのパラメータが必要です。pixel 幅と高さ \(w, h\)、pixel 焦点距離 \(f_x, f_y\)、principal point の pixel 位置 \(c_x, c_y\) です。pixel 幅と高さをスケーリングすると、pixel 焦点距離と principal point の pixel 位置も対応してスケーリングされるため、像の位置を保つことができます。
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 によって大きな視野角の内容を小さな撮像領域に圧縮します。OpenCV fisheye camera model は distortion correction を含まず、pinhole camera model の 6 つのパラメータを基に、\(k_1, k_2, k_3, k_4, \cdots\) を使用して記述します。
注記
一部の trackers は OpenCV fisheye camera model をサポートしていません。

カメラの向きと画像の向き
スマートフォンでは、通常横向きに持ち(通常の縦持ちから反時計回りに 90 度回転)、画面表示方向も横向きの場合、背面カメラが出力する画像は画面上で実際のシーンと同じ方向に表示されます。画面の物理方向を変えずに画面表示方向だけを変えても、物理カメラが出力する画像方向は変わりません。通常の縦持ちで、画面表示方向も通常の縦向きの場合、背面カメラが出力する画像は、実際のシーンと一致させるために時計回りに 90 度回転してから画面に表示する必要があります。画面表示方向が回転すると、カメラ画像を rendering するときに実際のシーンと一致させるため逆方向の回転補正が必要です。
カメラの向きと画像の向きは、通常、デバイスの 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 の画像データ取得は自分で実装できます。
プラットフォーム専用ガイド
カメラと入力拡張の使用はプラットフォームと密接に関係しています。ターゲットプラットフォームに応じて、次のガイドを参照して開発してください。