Table of Contents

カメラと入力拡張

この文書では、物理カメラのカメラモデル、パラメータ、およびその他の使用上の注意点、ならびにカスタムカメラを使用した入力拡張方法について説明します。

camera

入力フレーム

入力フレーム(Input Frame)はARの基本データ単位であり、カメラやその他のデータソースからキャプチャされた1フレーム分の関連情報を表します。入力フレームには通常以下が含まれます:

  • 生の画像データ(camera image)
  • カメラパラメータ(内部パラメータなど)
  • タイムスタンプ
  • ワールド座標系におけるカメラの変換行列
  • トラッキング状態(tracking status)

これらの情報は、ARアルゴリズムに位置特定、トラッキング、レンダリングなどに必要な時空間コンテキストデータを提供します。

物理カメラ

現在の電子デバイスで使用されるカメラは、通常複数のレンズとミラーで構成されています。しかし、実際の光学構造を使用してカメラモデルを構築することは一般的ではなく、簡略化されたモデルが使用されます。

ピンホールカメラモデル

pinhole camera

これは一般的に使用される最も単純なモデルで、光が小さな穴を通って180度回転した像を形成します。ただし、カメラが出力するデータでは像が正立されます。このモデルを記述するには6つのパラメータが必要です:ピクセル幅・高さ \(w, h\)、ピクセル焦点距離 \(f_x, f_y\)、主点のピクセル位置 \(c_x, c_y\)。ピクセル幅・高さがスケーリングされる場合、ピクセル焦点距離と主点位置も対応してスケーリングされれば像の位置は変わらないことに注意してください。

OpenCVカメラモデル

一部のカメラには顕著な半径方向歪み(radial distortion)と接線方向歪み(tangential distortion)が存在します。OpenCVカメラモデルは、ピンホールカメラモデルに高次パラメータを追加して半径方向歪みと接線方向歪みを記述します。半径方向歪みは \(k_1, k_2, k_3, \cdots\) で、接線方向歪みは \(p_1, p_2\) で記述されます。

注記

一部のトラッカーはOpenCVカメラモデルをサポートしていません。

OpenCVフィッシュアイカメラモデル

フィッシュアイカメラは、広い視野角の内容を小さな撮像面積に圧縮するために透視投影を使用します。OpenCVフィッシュアイカメラモデルは歪み補正がなく、ピンホールカメラモデルの6パラメータに加え、\(k_1, k_2, k_3, k_4, \cdots\) を使用して記述します。

注記

一部のトラッカーはOpenCVフィッシュアイカメラモデルをサポートしていません。

fisheye camera

カメラの向きと画像の向き

スマートフォンでは、通常横向き(通常の縦向きから反時計回りに90度回転)で画面表示方向も横向きの場合、リアカメラの出力画像は画面に表示されるときに実際のシーンと一致します。画面の物理的な向きを変えずに表示方向だけを変更しても、物理カメラの出力画像の向きは変わりません。通常の縦向きで画面表示方向も縦向きの場合、リアカメラの出力画像は時計回りに90度回転して画面に表示されると、実際のシーンと一致します。画面表示方向が回転する場合、レンダリングされるカメラ画像を逆方向に回転補償して初めて実際のシーンと一致します。

カメラの向きと画像の向きは、通常デバイスの自然な向き(natural orientation)に対して定義されます:

  • スマートフォン

    • Android

      Androidは自然な向きを定義しており、これは通常の縦向きで持つ方向です。慣性計測装置(IMU)もこの向きを基準とします。カメラ出力画像のこの向きに対する回転角度は、カメラパラメータとして取得可能です。

    • iOS

      iOSでは、自然な向きが明示的に定義されていませんが、慣性計測装置はAndroidと同じ基準を使用します。

  • タブレット

    タブレットの自然な向きは、横向きの場合もあれば、スマートフォンと同じ縦向きの場合もあります。

  • メガネ型デバイス

    メガネ型デバイスの自然な向きは、通常横向きです。

カメラ画像をレンダリングする際には、カメラの向きと画面の向きを総合的に考慮してレンダリングされます。

カメラの種類と反転

スマートフォンには通常、リアカメラとフロントカメラがあります。フロントカメラの出力画像は、画面に表示する前に左右反転され、鏡のように見えるようにします。左右反転しないと、非常に違和感があります。

入力拡張

EasyARは、カスタムカメラを使用した入力拡張をサポートしています。カスタムカメラを使用すると、外部から入力フレームを取得してARシステムに渡し、トラッカーで使用できます。カスタムカメラでは、画像データの取得を独自に実装できます。

プラットフォーム固有のガイド

カメラと入力拡張の使用はプラットフォームと密接に関連しています。ターゲットプラットフォームに応じて、以下のガイドを参照して開発してください: