Main Content

このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。

ノイズ除去とイメージのシャープ化

この例は、イメージを強調する FPGA ベースのモジュールを、Vision HDL Toolbox™ を使用して実装する方法を示します。

Vision HDL Toolbox には、読みやすく合成可能な VHDL コードや Verilog コードを HDL Coder™ で生成できるように設計された動画処理のアルゴリズムが備わっています。生成される HDL コードは、60 フレーム/秒のレートで 1080p のビデオを処理できます。

Computer Vision Toolbox™ 製品は高度に抽象化されたモデルを作成します。これらのブロックとオブジェクトはイメージ フレームを 1 個ずつフル フレームで処理します。一方、FPGA システムや ASIC システムでは、イメージ ピクセルを 1 つずつ処理するピクセル ストリーム処理が行われます。

物理システムからの入力イメージには、ブレやノイズなどの障害が頻繁に含まれます。フォーカスの合っていないオブジェクトはブレたイメージになります。カメラやビデオ センサーのデッド ピクセルやスタック ピクセル、ハードウェア コンポーネントの熱ノイズは、イメージ内のノイズの原因になります。この例では、入力イメージのノイズを取り除いてシャープにします。そのイメージを処理連鎖の初期段階で使用することで、後続の処理をより良い初期条件で行うことができます。この例では、Vision HDL Toolbox のピクセル ストリーム フィルター ブロックを 2 つ使用します。メディアン フィルターはノイズを取り除き、イメージ フィルターはイメージをシャープにします。ピクセル ストリーム設計を検証するには、結果を Computer Vision Toolbox のフル フレーム ブロックで生成された結果と比較します。

モデルの概要

NoiseRemovalAndSharpeningHDLExample.slx システムを示します。

Computer Vision Toolbox のブロックはフレーム全体を一度に処理します。Vision HDL Toolbox のブロックは、ピクセル データのストリームを 1 ピクセルずつ処理します。Vision HDL Toolbox の変換ブロックである Frame To Pixels ブロックと Pixels To Frame ブロックを使用すると、ストリーミング ピクセル設計をシミュレートし、フル フレーム設計と比較できます。

Full-Frame Behavioral Model サブシステムと Pixel-Stream HDL Model サブシステムに入力されているラインの色の違いは、モデルのストリーミングの分岐におけるイメージ レートの変化を示します。このレートの変化が起こる原因は、ピクセル ストリームが完全なビデオ フレームと同じ時間で送信される結果、ストリームが高いレートで送信されることにあります。色分けをオンにしてサンプル時間の情報を表示するには、左のパレットで [サンプル時間] アイコンをクリックし、[色] を選択します。

次の図は Image Source サブシステムを示しています。

Image Source ブロックは、グレースケール イメージをインポートした後、MATLAB Function ブロック Blur and Add Noise を使用して、イメージをぼかし、ごま塩ノイズを注入します。関数 imfilter は 3x3 の平均化カーネルを使用してイメージをぼかします。ごま塩ノイズは imnoise コマンドの呼び出しにより注入されます。ノイズ密度は、イメージ内の総ピクセル数に対するごま塩ピクセルの結合数の割合で定義されます。この密度の値は、Noise Density 定数ブロックによって指定され、0 ~ 1 の範囲でなければなりません。Image Source サブシステムの出力はフル フレーム イメージの 2 次元行列です。

以下の図では、Computer Vision Toolbox のフレームベースの Median Filter と 2-D FIR Filter で構成された、Full-Frame Behavioral Model サブシステムの構造が示されています。Median Filter はノイズを取り除き、2-D FIR Filter はイメージをシャープにするよう構成されています。

以下に、ブレとノイズが含まれたソース ビデオの 1 フレーム、それをメディアン フィルター処理してノイズ除去したバージョン、および 2 次元 FIR フィルター処理してシャープ化した出力を示します。

Pixel-Stream HDL Model サブシステムは Vision HDL Toolbox を使用して、ストリーミング ベースのメディアン フィルターと 2 次元 FIR フィルターを実装します。Verification サブシステムは、フル フレーム処理の結果とピクセル ストリーム処理の結果を比較します。この 2 つのサブシステムの詳細については次の 2 節で説明します。

ピクセル ストリーミング HDL 設計

Vision HDL Toolbox のブロックには FPGA ハードウェアが必要とするストリーム入力信号を処理する機能があり、Frame To Pixels ブロックはフル フレーム イメージをピクセル ストリームに変換します。FPGA や ASIC ベースのビデオ システムで見られる水平方向および垂直方向の空白区間の影響をシミュレートするため、アクティブなイメージは非イメージ データで拡張されます。ストリーミング ピクセル プロトコルの詳細については、Streaming Pixel Interface (Vision HDL Toolbox) を参照してください。Frame To Pixels ブロックの構成は以下のとおりです。

[Number of components] フィールドはグレースケール イメージ入力を表す 1 に設定され、[ビデオ形式] フィールドはビデオ ソースと一致するよう 240p に設定されています。

この例では、Active Video 領域は、上流 Image Source サブシステムのブレとノイズを含むイメージの 240 行 320 列の行列に対応しています。他の 6 つのパラメーター (Total pixels per line、Total video lines、Starting active line、Ending active line、Front porch、Back porch) は、多くの非イメージ ピクセルを Active Video の 4 辺に追加する方法を指定します。詳細については、Frame To Pixels (Vision HDL Toolbox) ブロックのリファレンス ページを参照してください。

Image Source 内のビデオ ソースの望ましいサンプル時間は、Total pixels per line と Total video lines の積によって決定されます。

次の図に示すとおり、Pixel-Stream HDL Model サブシステムは Vision HDL Toolbox のメディアン フィルターと 2 次元 FIR フィルターのストリーミング実装を含みます。HDL Coder™ を使用して、Pixel-Stream HDL Model サブシステムから HDL コードを生成できます。

Median Filter (Vision HDL Toolbox) ブロックは、ごま塩ノイズを取り除くために使用します。フィルター係数に基づき、Image Filter (Vision HDL Toolbox) ブロックを使用して、メディアン フィルター処理後に復元したイメージをぼかしたり、シャープにしたり、イメージのエッジを検出したりすることができます。この例では、Image Filter はイメージをシャープにするよう構成されています。

ピクセル ストリーム処理設計の検証

Computer Vision Toolbox のフル フレーム フィルターの出力と比較するため、モデルは Pixels To Frame ブロックを使用して、ピクセル ストリーム データをフル フレームに変換し直します。Frame To Pixels と Pixels To Frame の両方の [Number of components] フィールドおよび [ビデオ形式] フィールドは、ビデオ ソースの形式と一致するよう、それぞれ 1 と 240p に設定されています。

Pixels To Frame ブロックの出力は、フル イメージの 2 次元行列です。以下の Verification サブシステムで示されているように、これによって HDL モデルをフル フレーム領域の動作モデルと比較できます。

ピーク S/N 比 (PSNR) は、参照イメージとストリーム処理されたイメージとの間で計算されます。この比率が inf になり、Full-Frame Behavioral Model からの出力イメージが Pixel-Stream HDL Model から生成された出力と一致していることが示されるのが理想的です。

HDL コードの生成とその動作の検証

この例で参照する HDL コードをチェックして生成するには、HDL Coder ライセンスが必要です。

HDL コードを生成するには、次のコマンドを使用します。

makehdl('NoiseRemovalAndSharpeningHDLExample/Pixel-Stream HDL Model');

テスト ベンチを生成するには、次のコマンドを使用します。

makehdltb('NoiseRemovalAndSharpeningHDLExample/Pixel-Stream HDL Model');