第15章:フォーカス
露出は明るさを制御します。フォーカスは、何が鮮明(シャープ)であるかを制御します。 完璧な露出でも、ピントが合っていなければ失敗作です。この章では、スマートフォンのフォーカスシステムの仕組み、Camera2 を介した信頼性の高いオートフォーカス (AF) の駆動方法、そして LENS_FOCUS_DISTANCE を使用したスムーズなマニュアルフォーカススライダーの実装方法を学びます。
Android Camera Parameters アプリでは、これらの動作を確認できます。AF ステートマシンの遷移をリアルタイムで観察したり、マニュアルフォーカススライダーを操作してレンズを無限遠から最短撮影距離まで動かしたりできます。
現代のスマートフォンにおけるオートフォーカス (AF)
まず、スマートフォンが使用する 3 つの物理的なフォーカス機構を理解しましょう。
- コントラスト検出 AF (CDAF): 画像フレームを分析し、エッジのコントラストが最大になる位置を探します。安価なハードウェアでも動作しますが、レンズを前後させて「探す(ハンティング)」必要があるため低速です。
- 位相差検出 AF (PDAF): センサー上の特別な画素を使用して、ピントのズレの量と方向を即座に測定します。非常に高速で、動画撮影でも威力を発揮します。
- レーザー AF / ToF AF: 赤外線レーザーを照射し、反射して戻ってくる時間から距離を測定します。暗闇でも動作し、極めて高速ですが、有効範囲に制限があります。
Camera2 は、これら複数の仕組みを単一の抽象化されたステートマシンとして公開しています。
AFモード:CONTROL_AF_MODE
Camera2 では以下の主要な AF モードが定義されています:
| モード | 挙動 | ユースケース |
|---|---|---|
OFF | AF を行わない。手動で LENS_FOCUS_DISTANCE を設定する。 | マニュアルフォーカス、星空撮影など |
AUTO | 単発 AF。トリガーを送るまで何もしない。1 回スキャンしてロックする。 | 静止画撮影の基本 |
CONTINUOUS_PICTURE | 常にリフォーカスを続けるが、静止画キャプチャ時にはリフォーカスを一時停止する。 | 静止画撮影のデフォルト |
CONTINUOUS_VIDEO | 常にリフォーカスを続ける。ビデオ撮影に最適。 | 動画撮影、ビデオ通話 |
注意: 格安デバイスや自撮りカメラは、レンズが動かない「固定フォーカス (Fixed Focus / EDOF)」である場合があります。この場合、マニュアルフォーカスはできません。
AF ステートマシン
Camera2 は CaptureResult.CONTROL_AF_STATE を介してステータスを報告します。
INACTIVE: アイドル状態。PASSIVE_SCAN / PASSIVE_FOCUSED: 連続 AF モードでスキャン中、またはピントが合っている状態。ACTIVE_SCAN: 明示的なトリガーによりスキャンを実行中。FOCUSED_LOCKED: 成功。 ピントが合い、ハードウェア的にロックされた状態。NOT_FOCUSED_LOCKED: ロックしたが、ピントは合わなかった。
静止画撮影の鉄則: 信頼性の高い静止画を撮るには、FOCUSED_LOCKED を確認してからキャプチャを送信する必要があります。
フォーカス距離:メートルではなくジオプトリー
Camera2 の LENS_FOCUS_DISTANCE は、メートルではなくジオプトリー (D) という単位を使用します。これは物理的な距離の逆数です:
フォーカス距離 (メートル) = 1.0 / ジオプトリー
ジオプトリー = 1.0 / フォーカス距離 (メートル)
| ジオプトリー | 物理的なフォーカス距離 |
|---|---|
| 0.0 | 無限遠 (∞) — 遠くの山、星 |
| 1.0 | 1 メートル |
| 10.0 | 0.1 メートル (10 cm) |
なぜジオプトリーなのか? それは、レンズを動かすアクチュエーターが距離に対してではなく、屈折力(ジオプトリー)に対して線形に動作するからです。
最短撮影距離の確認
レンズには、それ以上近づくとピントが合わなくなる距離があります。
CameraCharacteristics.LENS_INFO_MINIMUM_FOCUS_DISTANCE を照会すると、そのレンズがサポートする最大のジオプトリー値を取得できます。
マニュアルフォーカスの実装例 (Kotlin)
SeekBar を使用して 0.0D(無限遠)から最短撮影距離までをスムーズに調整するスライダーを実装する場合のポイント:
- スロットリング: SeekBar の変更イベントは非常に頻繁に発生します。HAL への負荷を避けるため、約 30fps (33ms) 程度に間引いてリクエストを送信するようにします。
AF_MODE_OFFへの切り替え: マニュアル操作を始める前に AF を OFF にする必要があります。そうしないと、自動アルゴリズムがあなたの設定を上書きしようと戦ってしまいます。setRepeatingRequest: マニュアルフォーカスは、ユーザーが再度変更するまですべてのプレビューフレームに適用される必要があるため、繰り返しリクエストとして送信します。
まとめ
- AF モード:
AUTO、CONTINUOUS_PICTURE、OFF(マニュアル)などがあります。 - ステートマシン: 確実にピントを合わせるには
FOCUSED_LOCKED状態を待ちます。 - 単位: フォーカス距離はジオプトリーで設定します(0.0D = 無限遠)。
- 最短撮影距離:
LENS_INFO_MINIMUM_FOCUS_DISTANCEで確認できます。 - マニュアルフォーカス: AF モードを
OFFにしてからLENS_FOCUS_DISTANCEを設定します。
次のステップ
明るさと鮮明さをマスターしました。次は色を制御しましょう。第16章:ホワイトバランスと色では、オートホワイトバランス (AWB) や色温度 (ケルビン) の調整方法を学びます。