開発事例

FPGAによる二次元相互相関の高速処理エンジン (2D Cross Correlation on FPGA)

この開発事例のポイント

  • CPU処理では4フレーム/秒の処理速度の画像処理を、FPGAを用いて50倍(200フレーム/秒)に高速化しました
  • NI社の”FlexRIO”デバイスに搭載されたFPGAとDRAMを活用して、すべての画像処理を1台のデバイスに搭載しました
  • CPUは、ヘビーな二次元相互相関処理の全てを1台のFPGAデバイスにオフロードできました

二次元相互相関処理の概要

  1. 2枚の画像入力データ
  2. それぞれの画像データを周波数領域に変換(二次元フーリエ変換)
  3. 二枚の周波数領域の画像を複素乗算
  4. 複素乗算した結果を、二次元・逆フーリエ変換

今回の開発事例では1024×1024の画像サイズ、8ビット深度の画像が演算対象でした。

FPGAへの実装

大まかな処理の流れ

  • Dual 2D FFT Engine: 2枚の8bit画像入力を同時に二次元フーリエ変換
    1. 横方向 FFT
    2. 1024×1024画像転置
    3. 縦方向 FFT
  • 複素乗算
    1. 必要に応じて、周波数領域でのフィルタ処理なども追加可能
  • Single 2D Inverse FFT Enging: 1枚の32bit画像入力を二次元・逆フーリエ変換
    1. 縦方向 FFT
    2. 1024×1024画像転置
    3. 横方向 FFT

使用したデバイス

  • PXIe-7976R
    • Kintex K410T FPGA
    • 3.2GB/s Data Transfer Rate to/from PC
    • Onboard DDR3 DRAM