画像処理関連¶
img バス仕様¶
画像処理において、AXI4 Stream バスの信号をさらに簡易に扱う為に、Jellyでは imgバスという独自仕様に変換して処理している。
imgバスの主な信号は以下の通りであり、必要に応じて個別画像処理に付随する信号を追加する。
signal name | description |
---|---|
reset | リセット信号 |
clk | クロック |
cke | クロックイネーブル。ピクセル入力が無い時は落とす |
line_first | 先頭ラインを示す |
line_last | 最終ラインを示す |
pixel_first | ライン内で先頭ピクセルを示す |
pixel_last | ライン内で最終ピクセルを示す |
de | 有効ピクセルを示す |
user | ユーザーデータ |
data | 画像データ |
valid | valid の立たないデータは他のすべての信号は無効とする |
img バスは有効ピクセルが無い場合に cke(クロックイネーブル)をネゲートするのが特徴である。
したがって、cke の有効な期間のみを処理すれば、データはすべて連続であり、パイプラインステージにおいてステージ前後のデータが左右のピクセルに必ず対応することが保証できる。
また、画像処理においてしばし重要になるボーダー処理において、画像ボーダーを示す4辺のフラグを用意することでこの処理を簡易化している。
一方で有効ピクセルを示す de 信号も備えている。基本的には無効ピクセルはimgバスに変換する段で cke が下げられるが、3x3などのブロック処理を行う場合は最終ラインの掃き出しが必要であるため、deの下がった無効ラインの入力をオプションとして備えている。 また、画像処理の出力過程においては、不要ピクセルのdeを下げることで画像縮小などの処理が可能となる。
これらにより多くの制御信号を有しているが、これらをすべて必須とするとリセットの接続先が増える課題がある。そこでvalid信号をオプショナルとして備えており、valid の立たないデータは他のすべての信号は無効とすることで、リセット信号の接続を valid にかかわる信号だけにすることも可能としている。
jelly_axi4s_to_img¶
AXI4 Stream を img バスに変換し、画像処理後に再び AXI4 Stream に戻すコア。
jelly_img_blk_buffer¶
画像を N×M のブロックに変換して画像処理をアシストするコア。 ラインバッファとピクセルバッファを備え、ブロック処理に必要な単位で出力する。 M-1 ライン分の遅延が発生する。
その際、ボーダー処理として NONE, CONSTANT, REPLICATE, REFLECT, REFLECT_101 などの処理が選択可能であり、OpenCV のそれとほぼ一致する。
jelly_img_demosaic_acpi¶
ACPI法によるデモザイク
jelly_img_color_matrix¶
カラーマトリックス処理
jelly_img_gaussian_3x3¶
3x3 限定のガウシアンフィルタ
jelly_img_sobel_core¶
Sobel フィルタコア 固定値での演算なのでホストから設定するレジスタはない。
jelly_img_binarizer¶
2値化コア
jelly_img_selector¶
画像セレクタ。 主にデバッグ時に中間データを切り替えて出力するなどで利用可能
jelly_img_previous_frame¶
1つ前のフレームを外部メモリに保存して利用するためのDMAモジュール
jelly_img_dnn_maxpol¶
DNN用の MaxPooling 層。
縮小を行い de の立たないデータを出力するため、この後にさらに画像処理を行うには一度 AXI4 Stream に戻す必要がある。