センサーからネットワーク「ブロードキャスター」へのビデオストリーム処理の主なブロックを調べてみましょう。自動露出、ホワイトバランスとオートフォーカス(3A)、ガンマ補正、HDRまたはWDRの拡張ダイナミックレンジ、そして最後にモーション検出と分析のアルゴリズムについて詳しく説明します。その基礎。
SONY IMX136センサーの写真の例が提示され、アルゴリズムはAptina MT9P006 、 AR0331 、 MT9M034センサーでもテストされます。
に | 後 |
![]() | ![]() |
IPビデオ監視のプロセッサ市場の主なプレーヤーは、 TI 、 Ambarella 、 Hisiliconの 3社です。 それらはすべて異なる価格帯のチップを搭載しており、現在市場で最も人気があり、最大で毎秒30フレームのFHD(1920x1080)ビデオストリームをエンコードできますDM368(TI)、A5(Ambarella)、Hi3516(Hisilicon) 20から40ドルの価格で、毎秒60フレームまでのより強力なDM385(TI)、A7(Ambarella)、Hi3517(Hisilicon)。 これらのチップの特性はほぼ同じです。
TIはかなりオープンな会社であるため、ハードウェアのドキュメントはすべてサイトにあり、作業が最も簡単です。 ソフトウェアとデザイン全体を入手するには、 Approから1,000ドル以上でカメラを購入するだけです。 HiSiliconからドキュメントを入手するには、NDAに署名する必要があり、サポートと参照料は5,000ドルです。 最も高価なのはAmbarellaで、ドキュメントとサポートを入手するために必要なのは25,400ドルです。
DM368に戻ります。

図からわかるように、プロセッサには、IPカメラだけでなく、IPカメラに必要なものがすべて揃っています。 ビデオ処理サブシステム(VPSS)はビデオ処理に関与し、2つのVideo FE(フロントエンド)およびVideo BE(バックエンド)ブロックで構成されます。 Video FEは、ビデオ信号の入力とその処理を担当し、Video BEは、さまざまなデバイスへのエンコードと出力を担当します。 3Aアルゴリズムのハードウェアサポートは、Video FEモジュールにあります。
より詳細に検討してください。

IPIPEIF(Image Pipe Interface)入力は、センサーからBayer形式の生の12ビット画像を受け取ります。 このブロック自体は特に有用なものは何もありません。主にISIFとIPIPEの動作を同期するのに役立ちます。また、新しいフレームから「暗い」メモリを差し引くこともできますが、使用しません。
Image Sensor Interface(ISIF)は、Bayerをさまざまな形式に変換、乗算、減算などできます 。可能性の詳細については、 ドキュメントを参照してください。 このブロックから、アルゴリズムに使用します:
1.すべての色からの一定値の「減算器」。2つの完全な暗闇のセンサー、0ではなく、SONY 176、Aptina 172に対して定数が発行されます。これは、特に暗闇で適切なカラーバランスを考慮する必要があります。
2.ゲインとオフセット-それらに対してホワイトバランスを行います。 各色について、すべてのハードウェア「乗算器」の標準形式で、0〜(7 + 511/512)の独自の乗算係数を設定できます。OUT= IN * G >> 9、INは入力カラー値、Gは0からの「乗算器」 4095まで。
次のイメージパイプ(IPIPE)ブロックは、他のすべてに使用されます。

順番に始めましょう:
1.欠陥修正は「壊れた」ピクセルを処理できますが、処理する前に座標を知る必要があり、それらを設定するために暗所で各センサーをキャリブレーションする必要があり、生産が非常に複雑になります。 故障したセンサーはそれほど多くありません。もしあなたが捕まったら、交換が簡単です。
2.次のWhite Balanceブロックは、各色に1つずつ、3つの乗算器と3 x減算器で構成され、すべての色に同じグローバル乗算器およびしきい値減算器として使用します。

形式はISIFブロックと同じで、乗算範囲のみが2倍です。
3. CFA補間はバイエル形式から変換します
![]() | RGBで | ![]() |
どの補間アルゴリズムが使用されているかはわかりません。
4. RGB2RGBブレンドモジュールは、各RGBピクセルをマトリックスに渡します

ここで、ゲインは-8から+7.996まで1/256 = 0.004の増分で変化し、オフセットは-4096から4095まで変化します。
さらに、これらのブロックは次々に2つあり、両方ともアルゴリズムで使用します。 各メーカーは、センサーの表を提供しています。 正直なところ、私はこれがどのように機能し、どのように色を混ぜることができるかをよく理解していませんが、写真は本当に良くなります。 すぐにあなた自身で見るでしょう。
5. ガンマ補正ブロックは、各色に1つずつ、3つのLUT(ルックアップテーブル)で構成されています。

512〜64の値からテーブルサイズを選択できます。512を使用します。各テーブル要素は、2つの10ビットワードのオフセットとスロープで構成されます。

入力は12ビットのINデータを受信し、2つの部分HIGH = IN >> 3、LOW = IN&7、上位9ビットと下位3ビットに分割されます。 出力値は、次の式を使用して計算されます。OUT=(オフセット[高] << 3)+(勾配[高] >> 3)*低。 つまり、ガンマ曲線は区分的に滑らかな関数で近似されます。

6. RGB2YCbCrブロックは、RGBカラースペースをYCbCrに変換します。
7.4:2:2変換モジュールはCbとCrの色成分を半分にします
水平に。

8. 2D Edge Enhancer、これは画像のコントラストを改善する5x5の2次元フィルターです-これは記事の別のトピックです。ここにその作業の例を示します。
2D EEオフ:

2D EEが有効:

これは非常に便利です。
9.リサイザーは、2番目と3番目のストリームの画像を垂直および水平に縮小し、エンコーダーのYCbCr 422をYCbCr 420に変換します。
ビデオ処理パス全体とは別に、H3A統計ブロックがあります。 すべてのアルゴリズムを実装する必要があります。 それから受信したデータに基づいて、露出、ゲイン、シフトが設定されます。
1.露出とカラーバランスの統計は、写真を水平方向に最大56個、垂直方向に最大128個のセルに分割することで得られます。 各セルについて、各色のすべてのピクセルの合計、最小値と最大値を取得できます。
2.オートフォーカスブロックは、画像を水平方向に最大12個、垂直方向に最大128個のセルに分割します。 そして、各セルに対して最大のフォーカス値を提供します。
しかし、彼らはそれが何であるかを説明しませんでした。 ソフトウェアを調べても何もはっきりしませんでした。係数としきい値を変更できる特定のRIFフィルターであることがわかっただけでしたが、あまり役に立たず、オートフォーカスは着実に機能しませんでした。
それで、なぜ私たちはこれを引き受けたのか、既存のアルゴリズムで私たちに合わなかったのは何ですか? 既存のアルゴリズムの主な問題は、ダイナミックレンジの不完全な使用です。
アルゴリズムの曇りの天気の操作の例:

朝と夕方には、原則として、ホワイトバランスが変動します。

そして、この例は私たちのアルゴリズムを使用しています:

そして、すべてが異なるセンサーでうまく機能するように、私たちは他の人のソフトウェアの束を編集するのではなく、ゼロから独自のものを書くことにしました。 アルゴリズムの別のタスクは、他のプラットフォームにできるだけ簡単に転送する必要があります。 幸いなことに、DM368には非常に便利なハードウェアユニット、いわゆるBoxcarが搭載されています。 平均化ブロックは8x8または16x16をブロックするだけです

つまり、boxcarの出力では、各軸で16倍に縮小された生画像が得られます。 入力解像度が1920x1080の場合、統計情報には120x68があります。
このブロックを統計のソースとして使用しました。
アルゴリズムのブロック図を描いて、コードに移りましょう。

こちらおよび他の人のカメラからライブ放送を見ることができます 。
継続するには...