第二週

空間フィルタ

本実験では画像フィルタのうち空間フィルタ(spatial filtering)の処理回路をFPGA上に実装します。空間フィルタとは、ある注目している画素点とその周辺画素の濃度に対してフィルタの係数との畳み込み演算等の計算を行い、その結果を注目画素の新しい濃度とする処理のことです。図にすると以下のようになります。


具体的には次のような演算を行います。Iを入力画像の画素、Cをフィルタの係数(k×kのフィルタ)、出力結果をS,注目画素の座標を(x,y)とすると、これらの畳み込み演算は以下のようになります。

上図では注目画素点とその周囲8画素を用いて演算しています。これを3×3の近傍処理といい、フィルタのサイズは3×3になります。5×5、7×7などのより大きなサイズのフィルタも存在します。フィルタの係数をオペレータと呼び、オペレータの値によってノイズ軽減やエッジ抽出、シャープ化など様々な効果を与えることができます。

応用実験のシステム概要

システムの全体構成

本実験では、あらかじめ用意したシステムを使って、画像フィルタ処理を行う回路データをFPGAにダウンロードし、回路の動作確認を行います。システムの構成は、ホストコンピュータ(PC)、首振りUSBビデオカメラ(BWC35H01SVA Buffalo社製)、FPGA(xc4vsx55 Xilinx社製)、FPGAを搭載したFPGAボード(RC1000-PP Celoxica社製)。USBビデオカメラ以外に、それぞれをPCIバスでつないだものになっています。

本実験のシステムは以下の手順でデータの処理を行います。
  1. FPGAに回路データをダウンロードする
  2. ビデオカメラ→PCの順に入力画像のデータを取り込む
  3. 画像データをPCからFPGAに送り、FPGAに実装した回路でフィルタ処理を行う
  4. 処理後のデータをPCに送り、結果を表示

PC、FPGA間のデータ通信の概要

FPGAボードの詳細を以下に示します。


PCから送られた画像データは、一旦FPGAボード内の外部RAM (SRAM)に保存されます。外部RAMはFPGAの内部メモリ(Block RAM)より容量が大きいためです。画像データが外部RAMへ保存された後、外部RAMよりFPGAに送られます。FPGAで処理された画像データも同様に、外部RAMを経由し、PCへと送られ、処理結果として画面に表示されます。

画像フィルタ処理回路の設計

サンプルプロジェクトの概要

今回、皆さんにはデータの入出力やフィルタ処理に必要な回路があらかじめインプリメントされているサンプルプロジェクト(memory.ise)を利用して設計を進めていただきます。ISEからFile > Open ProjectでFilter.iseを選択するか、プロジェクトファイルを直接ダブルクリックすることでサンプルプロジェクトを開いてください。

サンプルプロジェクトは、こちらからダウンロードしてください。

これらのソースのうち、フィルタ処理を行うfilter_unit.v、operation.v を追記、変更することで各種フィルタ処理回路を設計します。

フィルタ処理回路部(filter_unit.v)の詳細

filter_unit.vではあらかじめフィルタ処理に必要な回路が記述されています。制御ユニットを除いたfilter_unit.vの回路図を下図に示します。

まず、ラスタースキャンされた画素が、1画素ずつfilter_unitの回路に送られてきます。

この回路の主な目的は、注目画素を中心とした3×3の画素値をoperationに与えることです。画像上では、下図のような処理を行っていることになります。

operation.vでは、3×3の画素値を用いてフィルタオペレータとの演算を行います。operation.vはまだ何も記述されていないため、今週の課題でこの演算回路の設計をしていただきます。

回路データ(ビットファイル)の作成

フィルタ処理回路が完成したら、実際に動作確認を行うために回路データを作成します。その際、必ずソ ースウィンドウのツリー最上位にあたるmemory (memory-xrc4sx.vhd)を選択し、回路データを作成してください。作成方法は前回の資料を参考にしてください。今回、UCFファイルはあらかじめ用意してあるので作成する必要はありません。

動作確認

設計した回路の動作確認を行うため、回路データ(memory.bit)を以下の手順でFPGAを搭載しているPCに転送します。

  1. 作成した回路データ(memory.bit)をマイドキュメント(C:\Users\FPGA\Documents)に置きます。
  2. デスクトップ上のjikken@192.168.5.250から、WinSCPを起動します。
  3. WinSCPのウィンドウ右側(転送先のPC)の、/home/jikken/Desktop/bitフォルダ内に、自分の班と同名(A,B,C...)のフォルダを作成します。
  4. WinSCPのウィンドウ左側(自分のPC)の、1.で回路データを置いたフォルダを開き、3.で作成したフォルダ内に回路データをドラッグ&ドロップします。

以上の手順の後、FPGAを搭載しているPCに移動し、ソフトウェアの使い方を参考に、動作確認を行ってください。

課題

課題2