4.20. まとめ

スクリプトがフレームを取り込むたびに登場する、カメラのイメージングスタックの各部分を一通り見てきました。

  • センサーの前面の光学系 -- 最も単純な像形成素子としてのピンホール、次にレンズです。レンズは焦点を合わせながらはるかに多くの光を集め、焦点距離、絞り、被写界深度、画角がアプリケーションの選択するつまみとなります。実際のレンズには歪み、ビネット、主光線角度の効果が伴い、後でセンサーとISPがこれらを補正します。

  • センサーグリッド -- 光子を電荷に変換するフォトダイオードの2次元アレイです。露出時間とアナログゲインが、明るさとモーションブラーおよびノイズとのトレードオフを担います。ローリングシャッターとグローバルシャッターがアレイの行をどう読み出すかを決め、わずかなオンチップ補正(列FPN、ブラックレベル、欠陥ピクセル、レンズシェーディング)がチップを出る前にデータをクリーンにします。2本のバスがチップをMCUに接続します。レジスタ用の低速なI2C制御バスと、ピクセル用の高速なパラレルまたはMIPIバスです。

  • カラーとISP -- ベイヤーカラーフィルターアレイが各ピクセルに赤、緑、青のいずれか1色を与え、デベイヤー処理が欠けている2チャンネルを補間します。イメージシグナルプロセッサがパイプラインの残りをつなぎ合わせます。統計抽出、オートホワイトバランス、デベイヤー処理、カラーマトリクス補正、ガンマ、スケーリング、クロッピング、そして要求されたピクセルフォーマットへの最終的なパッキングです。

  • ピクセルフォーマット -- 生のベイヤー、RGB888、RGB565、YUV422、グレースケール、BINARY、そして圧縮されたJPEG / PNG出力は、メモリサイズとカラー忠実度および下流アルゴリズムとの互換性のトレードオフを担います。RGB565は完成したカラーのデフォルトです。MCUのワード幅と揃い、RGB888に対してメモリコストを半減させるためです。

  • CSI API -- 5行のセットアップとスナップショットループが、あらゆるスクリプトが始める形です。フレームバッファプール(シングル、ダブル、トリプル、ビデオFIFO、またはトリガー式)が、アプリケーションとカメラがどうフレームを共有するかを決めます。別のプレビューチャンネルが、アプリケーションのバッファと競合することなく、接続されたデバッグプログラムに何であれフィードします。センサーのつまみは、向き、露出、ゲイン、ホワイトバランス、フレームレートの上限、そしてカラーバーのテストパターンをカバーします。

  • 複数センサーとメモリプール -- 2つのセンサーを搭載するボードは、チップごとに1つの CSI をインスタンス化し、それぞれを独自のレートで動作させます。その下では、フレームバッファプール、プレビュー領域、MicroPythonのヒープ、そしてより小さな高速メモリ割り当てが、RAMの別個の領域に存在します。速度を必要とする部分がそれを得て、サイズだけを必要とする部分がそれを得るように配置されています。

これだけあれば、シーンに合った正しいフォーマット、フレームサイズ、露出でセンサーからフレームを取り出し、アプリケーションの処理時間に合うフレームバッファモードを選び、接続された何にでもライブプレビューを公開し、Image をPythonに読み戻して操作する準備ができます。

4.20.1. このリファレンスを後で使う

イメージングの各章は、一度きりで読み通すものではなく、リファレンス資料として扱ってください。フレームバッファモード、ピクセルフォーマット、または特定のセンサーのつまみの意味を再確認するために戻ってくるのが意図された使い方です。csi.CSI のリファレンスページは、「この呼び出しの正確な名前は何だったか」という疑問だけのときに、すべてのメソッドを1か所にまとめて掲載しています。

4.20.2. ここから先へ

画像処理が自然な次のトピックです。バッファを手にし、csi APIを理解した今、残るのはピクセルで何をするかです。しきい値、エッジ検出、ブロブ検出、ライン・形状検出、QRコード、AprilTag、機械学習推論などです。ツールキットは image モジュールと、Image オブジェクトに対するメソッドのカタログへと移ります。このセクションのすべてが引き継がれます。ループの形、フレームバッファモード、ピクセルフォーマット、それらすべてが画像処理メソッドの操作対象です。