この開発事例のポイント
- CPU処理では4フレーム/秒の処理速度の画像処理を、FPGAを用いて50倍(200フレーム/秒)に高速化しました
- NI社の”FlexRIO”デバイスに搭載されたFPGAとDRAMを活用して、すべての画像処理を1台のデバイスに搭載しました
- CPUは、ヘビーな二次元相互相関処理の全てを1台のFPGAデバイスにオフロードできました
二次元相互相関処理の概要
- 2枚の画像入力データ
- それぞれの画像データを周波数領域に変換(二次元フーリエ変換)
- 二枚の周波数領域の画像を複素乗算
- 複素乗算した結果を、二次元・逆フーリエ変換
今回の開発事例では1024×1024の画像サイズ、8ビット深度の画像が演算対象でした。
FPGAへの実装
大まかな処理の流れ
- Dual 2D FFT Engine: 2枚の8bit画像入力を同時に二次元フーリエ変換
- 横方向 FFT
- 1024×1024画像転置
- 縦方向 FFT
- 複素乗算
- 必要に応じて、周波数領域でのフィルタ処理なども追加可能
- Single 2D Inverse FFT Enging: 1枚の32bit画像入力を二次元・逆フーリエ変換
- 縦方向 FFT
- 1024×1024画像転置
- 横方向 FFT
使用したデバイス
- PXIe-7976R
- Kintex K410T FPGA
- 3.2GB/s Data Transfer Rate to/from PC
- Onboard DDR3 DRAM