...

1.9MB - 高知工科大学

by user

on
Category: Documents
16

views

Report

Comments

Transcript

1.9MB - 高知工科大学
卒業研究報告
題目
FPGA による処理を考慮した
画像処理フィルタの設計と画像処理の高速化
報 告 者
学籍番号:1150070
氏名:
島崎 仁宏
指 導 教 員
星野 孝総 准教授
平成 27 年 2 月 10 日
高知工科大学 システム工学群 電子工学専攻
1
目次
第1章
序論…………………………………………………….…………………………………………………...3
1.1
研究背景…………………………………………….……….………………………………...3
1.1.1
第2章
1.2
研究の目的・概要…………………….……………………..……………….………………...5
1.3
外観検査…………………….………….……………….………………..................................5
欠陥の定義………………………………………………………………………...5
1.3.2
基準パターンとの比較照合方式………………………………………………….6
1.3.3
特徴抽出方式…………………………………………………………………......7
1.3.4
特徴抽出方式の手順例…………………………………………………………...7
2.1
画像処理………………………………………………………………………………………9
2.2
2 値化…………………………………………………………………………………………9
2.3
ノイズ除去………………………………………………………………………………………9
2.3.1
移動平均フィルタ………...………………………………….…………………...10
2.3.2
ガウシアンフィルタ………….……………………………………………………10
2.3.3
メディアンフィルタ………………………………..……………………………11
エッジ抽出…………………………………………………………………………………..12
2.4.1
ソーベルフィルタ………...………………………………………………………13
2.4.2
ラプラシアンフィルタ….…………………………………………………………15
ソフトウェアとハードウェア…………………………………………………………………………..16
3.1
3.2
第4章
1.3.1
画像処理…………………………….…………………………………………….……………………….9
2.4
第3章
ラインセンサカメラ…………………………...……………………………………..4
ソフトウェア処理………………………………………………………………………………16
3.1.1
逐次処理…………………………………………………………………………16
3.1.2
CPU での画像処理………………………………….……………………………17
ハードウェア処理………………………………………………………………………..……18
3.2.1
パイプライン処理…………………………………………………………..……..18
3.2.2
ラインバッファ処理………………………………………………………………..19
画像処理フィルタの設計……………………………………………………………………………......20
4.1
FPGA について……………………………………………………………………………...…20
4.1.1
4.2
FPGA 開発の流れ…………………………………………………………….….20
Verilog HDL について…………………………………………………………………………21
2
4.2.1
4.3
第5章
FPGA でのハードウェア設計…………………………………………………………..…23
4.3.1
セットアップ時間・ホールド時間………………………………………….….23
4.3.2
ラインバッファ構造……………………………………………………….….24
4.3.3
2 値化……………………………………………………………………………..25
4.3.4
移動平均フィルタ…………………………………………………………...….25
4.3.5
ガウシアンフィルタ………………………………………………………….27
4.3.6
メディアンフィルタ………………………………………………………...….28
4.3.7
ソーベルフィルタ…………………………………………………………….30
4.3.8
ラプラシアンフィルタ……………………………………………………….30
CPU と FPGA の処理速度比較実験と結果…………………………………………………………….32
5.1
実験の概要 ………………………………………………………………………….………32
5.2
各画像処理フィルタの処理速度………….……………………………………….…………32
5.3
5.4
5.2.1
計測の概要 (CPU)…………………………………………………..……..……32
5.2.2
計測の概要 (FPGA) …………………..………………………….……………..32
5.2.3
計測結果………………………………..…………………………….….………33
画像サイズの変更による処理速度… …………………………………..……………………35
5.3.1
CPU の場合………………………………………………..………………..……35
5.3.2
FPGA の場合…………………..……..……………….………………….………36
複数のフィルタを連結した場合の処理速度..…………………………..……………………37
5.4.1
5.5
エッジ抽出フィルタの修正….……………………………..………………..……37
FPGA ボードへの実装に向けた実験と結果…………………………………………………………..38
6.1
第7章
計測結果…………………………………………………..………………..……37
画像処理フィルタの修正………………………………………………..……………………37
5.5.1
第6章
Verilog HDL の記述例……………………………………………………….….22
実験環境……………………………………………………...………………………………38
6.1.1
実装実験に向けた準備………….………………………………………..……38
6.1.2
実装実験……………………….……..………………………………………..39
終論……………………………………………………………………………….……………………..42
謝辞………………………………………………………………………………………………...………………..43
参考文献…………………………………………………………………...…………………….……………………44
3
第 1 章 序論
第1章
序論
1.1 研究背景[1][2][3]
近年,セキュリティシステム,自動車,FA (Factory Automation) など様々な分野で画像処理技術が応用さ
れている.特に,工業製品の品質検査,欠陥検査において人間による目視検査では作業の高速化,検査の
質,製品の微細化などの点で問題があるため,自動での欠陥検出技術の重要性が高い.
これらの問題を解決するために,プロセッサを用いた自動欠陥検査システムの開発が行われてきた.プ
ロセッサの性能向上により,画像処理をソフトウェアのみで実現するシステムも多く見られる.しかし,
プロセッサのみを用いたシステムでは,処理と処理結果が膨大になるにつれメモリが対応できなくなると
いった恐れや,プロセッサによる処理速度が製品の製造ラインの速度に追いつけず,製造と検査を別々の
工程で行わなければならない,などといった問題がある.
FA 画像処理の特徴として,生産ライン上において適用されるため,図. 1 のように製造から検査まで一貫
した工程で検査処理が行えるシステムが要求される.製造から検査まで一貫した工程で検査処理が行える
リアルタイムでの外観検査処理システムを実現させるために,ラインセンサカメラを用いる.ラインセン
サカメラを用いることにより,対象物が移動しながらの撮像が可能となる.ラインセンサカメラは高解像
度画像を取得できる反面,エリアセンサカメラと同じ対象をスキャンした場合,膨大なデータ量となって
しまうことが挙げられる.
プロセッサの処理速度・ラインセンサカメラを用いることを考えると,繰り返し演算,演算量の多い処
理,独立した処理をハードウェアで実装する必要がある.ハードウェアで画像処理を実装することにより,
メモリに画像を取り込む前段階で画像変換や特徴量抽出処理などの処理を並行して行うことができる.ま
た,データ転送面でのボトルネックを防ぐこともできる.そのため,ソフトウェア処理のみで画像処理を
行った場合に発生する問題を多く解決することができる.
図. 1 一貫した工程のイメージ
4
第 1 章 序論
1.1.1
ラインセンサカメラ[4][5]
ここでは,ラインセンサカメラと多くの外観検査システムで用いられているエリアセンサカメラの比較
を行う.ラインセンサカメラは図. 2 の左側のように受像素子が横一列に並び,1 次元的な画像の撮像を繰
り返し行うカメラである.
これに対してエリアセンサカメラは図. 2 の右側のように受像素子が縦横に並び,
デジタルカメラのように 2 次元的な撮像を行うカメラである.
図. 2 受像素子の違い
ラインセンサカメラを用いる第 1 の理由は,高解像度の画像を撮像できることである.エリアセンサカ
メラの解像度は 30 万画素 (640×480) ~ 500 万画素 (2,456×2,058) が一般的であり,最大でおよそ 2,000 万画
素 (5,344×2,008) である.撮像速度は 10 ~ 100fps (Frame per Second) と低速である.fps とは,単位時間あ
たりに処理するフレーム数のことである.
それに対し,
ラインセンサカメラは横 1 ラインのみの撮像で 1,024
画素 ~ 7,450 画素が一般的で,最大でおよそ 16,384 画素である.撮像速度は約 10,000fps と高速である.測
定視野を 100mm として,比較すると
・エリアセンサカメラ
水平方向 5,344 画素 (実質解像度 2,000 万画素) の場合
100mm / 5,344 画素 = 18.71μm / 画素
・ラインセンサカメラ
横 16,384 画素の場合
100mm / 16,384 画素 = 6.1μm / 画素
となり,ラインセンサカメラの分解能はエリアセンサカメラの 3 倍ほど高いことがわかる.
第 2 の理由は,流れ作業に適していることである.エリアセンサカメラでは,撮像のために撮像対象を
一時停止する必要がある.連続して流れてくるひとつづきの長いワーク (紙やシートといった製品) の撮像
において同期の面からスキャンが難しく,対象の静止を必要とする.それに対して,ラインセンサカメラ
では撮像対象が移動することを前提としており,製造機器のエンコーダに撮像速度を同期させることがで
きる.そのため,ラインセンサカメラを用いることにより,背景で述べた製造から検査まで一貫した工程
5
第 1 章 序論
で検査処理が行えるシステムが構築できると考える.
1.2 研究の目的・概要[6]
本研究の目的は,製造から検査まで一貫した工程で検査処理が行えるリアルタイムでの外観検査処理シ
ステムの構築である.
本研究では,FPGA (Field Programmable Gate Array) を用いて画像処理フィルタのハードウェア設計を行
う.CPU で設計した画像処理フィルタ (ソフトウェア処理) の処理速度と FPGA で設計した画像処理フィ
ルタ (ハードウェア処理) の処理速度を比較し,画像処理フィルタのハードウェア化の有効性を検証する.
FPGA とは,回路構成をプログラミングで設計することができる LSI である.プログラミングで回路を
構成するため,チップ内部の回路構成を変更することができる.FPGA 以外にもプログラミングできる LSI
は存在するが,コスト・開発期間など様々な面で FPGA が優れており,本実験に適している.また,FPGA
開発環境も優れており,回路の動作検証・設計などを簡単に行うことができる.
1.3 外観検査[7][8]
本研究では,主にパターン検査の外観欠陥の自動検出を目的とした画像処理フィルタのハードウェア設
計を行う.画像処理を用いた外観欠陥検査方式は,主に基準パターンとの比較照合方式と特徴抽出方式の
2 つに分かれる.基準パターンとの比較照合方式では,基準パターンの選定,欠陥の許容誤差など専門知
識・基準パターンの画像・メモリに格納されている基準パターンの参照など複雑なシステムを構築しなけ
ればならない.そのため,本研究では主に特徴抽出方式による欠陥検出を想定した画像処理フィルタのハ
ードウェア設計を行う.次節以降は,配線パターンの外観検査を例にして,欠陥検出について説明してい
く.
1.3.1
欠陥の定義
配線パターンの場合,欠陥は主に次のように定義される.
[欠陥タイプ 1 (図. 3 の左) ]
ピンホール (小さな穴領域) :配線パターン中にある傷
ゴミ (孤立小領域) :配線パターンの間に付着しているゴミ
[欠陥タイプ 2 (図. 3 の中央) ]
線の欠け:配線パターンの一部が欠けている状態
線の突起:配線パターンの一部が飛び出している状態
[欠陥タイプ 3 (図. 3 の右) ]
断線:繋がっているべき配線パターンが切断されている状態
短絡:繋がっていてはならない配線パターン同士が繋がってしまっている状態
6
第 1 章 序論
図. 3 欠陥パターン例
1.3.2
基準パターンとの比較照合方式
基準パターンとの比較照合方式では,あらかじめ CAD で設計された配線パターン,あるいは検査で確
認されたパターンを「基準パターン」とし,入力パターン (被検査画像) との比較照合により欠陥検査を行
う.基準パターンは 1 個である必要はなく,欠陥の許容誤差を考慮して理想パターンから太めと細めの 2
種類のパターンを用意して入力パターンとの比較照合を行うのが一般的である.図. 4 に基準パターンとの
比較照合の例を示す.図. 4 では,基準パターン画像と入力パターン画像から差分画像を取得している.比
較照合により抽出した欠陥と思われる領域の面積・サイズなどから欠陥・非欠陥を判定する.
図. 4 基準パターンとの比較例
7
第 1 章 序論
1.3.3
特徴抽出方式
特徴抽出方式は,あらかじめ検出すべき欠陥 (異常パターン) を定義しておき,その特徴を入力画像パタ
ーンの中から抽出して検査する方式である.前述の比較照合方式に比べて,基準パターン記憶用のメモリ
は必要ないものの,処理は一般的には複雑である.図. 5 に特徴抽出方式の例を示す.図. 5 は,検出するべ
き欠陥の特徴がパターンと異なっている場合の例である.
図. 5 特徴抽出方式の例
1.3.4
特徴抽出方式の手順例
特徴抽出方式の一例を示す.入力した画像パターンの中から欠陥パターンが存在するかどうかを画像処
理フィルタの組み合わせで判定する.以下に欠陥抽出処理の手順例を示す.
STEP1:カメラから画像データを取得する
STEP2:画像に存在するノイズを除去する
STEP3:2 値化処理を行う
まず,カメラから画像データを取得する (STEP1) .そして,取得した画像に対してノイズ除去フィルタ
であるメディアンフィルタでノイズを除去する (STEP2) .2 値化処理により,欠陥部分を黒色にし,それ
以外を白色にする (STEP3) .上記の処理手順により抽出した欠陥画像と元画像を図. 6 に示す.図. 6 の元
画像には,外観検査アルゴリズムコンテストの画像を使用した.
8
第 1 章 序論
図. 6 欠陥抽出の例
図. 6 の場合では,ノイズ除去と 2 値化処理により欠陥の抽出に成功した.実際には,図. 6 のように簡単
に欠陥を抽出できる場合は少ない.また,抽出する欠陥の種類や検出対象によっては,処理手順が前後し
たり,処理手順が異なる場合が多い.欠陥を抽出できたら,欠陥の面積・位置情報などにより,欠陥・非
欠陥の判定を行う必要もある.
9
第 2 章 画像処理
第2章
2.1
画像処理[9][10]
画像処理
画像処理とは電子工学的 (主に情報工学的) に画像を処理し,別の画像に変形または何らかの情報を取り
出すために行われる処理全般を指す.本章では FPGA で設計した各画像処理フィルタの概要を説明する.
FPGA での画像処理フィルタの設計については第 4 章で述べる.
2.2
2 値化
2 値化とは,処理する画像の輝度値が指定した閾値以下なら黒,指定した閾値以上なら白に変換する処
理のことである.2 値化処理を行うことにより画像内の画素を意味のある領域とそれ以外の領域に分ける
ことができる.また,画像のデータ量を削減できる.2 値化後の処理は基本的に単純な数値比較だけにな
り,処理量が少なくなる.
輝度ヒストグラムなどに基づいて閾値を決定する方法があるが,欠陥検査システムにおいて照明ムラな
どの外乱はほぼ無く,安定的な画像を得られる.そのため,本研究ではもっとも基本的な閾値を個別に設
定する方法で 2 値化処理を設計した.図. 7 に 2 値化処理を行った例を示す.図. 7 の例では,閾値を 115 に
設定して 2 値化処理を行った.
図. 7 2 値化処理の例
2.3
ノイズ除去
画像内には,カメラの撮像素子の不良などに起因するノイズが含まれている場合がある.ノイズはラン
ダムに画像内に存在し,処理の妨げになるものである.画像から目的の情報を効率よく抽出するためには,
ノイズをなるべく取り除いておくことが必要である.ノイズを除去する画像処理として平滑化がある.平
滑化とは,画像の色の変化を緩やかにする処理である.この処理を行うことにより,輪郭など色の変化が
10
第 2 章 画像処理
大きい部分も色の変化が乏しくなり,画像全体がぼやけた感じになる.平滑化には移動平均フィルタ,ガ
ウシアンフィルタ,メディアンフィルタなどがある.
2.3.1
移動平均フィルタ
移動平均フィルタは,図. 8 のように注目する画素とその近傍画素の輝度値を平均してその平均値を注目
画素の新しい輝度値とするフィルタである.このフィルタの特徴としては,画像中のノイズ・エッジをぼ
かすことである.図. 9 に移動平均フィルタ処理を施した画像例を示す.画像に対して移動平均フィルタ処
理を施すことにより,ノイズをぼかすことはできている.
図. 8 移動平均フィルタの例
図. 9 移動平均フィルタの実行例
2.3.2
ガウシアンフィルタ
移動平均フィルタでは注目画素周辺の輝度値を単に平均していたが,一般的な画像では注目画素に近い
画素の輝度値は注目画素の輝度値と近い場合が多い.注目画素から遠くなればなるほど,注目画素の輝度
値とは輝度差が大きくなる場合が多くなる.この事を考慮し,注目画素に近い画素ほど平均値を計算する
11
第 2 章 画像処理
ときの重みを大きくし,注目画素から遠くなるほど重みを小さくなるように式. 1 に示すガウス分布関数を
用いてフィルタのパラメータを求めるのが,ガウシアンフィルタである.
f (x, y) =
1
2πσ2
exp (-
x2 +y2
2σ2
)
式. 1
f (x, y)は,注目画素をf (0, 0)とした場合の位置を表す.σは,標準偏差 (σ2 は,分散) を表し,値が小さい
ほど平滑化の効果は小さくなる.ガウシアンフィルタにおいては,図. 10 に示すパラメータが一般的に用
いられる.図. 11 にガウシアンフィルタの適用画像を示す.
図. 10 ガウシアンフィルタのパラメータ例
図. 11 ガウシアンフィルタの実行例
2.3.3
メディアンフィルタ
メディアンフィルタとは,n×n 領域 (図. 12 の場合は 3×3) における輝度値を小さい順・大きい順に並び
替え,真ん中にくる輝度値を注目画素の出力とする処理である.ノイズは輝度値が極端に違うため小さい
12
第 2 章 画像処理
順・大きい順に並び替えると最小値,最大値となる.メディアンフィルタにより,エッジ情報を残したま
まノイズ除去を行うことができる.図. 13 にメディアンフィルタ処理を施した画像例を示す.移動平均フ
ィルタ・ガウシアンフィルタなどの平滑化フィルタでは,ノイズをぼかしていた.メディアンフィルタで
は,ランダムに発生するノイズをほぼ取り除くことができている.
図. 12 メディアンフィルタの例
図. 13 メディアンフィルタフィルタの実行例
2.4
エッジ抽出
エッジ抽出とは,画像中に含まれる物体の輪郭部分 (エッジ) を抽出する処理である.多くの場合,輪郭
部分は輝度の変化が激しくなっており,エッジには画像の特徴となる情報が非常に多く含まれる.そのた
め,画像理解・画像解析において,非常に重要な処理である.画像中からエッジを抽出するためには,大
13
第 2 章 画像処理
きく分けて 2 つのアプローチが考えられる.フーリエ変換により画像の周波数成分を求め,その高周波領
域を抽出する方法と画像に対して微分処理を行う方法である.本研究では,画像に対して微分処理を行う
ことにより画像からエッジを抽出するフィルタを設計した.
2.4.1
ソーベルフィルタ
ソーベルフィルタは空間 1 次微分を計算し,輪郭を検出するフィルタである.フィルタのパラメータを
変更することで上,下,右,左など各方向の輪郭を検出することができる.例として,水平方向のエッジ
と垂直方向のエッジを検出するソーベルフィルタを示す.図. 14 に水平方向のエッジを検出するソーベル
フィルタのパラメータを示し,図. 15 にその実行結果を示す.同様に図. 16 に垂直方向のエッジを検出する
ソーベルフィルタのパラメータを示し,図. 17 にその実行結果を示す.
図. 14 水平方向のエッジを検出するオペレータのパラメータ
図. 15 水平方向のソーベルフィルタの実行例
14
第 2 章 画像処理
図. 16 垂直方向のエッジを検出するオペレータのパラメータ
図. 17 垂直方向のソーベルフィルタの実行例
ソーベルフィルタは,次に説明するラプラシアンフィルタよりもノイズの影響を低減できる.また,縦
方向や横方向といったように,決まった方向のみのエッジを抽出したい場合に用いることが多い.ソーベ
ルフィルタにより,画像に存在するエッジを方向に関係なく求めたい場合は,縦方向のエッジ画像と横方
向のエッジ画像を合成することで最終的なエッジ抽出画像を得る.画像の合成方法は,縦方向に検出され
たエッジ画像の輝度値をfx (x, y),横方向に検出されたエッジ画像の輝度値をfy (x, y)とした場合,式. 2 によ
り,縦・横のエッジを合成した画像を得ることができる.
f ' (x, y) = (fx (x, y)2 +fy (x, y)2 )
1⁄
2
式. 2
fx は縦方向のエッジ画像を指す.fy は横方向のエッジ画像を指す.𝑓 ′ は合成した画像を指す.それぞれの
画像の (x, y) は,画像内の画素位置を指す.図. 18 に,図. 15 と図. 17 を合成した画像を示す.画像に存在
するエッジが方向に関係なく抽出されていることがわかる.
15
第 2 章 画像処理
図. 18 合成後の画像例
2.4.2
ラプラシアンフィルタ
ラプラシアンフィルタは空間 2 次微分を計算し,輪郭を検出するフィルタである.フィルタのパラメー
タを図. 19 に示す.図. 19 に示すパラメータにより,注目画素とその近傍画素の輝度の差分の変化量が極端
に大きくなっている部分を検出するフィルタである.図. 20 にラプラシアンフィルタ処理を施した画像例
を示す.
図. 19 ラプラシアンフィルタのパラメータ
図. 20 ラプラシアンフィルタの実行例
16
第 3 章 ソフトウェアとハードウェア
第3章
3.1
ソフトウェアとハードウェア
ソフトウェア処理[11][12]
ソフトウェアとは,コンピュータシステム上で何らかの処理を行うプログラムや手続き,およびそれら
に関する文書を指す言葉である.一般的に言うソフトウェア処理とは,中央処理演算装置 (CPU) でデータ
計算,制御などの処理を行うことである.CPU (Central Processing Unit) は,主記憶装置に格納されたプロ
グラム (命令) を読み出し,その命令に従って様々な処理を実行する.CPU に与えられた命令は基本的に
命令セット内にある汎用的な命令 (加算,減算,シフト演算など) を組み合わせて実現する.命令セットと
は,使用できる命令の集合である.
たとえば,CPU に除算処理を実行させたい場合,除算を行う命令が命令セット内に無く,引き算・繰り
返し演算を行う命令が命令セット内にあるとする.すると,CPU は引き算を繰り返すことにより除算処理
を実現させる.そのため,処理内容・命令の解釈の仕方 (コンパイル) によっては実行する処理が複雑にな
り,処理に時間がかかってしまうことがある.
3.1.1
逐次処理
ソフトウェア処理では,図. 21 の左側のように与えられた命令に対して,図. 21 の右側のように上から下
に向かって順番に 1 つずつ処理を実行する.読み出した命令を順番に 1 つずつ実行する処理方式を逐次処
理方式と呼ぶ.
図. 21 逐次処理
一般的なプロセッサ (パソコンの CPU など) では逐次処理方式を基本としており,画像処理の高速化に
おいて様々な問題点がある.問題点の一つとして,並列処理に向かないことが挙げられる.逐次処理方式
では,命令を順番に 1 つずつ実行するため,図. 22 のように 1 つの処理機能の実行中に他の処理機能がア
17
第 3 章 ソフトウェアとハードウェア
イドリング (待っている) 状態となってしまう.
図. 22 アイドリング状態
3.1.2
CPU での画像処理
CPU での画像処理イメージを図. 23 に示す.図. 23 で示すようにカメラで撮像した画像データをメモリに
送り,メモリにあるデータを CPU に渡して演算処理を実行する.処理結果をメモリに返し,ディスプレイ
などに出力する.
図. 23
CPU での画像処理
前節で述べたように CPU は,逐次処理を基本とする演算 / 制御回路であるため,1 クロックに一つの処
理しか実行できない.画像処理を高速に実行するために,CPU を複数個搭載して並列に処理を実行させた
り,クロック周波数を上げて処理時間を短縮するのが一般的である.しかし,CPU で演算を実行するため
に必要であるデータを CPU に転送する必要があるが,CPU にデータを転送する速度が CPU の演算処理能
力よりも低速である.そのため,演算処理能力を向上させて処理を高速化しても CPU 上で処理を行う限り
データ転送面でのボトルネックが存在する.
18
第 3 章 ソフトウェアとハードウェア
3.2 ハードウェア処理[13][14]
ハードウェアとは,実際に存在する物理的実体のことである.コンピュータを構成する回路や装置 (CPU,
ディスプレイ,キーボード) などのことを言う.ここでのハードウェア処理とは,ハードウェアである電
子回路を設計し,回路レベルで処理を実行することである.回路レベルでの動作であれば,図. 24 が示す
ようにデータが入力されたタイミングで並列に処理を実行できる.また,データ転送での遅延は基本的に
配線遅延と処理遅延だけであるため,CPU のようにデータ転送がボトルネックとなることはほぼ無い.
図. 24 ハードウェア処理のイメージ
3.2.1 パイプライン処理
パイプライン処理とは,ある処理の出力が次の処理の入力となるような構造において,それぞれの処理
を並行に行う方式である.このような方式に向いた処理としては,画像処理フィルタリングが挙げられる.
図. 25 のように複数種類のフィルタリング処理を連続して実行させたい場合,ノイズ除去処理が終了して
いるデータに対して次の処理であるエッジ抽出処理を実行し,エッジ抽出処理が終了したデータに対して
次の 2 値化処理を実行することで各処理の待ち時間を理論上 0 にすることができる.横軸に対して重なり
合っている部分がパイプライン化されている部分であり,この部分が多ければ多いほど処理の高速化が達
成されることになる.
19
第 3 章 ソフトウェアとハードウェア
図. 25 パイプライン処理
ソフトウェア処理の場合,構造が複雑になるためパイプライン処理には向いていない.しかし,ハード
ウェア処理では,データが入力されたタイミングで処理を実行することができ,パイプライン処理に向い
ている.
3.2.2
ラインバッファ処理
CPU の画像処理では,1 枚の画像単位で処理を行うため全画素のデータを格納するメモリを用意する必
要がある.しかし,ハードウェア処理の場合,1 画素単位で処理を実行できるため,1 枚の画像データを格
納するメモリを用意する必要はなく,必要な領域のデータを格納するメモリのみ用意したらよい.今回設
計した多くの画像処理フィルタの場合,n×n 領域を必要とするため n 本のラインバッファをメモリとして
用意したらよい.ラインバッファとは,画像内の 1 ライン分のデータを格納するメモリである.図. 26 に 3×3
部分領域を必要とする場合のラインバッファを示す.ラインバッファを 3 本用意することで,注目画素と
その近傍画素に対して処理を実行できる.ラインバッファの使い方としては,あるラインバッファに書き
込みを行っている間に,過去のデータを保持している数ライン分のラインバッファにアクセスし,処理を
実行するのが一般的である.
図. 26 ラインバッファの例
20
第 4 章 画像処理フィルタの設計
第4章
画像処理フィルタの設計
FPGA について[15][16]
4.1
FPGA とは,PLD (Programmable Logic Device) の一種である.プログラミングで内部回路を設計できる集
積回路である.プログラムは書き換えることができ,何度でも FPGA チップ内部の回路構成を変更できる.
FPGA 内部の回路構成は一般に HDL (Hardware Description Language)を使って設計する.
組込みシステムで FPGA を使用するメリットとしては,製品出荷後でも再設計が可能であるという柔軟
性にある.製品のアップデートや新たなプロトコル規格への対応もスムーズである.また,同じ PLD の一
つとして ASIC (Application Specific Integrated Circuit) が挙げられる.ASIC は製造後に中身を固定してしま
う為,新たな規格への対応が難しいが,FPGA より高性能であった.しかし,近年のテクノロジー進化は
目覚ましく,FPGA の高速化,高集積化,低消費電力化などが進み ASIC などと同等の機能を持つようにな
った.そのため,FPGA は様々な電子機器で使用されるようになっている.
図. 27 に FPGA チップの外観を示す.外観は CPU などの集積回路と同じように見える.FPGA チップ内
部では,数種類の基本的な機能を持った小さな論理回路とデータ蓄積用のメモリ回路が組み込まれている.
HDL プログラムにより,基本的な機能を持った小さな論理回路同士を組み合わせ,目的とする機能を備え
た大規模回路を構成する.
図. 27 FPGA チップの外観
コンピュータを構成する部品はハードウェアであるため電子流通などできなかった.しかし,FPGA で
設計する回路はプログラムであるため,FPGA を用いることによりコンピュータ・ハードウェアの電子流
通が可能となる.
4.1.1
FPGA 開発の流れ
今回は,Altera 社の FPGA チップを使用するので Altera 社の FPGA 開発の流れを説明する.FPGA ベ
ンダーにより,使用する開発ソフトウェアは異なるが,一般的な FPGA 開発の流れは同じである.FPGA
開発の流れは,図. 28 のようになる.
21
第 4 章 画像処理フィルタの設計
図. 28 FPGA 開発の流れ
まず,回路図・HDL で回路を設計する.次に,回路図・HDL で設計した回路が実際の回路として生成で
きるかコンパイル (論理合成) を実行する.コンパイルが成功したら,その回路は FPGA に組み込めること
が保証されるので入出力信号などの配置・配線を行う.回路の信号線の配置・配線も終了したら再びコン
パイル (ビットストリーム生成) する.ビットストリーム (設計した回路情報) とは,FPGA にダウンロー
ドできる形式のプログラム・ファイルである.コンパイルに成功しビットストリームが正常に生成された
ら,専用の書き込みプログラムを使って FPGA にビットストリームを書き込む.以上が FPGA 開発の主な
流れとなる.
基本的には,Altera 社が提供している Altera 社製の FPGA デバイスの統合開発環境である QuartusⅡを用
いて開発を行う.HDL のコンパイルやビットストリーム の FPGA へのダウンロード機能のほか,FPGA 開
発のほとんどを QuartusⅡソフトウェア上で行うことができる.
4.2
Verilog HDL について[17][18]
ハードウェア設計では,回路図が広く使われている.しかし,最近のディジタル LSI 設計では,ハード
ウェア記述言語 (HDL) を使用するのが一般的である.ハードウェア記述言語を用いたディジタル・システ
ムの設計は,論理回路図を描く従来の設計と比較して次のようなメリットがある.
「どのような動作をする
か」という「抽象的な回路動作」を記述すれば,論理合成・配置配線ツールで「具体的な論理回路」が生
成される.回路図を描く設計法と比較すると設計作業の大幅な効率化,IC や装置の開発期間を大幅に短縮
することができる.抽象度の高い記述が可能であるため,大規模な回路構成であっても回路の全体像をイ
22
第 4 章 画像処理フィルタの設計
メージしながら設計することができる.
HDL にはいくつかの種類がある.今回は Verilog HDL で FPGA 内部の回路設計を行った.Verilog HDL は
C 言語や Pascal の要素を取り入れた言語となっている.しかし,C 言語などで記述するソフトウェアプロ
グラムと Verilog HDL で記述するハードウェアプログラムではプログラムの実行方式が違うため,コーデ
ィングに注意する必要がある.CPU 上で動くソフトウェア処理のプログラミングでは,記述された命令は
順番に実行される.それに対して,FPGA 上で動くハードウェア処理のプログラミングでは,基本的に記
述された命令は並列に実行される.
4.2.1
Verilog HDL の記述例
Verilog HDL では,ひとまとまりの機能を「モジュール」として扱う.モジュールは,外部入出力信号を
定義するポート宣言部,内部信号を定義するネット / レジスタ宣言部,実際の回路の動作を記述する動作
記述部から構成される.図. 29 に Verilog HDL で設計した簡単なカウンター回路の記述例を示す.処理内容
としては,
クロック信号 (clk) の立ち上がりでリセット信号 (reset) が 1 であれば,
カウンター (counter_0,
counter_1) を初期化 (値を 0 にする) する.クロック信号の立ち上がりでリセット信号が 0 であれば,カウ
ンターをカウントアップする.図. 30 に論理シミュレーションソフトである ModelSim で観測したカウンタ
ー回路の波形を示す.ModelSim については,第 5 章で説明する.clk の立ち上がりで reset が 1 であれば,
counter_0,counter_1 両方を 0 に初期化している.clk の立ち上がりで reset が 0 であれば,counter_0,counter_1
両方をカウントアップしている.それぞれのカウンターを「初期化する・カウントアップする」という処
理が並列に実行されていることが分かる.
図. 29 カウンタ回路の記述例
23
第 4 章 画像処理フィルタの設計
図. 30 ModelSim で観測した波形
4.3
FPGA でのハードウェア設計
実際の回路では,信号が回路を構成する素子を通過する時間 (信号遅延) が発生する.入力から出力まで
にたくさんの論理回路を経由すると,入力信号が与えられて出力信号が生成されるまでに時間がかかる.
信号に大幅な遅延が発生したりすると,安定的にデータを取得できない.安定的にデータを取得できない
と,アルゴリズムは正しいのに実機で動作させた場合,正常に動作しないことがある.更に,誤動作の原
因を調べても原因を特定することが困難である.そのため,信号遅延を考慮した回路設計を行った.
今回設計した画像処理フィルタの多くは,注目画素とその近傍画素のデータが必要である.そのため,
各処理の前後で一時的に注目画素とその近傍画素のデータを保持する必要がある.そこで,数本分のライ
ンバッファを各処理の間に置くことで連続的に一連の処理を並列に実行できるように回路設計を行った.
4.3.1
セットアップ時間・ホールド時間
FPGA 内部に構成した順序回路は基本的にクロックの立ち上がり・立ち下がりに同期して動作する.ク
ロックの立ち上がりで処理を開始し,クロックの立ち下がりで処理後のデータを更新するのが一般的であ
る.クロックの立ち上がりで安定的に入力データを取得するには,図. 31 に示す入力データ変化禁止期間
の間は入力データが変化しないようにする必要がある.入力データ変化禁止期間の開始タイミングをセッ
トアップ時間 (ts) ,入力データ変化禁止期間の終了タイミングをホールド時間 (th) という.処理内容が複
雑すぎるとセットアップ時間・ホールド時間を守るのが難しく,システム全体の動作周波数を上げられな
いといった問題点が発生する.動作周波数が速くなってもセットアップ時間・ホールド時間を守るために
各処理を簡単にしなければならない.
24
第 4 章 画像処理フィルタの設計
図. 31 セットアップ時間とホールド時間
4.3.2
ラインバッファ構造
FPGA で設計した部分領域を抽出する全ての画像処理フィルタに共通している構造であるラインバッフ
ァ構造について説明する.図. 32 の左側にラインバッファ構造のイメージ図を示す.今回の場合,256×256
サイズの画像を対象としてシミュレーションするために設計したので,一つのラインバッファは 256 個の
データを格納できる.図. 32 のラインバッファ (buf_0,buf_1,buf_2) 内の 0 ~ 255 の数字は番地であり,
それぞれ 1 個のデータ (1 画素) を格納できる.
ラインバッファの動作としては,入力データが来たら buf_2 の 0 番地に格納する.それと同時に buf_2
の 0 番地にあったデータを buf_2 の 1 番地に格納する.同様に buf_2 の 1 番地にあったデータは buf_2 の 2
番地に格納される.隣の番地にデータを移動させる処理を全番地に対して行う.buf_2 の 255 番地にあった
データは次の番地が存在しないため,buf_1 の 0 番地に格納する.buf_1,buf_0 も buf_2 と同様にデータを
隣の番地に移動させる処理を行う.
3×3 の部分領域を必要とする画像処理フィルタの場合,図. 32 のラインバッファ内の点線で囲った番地
(各ラインバッファの 0,1,2 番地) のデータを新しいデータが入力されるたびに取得することで注目画素
とその近傍画素を更新することができる.データ更新のイメージを図. 32 の右側に示す.データ更新処理
は,フィルタ処理に用いる部分領域 (注目画素とその近傍画素) を移動することと同じである.
注目画素とその近傍画素を保持するメモリ (step1_buf) を用意し,画像処理後のデータを保持するメモリ
(step2_buf) を用意することにより,1 画素のデータが入力されるたびに 1 画素のデータを出力する構造に
することができる.部分領域の拡張を行う場合には,ラインバッファを増やす必要がある.5×5 の部分領
域を必要とする場合は,5 本分のラインバッファを用意しなければならない.
25
第 4 章 画像処理フィルタの設計
図. 32 ラインバッファ・データ更新のイメージ
4.3.3
2 値化
今回設計した 2 値化処理は第 2 章で説明したようにあらかじめ閾値 (THRESHOLD) を設定しておき,入
力データ (data_in) が設定した閾値 (115) より大きければ白,小さければ黒に変換してデータ出力
(data_out) を行う.図. 33 に Verilog HDL で設計した 2 値化処理のソースコードを示す.処理内容はデータ
が入力されるたびに入力データと閾値を比較するだけである.
図. 33 2 値化処理のソースコード (Verilog HDL)
4.3.4
移動平均フィルタ
今回設計した移動平均フィルタの処理手順を示す.
STEP1:入力データをラインバッファに格納する
STEP2:注目画素以外のデータ (8 近傍) の合計を求める
STEP3:合計値を 8 で割り,平均値を求める
STEP4:平均値を注目画素の出力値として出力する
26
第 4 章 画像処理フィルタの設計
移動平均フィルタのそれぞれの処理工程について説明する.まず,入力データをラインバッファに格納
しデータの更新を行う (STEP1) .次に,ラインバッファから取り出した部分領域 (各バッファの 0,1,2
番地) に対して,各データを加算してデータの合計値 (8 近傍の合計) を求める (STEP2) .次に,STEP2
で得たデータの合計値を 8 で割ることにより,平均値を求める (STEP3) .そして,求めた平均値を注目画
素の出力値として出力する (STEP4) .
第 2 章で説明した移動平均フィルタでは,注目画素とその 8 近傍のデータを加算して 9 で割ることによ
り,出力する注目画素を決定していた.しかし,今回設計した移動平均フィルタでは 8 近傍のデータのみ
の合計を求め,8 で割っている.ハードウェア設計において 9 で割算する場合は,回路設計が難しく処理
に時間がかかる.そこで,8 で割れるようにすることでシフト演算により割算が行えるようになる.図. 34
にシフト演算の例を示す.シフト演算とは,bit データ列を左または右にずらすことで掛算・割算を行う演
算処理である.図. 34 の上部で示す左シフトの場合,2 の n (n は,ずらした bit 数) 乗の掛算ができる. 図.
34 の下部で示す右シフトの場合,2 の n 乗の割算ができる.シフト演算処理は回路設計を簡単し,処理も
高速である.
図. 34 シフト演算の例
Altera 社が提供している IP (Intellectual Property) コアであるメガファンクションを使用すれば乗算器・除
算器など様々な機能の回路を簡単に使用できる.メガファンクションの除算器を用いれば除数と被除数の
bit 数の大きさを指定でき,商と余りは指定した被除数が 64bit ならばデータ代入から最大 64 クロックの遅
延を,32bit ならば最大 32 クロックの遅延といった様に,最大で被除数の bit 数の大きさと同じクロック数
の遅延で演算処理を行える.また,遅延を最小 1 クロックに設定することもできるが,遅延クロックが小
27
第 4 章 画像処理フィルタの設計
さい値になるほど除算器のパイプライン処理が複雑化し,消費するメモリ・LE (Logic Element) 数が増加す
るという問題点がある.今回の場合,メガファンクションを用いるよりシフト演算処理を用いたほうが回
路規模・設計の容易さなどの点で優れていると判断した.
4.3.5
ガウシアンフィルタ
今回設計したガウシアンフィルタのサイズは 3×3,5×5 である.フィルタのパラメータには,第 2 章のガ
ウシアンフィルタの節で例を出した図 .35 のパラメータを用いる.
図. 35 ガウシアンフィルタのパラメータ例
以下に設計したガウシアンフィルタの処理手順を示す.
STEP1:入力データをラインバッファに格納する
STEP2:注目画素と近傍画素に対してフィルタ処理を実行する
STEP3:処理結果を加算し,合計値を求める
STEP4:合計値を注目画素の出力値として出力する
ガウシアンフィルタのそれぞれの処理工程について説明する.
フィルタのサイズが 3×3 の場合,注目画素と 8 近傍の画素に対して,それぞれシフト演算を施すことで
フィルタ処理ができる (STEP2) .フィルタ処理後のデータを全て加算する (STEP3) .得た合計値を注目
画素の出力値として出力する (STEP4) .
フィルタのサイズが 5×5 の場合,シフト演算のみでは正確に数値を求めることができないパラメータが
存在する.値によってはシフト演算で近似したりする方法もあるが,今回は LUT (Look Up Table) を用いる
ことによりパラメータを求める.LUT とは,複雑な計算処理をあらかじめ計算しておき,処理結果を配列
に保存して配列の参照処理を行うだけで処理結果を出力できるようにするデータ構造である.計算を行う
28
第 4 章 画像処理フィルタの設計
代わりに配列から目的のデータを取り出すだけであるため,複雑な計算処理を行うより処理は高速である.
LUT ではなく,if-then の羅列でも同じような機能を実現できる.しかし if 文の場合はその都度判断が入り,
遅延が発生する.そのため,LUT を用いた.
4.3.6
メディアンフィルタ
今回設計したメディアンフィルタのサイズは 3×3,5×5,7×7,9×9 である.第 2 章で説明したようにメ
ディアンフィルタとは,n×n 部分領域における輝度値を小さい順・大きい順に並び替え,真ん中にくる輝
度値を領域中央の画素の出力輝度値とする処理である.輝度値を並び替えるために選択ソート,バブルソ
ート,マージソートなど様々なソートアルゴリズムがある.今回は,比較ソートを用いて設計を行った.
比較ソートとは,個々のデータを比較演算で大小判定し,並び替えるソートである.今回の設計では,隣
り合うデータ同士の大小比較を行い,データを並び替えていく.設計したメディアンフィルタの処理手順
を以下に示す.
STEP1:入力データをラインバッファに格納する
STEP2:左側のデータから 2 個ずつ大小比較を行う
STEP3:右側のデータから 2 個ずつ大小比較を行う
STEP4:STEP2,STEP3 を交互に繰り返す (データの個数分)
STEP5:データが小さい順・大きい順にソートされているので,中央のデータを注目画素の出力値として
出力する
メディアンフィルタのソート処理の工程について説明する.まず,図. 36 が示すように一番右側のデー
タを除く全てのデータに対して,同時刻に左側から 2 個ずつデータの大小比較を行う.大きい方のデータ
を右側に格納し,小さい方のデータが左側になるようにデータを入れ替える (STEP2) .一番右側のデータ
はそのまま次の処理に渡す.
図. 36 STEP2 の処理イメージ
次に,図. 37 が示すように STEP2 と同様の処理を右側に格納されているデータから順に行い,データを
29
第 4 章 画像処理フィルタの設計
並び替える (STEP3) .
図. 37 STEP3 の処理イメージ
STEP2 と STEP3 を交互に繰り返す (部分領域のデータ数) ことにより,図. 38 が示すようにデータは左
から小さい順に並び替えられる (STEP4) .
図. 38 STEP4 の処理イメージ
このソートアルゴリズムの場合,並列処理ができることを活かした構造となっており,並び替え処理が
終了するまでにかかる比較数は n (データの個数分) である.ここでの比較数とは,STEP2,STEP3 の処理
それぞれを一回の比較として考えた場合の処理の回数という意味である.ソートアルゴリズムの構造が単
純であるため,部分領域の拡張も簡単にできる.また,データの個数分の比較が終了すれば並び替え処理
30
第 4 章 画像処理フィルタの設計
が完了していることが保証されている.
4.3.7
ソーベルフィルタ
ソーベルフィルタは抽出したいエッジの方向によりフィルタのパラメータが異なる.そこで今回は,横
方向・縦方向のエッジを抽出するパラメータのソーベルフィルタを設計した.処理構造は抽出したいエッ
ジの方向に関係なく同じであるため,方向の拡張は容易である.本節では,図. 39 に示すパラメータでソ
ーベルフィルタ処理の説明をする.
図. 39 ソーベルフィルタのパラメータ
ソーベルフィルタの処理手順を以下に示す.
STEP1:入力データをラインバッファに格納する.
STEP2:注目画素と近傍画素に対してフィルタ処理を実行する
STEP3:処理結果を加算し,合計値を求める
STEP4:合計値を注目画素の出力値として出力する
シフト演算によりフィルタ処理を実行するが,左シフトを行うと bit 幅の拡張を行わなければならない.
そのため,右シフトで置き換えてフィルタ処理を実行する (STEP2) .右側の合計値から左側の合計値を引
く.もし,右側より左側が大きければ合計値は負の値になるので 0 に丸め込む (STEP3) .求めた合計値を
そのまま注目画素の出力値として出力する (STEP4) .
4.3.8
ラプラシアンフィルタ
ラプラシアンフィルタのフィルタパラメータには,第 2 章で例を出した図 .40 のパラメータを用いる.
31
第 4 章 画像処理フィルタの設計
図. 40 ラプラシアンフィルタのパラメータ
ラプラシアンフィルタの処理手順を以下に示す.
STEP1:入力データをラインバッファに格納する
STEP2:注目画素と近傍画素に対してフィルタ処理を実行する
STEP3:処理結果を加算し,合計値を求める
STEP4:合計値を注目画素の出力値として出力する
右シフトに置き換えてフィルタ処理を実行する (STEP2) .フィルタ処理後の 8 近傍のデータを加算す
る (STEP3) .注目画素から 8 近傍の合計値を引く.注目画素より 8 近傍の合計値が大きければ,合計値を
0 にする.得た合計値を注目画素の出力値として出力する. (STEP4) .
32
第 5 章 CPU と FPGA の処理速度比較実験と結果
第 5 章 CPU と FPGA の処理速度比較
実験と結果[19]
5.1
実験の概要
本実験では,FPGA でハードウェア化した画像処理フィルタの処理速度と CPU 上で動作するソフトウェ
ア処理での画像処理フィルタの処理速度を比較する.比較対象として,256×256 サイズの画像を用いる.
それぞれのレイテンシ時間を計測することにより,処理速度の比較を行う.レイテンシとは,データの転
送要求などのリクエストを発してから,リクエストの結果が返ってくるまでにかかる遅延時間のことであ
る.今回の場合,画像入力の終了から画像処理の終了までにかかる処理時間をレイテンシ時間とする.
5.2
各画像処理フィルタの処理速度
5.2.1
計測の概要 (CPU) [20][21]
画像処理を実行するプログラムを記述する上でウインドウ表示,画像の読み込み,画像の保存などとい
った処理が必要となってくる.自作でプログラムを記述しようとすると,膨大な知識・時間が必要である.
また,プログラム内容によっては処理速度の面で実用的ではない.そこで,プログラム開発を簡単に行う
ために画像処理用ライブラリである OpenCV (Open Source Computer Vision Library) を用いた.
OpenCV は,Intel 社によって開発・公開されたオープンソースのコンピュータビジョン向けライブラリ
である.画像処理,パターン認識,機械学習といったコンピュータビジョンに関する高度な画像処理機能
を容易に利用できる.第 2 章で説明した画像処理フィルタは,OpenCV 内に関数として用意されている.
ソフトウェアプログラムをコンパイル・実行するために,統合開発環境である Microsoft Visual Studio 2010
Professional を使用してプログラム開発を行った.ソフトウェアプログラムの記述言語として C / C++言語を
使用した.作成した画像処理プログラムを実行する CPU として,Intel(R) Core(TM) i3 CPU (2.53GHz) を使
用した.
実験内容としては,カメラから取得した画像に対して画像処理を実行したわけではなく,既にメモリに
格納されている画像に対して画像処理を実行した.カメラから画像を取得した場合でも一度メモリに画像
を格納してから画像処理を実行する.そのため,既にメモリに格納されている画像に対して画像処理を実
行し,処理速度を求めることはカメラから画像を取得する場合とほぼ同じ条件で処理速度を求めていると
考える.それぞれの画像処理フィルタで 10 回の処理速度計測を行い,平均処理速度を CPU の処理速度と
した.
5.2.2
計測の概要 (FPGA) [22]
一般的なカメラ規格である VGA カメラからデータが送られてくることを想定して,テストベンチを構築
33
第 5 章 CPU と FPGA の処理速度比較実験と結果
した.テストベンチとは,シミュレーションを行う回路に与える入力信号や出力信号を観測するために記
述するシミュレーション専用のコードのことである.VGA カメラは,1 フレーム当たり約 30 万画素
(640×480) である.
1 秒間に 30 フレーム送るとすると,
1 秒間に約 920 万画素データを転送することになる.
つまり,109ns ごとに 1 画素のデータが転送されてくる計算となる.そこで,データ転送速度としては,100ns
に 1 画素のデータを転送するように設計した.
Verilog HDL で設計した画像処理フィルタの動作確認,カメラからデータが転送されてくることを想定し
た場合のシミュレーションを行うために HDL 用のシミュレータである ModelSim を使用した.
ModelSim と
は,メンターグラフィックス社が開発・販売しているハードウェア記述言語用のシミュレータである.HDL
で設計したプログラムのコンパイル・実行などができるシミュレーション用の統合デバッグ / 解析環境で
ある.本実験では,ModelSim ALTERA Starter Edition 10.1d を使用した.
設計した画像処理フィルタ回路が正常に動作しているかの確認は,CPU での出力画像と比較すること
で判断する.FPGA では,クロックに同期して動作するのでシミュレーションにおいて処理時間は一定で
ある.
5.2.3
計測結果
すべての画像処理フィルタの処理速度の計測結果をまとめたものを表. 1 に示す.
表. 1
各画像処理フィルタの処理速度 (単位:ms)
FPGA
CPU
2 値化
0.0001
0.11
移動平均 3×3
0.026
2.56
ガウシアン 3×3
0.026
1.18
ガウシアン 5×5
0.052
1.42
メディアン 3×3
0.026
2.85
メディアン 5×5
0.053
14.58
メディアン 7×7
0.079
12.68
メディアン 9×9
0.105
14.21
ソーベル 3×3
0.026
0.78
ラプラシアン 3×3
0.026
1.24
表. 1 より,
ラインバッファ構造で設計した FPGA は CPU より格段に処理速度が速いことがわかる.
FPGA
ではバス転送でのボトルネックが存在しない.1 クロックで 1 画素の処理を実行できるように設計すると
動作周波数が高い CPU よりも高速に処理できる.CPU と FPGA それぞれの画像処理フィルタの処理速度に
ついて考察する.
CPU では,計算回数が多い処理になるほど処理時間が大幅に伸びていることが分かる.2 値化処理は,
大小比較を行うだけであるため高速である.ガウシアンフィルタ,ソーベルフィルタ,ラプラシアンフィ
34
第 5 章 CPU と FPGA の処理速度比較実験と結果
ルタはフィルタのパラメータが基本的に固定値であるため,処理は速い.平滑化では,正確に 9 で割り算
しているため少し処理に時間がかかる.メディアンフィルタでは,データの並び替えを行うために比較処
理を繰り返す.そのため,処理に時間がかかっている.
FPGA では,カメラからデータが転送されてくるタイミングに合わせて処理を順次実行できる.そのた
め,基本的にアイドリング状態になることはない.画像入力開始時には,ラインバッファ内にデータが格
納されていないため,アイドリング状態が発生する.しかし,最初に入力されたデータがラインバッファ
内の注目画素位置に格納されると,そこからはデータが入力されると同時に各処理を実行する.そのため,
各画像処理フィルタのレイテンシ時間は,アイドリング状態であった最初の「数ライン分のデータ入力時
間」と「処理の段数」となる.CPU では処理に時間がかかっていたメディアンフィルタであっても FPGA
では並列処理が可能であるため,高速に処理を行える.
図. 41 に実験に使用した元画像を示す.図. 41 の左側の画像は,2 値化処理・エッジ抽出フィルタに使用
した.図. 41 の右側の画像は,平滑化フィルタに使用した.図. 42 ~ 図. 44 に画像処理後の画像を示す.2
値化,平滑化フィルタでは画像を目視で比較する限り,正常に動作していると考えられる.エッジ抽出フ
ィルタであるソーベルフィルタとラプラシアンフィルタでは,画像に差がある.原因としては,エッジ抽
出フィルタでは輝度差を求めている.OpenCV の関数では,フィルタパラメータの合計値に対して絶対値
をとることで輝度差を得ている.それに対して,今回 FPGA 設計したエッジ抽出フィルタでは,合計値が
負の値になった場合は合計値を 0 に丸め込み,オーバーフローしたら 255 に丸め込んでいる.今後,絶対
値をとるようにエッジ抽出フィルタを設計し直して再度動作確認を行う.
図. 41 実験に使用した画像
図. 42 2 値化処理の結果画像
35
第 5 章 CPU と FPGA の処理速度比較実験と結果
図. 43 平滑化フィルタの結果画像
図. 44 エッジ抽出フィルタの結果
5.3
画像サイズの変更による処理速度
5.3.1
CPU の場合
表. 2 に画像サイズを変更した場合の各画像処理フィルタの処理速度を示す.処理速度は,画像全体のサ
イズに比例して増加する.CPU では逐次処理を基本としている.画像全体のサイズが大きくなれば,処理
の計算回数が増えるのでその分処理時間も増加する.例えば,128×128 を 256×256 に変更したらデータ量
が 4 倍になる.すると,処理の計算回数も 4 倍になり処理に 4 倍の時間を必要とする.
FPGA でシミュレーションした VGA カメラの場合で処理速度を考えると,1 フレームあたり約 33.3ms
で処理を完了しなければならない.それに対して,VGA に近い画素数である 512×512 の画像を処理するた
めに 5×5 ~ 9×9 のメディアンフィルタでは処理速度が約 50ms 以上かかる.そのため,5×5 ~ 9×9 のメディ
アンフィルタ使用する場合はフレームレートを落とさなければならない.
36
第 5 章 CPU と FPGA の処理速度比較実験と結果
表. 2
画像のサイズ変更による CPU 処理速度の変動 (単位:ms)
画像サイズ
5.3.2
128×128
256×256
512×512
1024×1024
2 値化
0.06
0.11
0.27
0.81
移動平均 3×3
0.65
2.56
8.08
33.71
ガウシアン 3×3
0.53
1.18
3.33
12.19
ガウシアン 5×5
0.58
1.42
4.87
18.29
メディアン 3×3
1.02
2.85
11.75
43.49
メディアン 5×5
5.57
14.58
58.57
207.51
メディアン 7×7
3.31
12.68
50.79
201.08
メディアン 9×9
4.01
14.21
59.62
222.01
ソーベル 3×3
0.46
0.87
2.12
7.12
ラプラシアン 3×3
0.53
1.24
4.73
17.91
FPGA の場合
表. 3 に画像サイズを変更した場合の処理速度予測を示す.ModelSim では,256×256 サイズの画像を対象
にしたシミュレーションしか行っていない.しかし,FPGA ではクロックに同期して動作するため,クロ
ック周波数・処理にかかるクロック数が分かれば処理にかかる時間を正確に予測することができる.CPU
の場合,画像全体のサイズに比例して処理時間は増加していた.対して FPGA では,アイドリング状態が
処理時間である.そのため,サイズ変更により増加する処理時間は横の画素数に比例する.
CPU で処理を実行した場合だとフレームレートを落とさないと処理を完了できなかった 5×5 ~ 9×9 のメ
ディアンフィルタでもフレームレートを落とすことなく処理を完了できる.
表. 3
画像のサイズ変更による FPGA 処理速度の変動 (単位:ms)
画像サイズ
128×128
256×256
512×512
2 値化
0.0001
0.0001
0.0001
0.0001
移動平均 3×3
0.013
0.026
0.052
0.103
ガウシアン 3×3
0.013
0.026
0.052
0.103
ガウシアン 5×5
0.026
0.052
0.103
0.206
メディアン 3×3
0.013
0.026
0.052
0.103
メディアン 5×5
0.027
0.053
0.104
0.206
メディアン 7×7
0.041
0.079
0.156
0.31
メディアン 9×9
0.054
0.105
0.207
0.412
ソーベル 3×3
0.013
0.026
0.052
0.103
ラプラシアン 3×3
0.013
0.026
0.052
0.103
1024×1024
37
第 5 章 CPU と FPGA の処理速度比較実験と結果
5.4
複数のフィルタを連結した場合の処理速度
5.4.1
計測結果
3×3 メディアンフィルタ,ラプラシアンフィルタ,2 値化の順番に処理を実行した場合の処理速度を表. 4
に示す.CPU では,逐次処理を基本動作としているため現在の処理が終了するまで次の処理を実行できな
い.そのため,全ての処理が終了するまでに最低でも 3 フレーム分のレイテンシ時間が発生する.対して
FPGA では,1 画素入力したら 1 画素出力する構造であり,処理が終了したデータを次の処理に渡してパイ
プライン処理を実行できる.そのため,各処理のアイドリング状態であった時間の合計である数ライン分
のデータ入力期間がレイテンシ時間となる.
表. 4
計測結果 (単位:ms)
FPGA
CPU
128×128
0.027
2.60
256×256
0.052
8.48
512×512
0.104
28.35
1024×1024
0.206
106.65
5.5
画像処理フィルタの修正
5.5.1
エッジ抽出フィルタの修正
図. 45 に絶対値をとるように設計し直したエッジ抽出フィルタを示す.目視で比較する限りソーベルフ
ィルタは正常に動作している.ラプラシアンフィルタは,FPGA と CPU の画像で少し輝度差がある.原因
として,OpenCV の関数では,4 近傍のラプラシアン処理を行っている.対して FPGA では,8 近傍のラプ
ラシアン処理を行っているためだと考えられる.
図. 45 修正後のエッジ抽出フィルタ
38
第 6 章 FPGA ボードへの実装に向けた実験と結果
第 6 章 FPGA ボードへの実装に向けた
実験と結果
6.1
実験環境
本実験では,論理シミュレータである ModelSim を使用して設計した回路のシミュレーションを行い,
CPU で画像処理を行う場合と処理速度の比較を行った.CPU で処理を実行させるよりも FPGA で処理を実
行させた方が格段に処理速度が速くなることを確認した.次に,実機へ設計した回路を実装した.実機と
して,Terasic 社が開発した Altera 社製の FPGA チップ CycloneV を搭載した DE1 ボードを使用した.図. 46
に DE1 ボードの外観を示す.DE1 ボードは,SDRAM メモリ,VGA 出力コネクタ,キーボードコネクタな
どを搭載しており多機能である.
図. 46
DE1 の外観
次節以降は,実機への実装に向け行った実験について説明する.今回は,設計した 3×3 メディアンフィ
ルタのみ実機への実装を行った.
6.1.1 実装実験に向けた準備
ModelSim でのシミュレーション時に ModelSim に付属するコンパイラでプログラムをコンパイルした.
ModelSim のコンパイラは機能シミュレーションを行うために設計されているので,コンパイルによって回
路を生成するわけではない.そのため,Verilog HDL で用意されているシミュレーション専用の機能を記述
してもエラー無くコンパイルすることができる.しかし,実機への実装となると,第 4 章の FPGA 開発の
流れで説明したように QuartusⅡを用いてコンパイルを行わなければならない.QuartusⅡのコンパイラは
FPGA への実装を行うために設計されている.シミュレーション専用の記述であったり,回路として生成
できないような記述があればコンパイル時にエラーとなる.ModelSim ではコンパイルエラーが発生しなく
ても QuartusⅡではコンパイルエラーが発生することはよくある.
39
第 6 章 FPGA ボードへの実装に向けた実験と結果
設計した画像処理フィルタが実機へ実装できるかを QuartusⅡでコンパイルを行い,確認した.3×3 メデ
ィアンフィルタのコンパイルを実行した結果,コンパイルエラー無く回路を生成できた.次に実機でのメ
ディアンフィルタの動作確認を行った.
第 5 章で述べたように ModelSim で擬似的なテスト環境を構築して,
正常に動作していることを確認している.しかし,実機へ実装して動作させると,処理遅延・動作クロッ
ク数などにより正常に動作しないこともある.そこで,擬似的なシミュレーション環境で動作確認を行っ
たら,次に実機でも動作確認を行う必要がある.実際に動いている回路動作を途中で観測するには,ロジ
ック・アナライザを利用する必要がある.高速で多チャンネルのロジック・アナライザは高価で,常に利
用できるとは限らない.そこで内部回路の動作検証を行うために,QuartusⅡ内にある SignalTapⅡロジッ
ク・アナライザを使用してメディアンフィルタの実機での動作確認を行った.
6.1.2
実装実験[23]
SignalTapⅡロジック・アナライザは,QuartusⅡに搭載されたシステム・レベルのデバッグ・ツールであ
り,Altera 社製 FPGA デバイスの動作検証を行う上で必須のツールである.オシロスコープなどの外部装
置を使用せず,FPGA デバイスのリソース (LE・メモリブロック) を消費してロジック・アナライザ機能を
組み込む.設計した回路の動作デバッグを目的としたツールであるため,遅延評価は対象外である.設計
したデザインの動作を実際の稼働環境と同じ速度でテストすることができる.
SignalTapⅡで波形を観測するために構築したテスト環境を説明する.5 章で行った実験のように画像を
入力して画像を出力する構造にすべきであるが,SDRAM アクセス・入出力インターフェースなどの構築
に時間を要する.また,動作に異常があった場合の修正にも時間を要する.そのため,図. 47 に示すよう
に CPU を組み込んだ構造で実装実験を行った.
図. 47 動作確認用の回路
構成した回路の処理内容は以下のような流れである.
40
第 6 章 FPGA ボードへの実装に向けた実験と結果
STEP1:CPU で生成したテストデータを FIFO_0 に渡す
STEP2:FIFO_0 に格納されているデータをラインバッファに格納する
STEP3:ラインバッファ内の 3×3 部分領域に対してメディアンフィルタ処理する
STEP4:処理し終えたデータを FIFO_1 に格納する
STEP5:FIFO_1 のデータを CPU で受け取る
メディアンフィルタ処理をするテストデータを生成するために CPU を組み込む.CPU には,Altera 社の
提供している IP コアである NiosⅡ Processor を用いる.NiosⅡ Processor は,Altera 社の FPGA デバイスの
ために設計された 32 ビットの組み込み用途のプロセッサである.まず,NiosⅡ Processor でテストデータ
を生成し,コンソール画面に入力データを表示するとともに FIFO_0 にテストデータを格納する (STEP1) .
設計したメディアンフィルタ回路は,FIFO_0 にデータが格納されているか確認し,FIFO_0 にデータが格
納されている場合はそのデータをラインバッファに格納する (STEP2) .ラインバッファに格納されている
データに対してメディアンフィルタ処理を実行する (STEP3) .メディアンフィルタ処理し終えたデータを
FIFO_1 に格納していく (STEP4) .CPU は,FIFO_1 に格納されているデータを受け取りコンソール画面に
出力する (STEP5) .
FIFO_0,FIFO_1 は FIFO (First In First Out) と呼ばれるメモリで,データを出力するときに格納された順
に出力するメモリである.FIFO をバッファとして用意することで,CPU の処理とメディアンフィルタの処
理をそれぞれの速度で実行できる.
SignalTapⅡで実機での回路動作を確認するが,保存できる観測波形の容量は小さい.そこで,CPU のソ
フトウェア設計でコンソール画面に CPU から FIFO_0 に送るデータと FIFO_1 から受け取るデータを表示
することにより,より確実な動作確認ができる.
テストデータについて説明する.0,1,2,…と順番に 255 までの数値を入力し,次に 255,254,253,
…と順番に 0 までの数値を入力する.今回の実験では,この数値を繰り返し入力するようにしている.
メディアンフィルタの期待動作を図. 48 に示す.入力データが 0,1,2,…,255 の場合は,出力データ
は 1,1,2,3,…,254 と順番に出力される.入力データが 255,254,253,…,0 の場合は,出力データ
は 254,254,253,252,…,1 と順番に出力される.
41
第 6 章 FPGA ボードへの実装に向けた実験と結果
図. 48 メディアンフィルタの期待動作
図. 49 に SignalTapⅡで観測した波形の一部を示す.目視で確認できるように波形を数値データに変換し
ている.期待動作では,入力データの昇順・降順が切り替わるタイミングを除く入力データに対して出力
データは入力データと同じ値であった.しかし,SignalTapⅡの観測波形では入力データに対して 2 小さい
値が出力されている.図. 48 に示す出力データでは,処理にかかるクロック数などを考慮せず注目画素が
更新された瞬間の新しい注目画素とその 8 近傍のメディアンフィルタ処理後の中央値を出力データとして
いる.しかし,実際に出力されるデータは,処理クロック数などを考慮すると 2 クロック前の注目画素で
あるため,入力データより 2 小さい値となる.波形の一部しか載せていないが,目視で確認する限り正常
に動作していた.また,コンソール画面でも入力データと出力データを確認したが,正常に動作していた.
図. 49 SignalTapⅡで観測した波形
実際には,ランダムなテストデータとそのテスト結果を用意しておき,用意したテスト結果と実際に稼
働させて得たテスト結果を比較することにより動作確認をする必要がある.
42
第 7 章 終論
第7章
終論
本研究では,FPGA を用いて画像処理フィルタのハードウェア設計を行い,CPU の処理速度と FPGA の
処理速度を比較し,画像処理フィルタのハードウェア化の有効性を検証した.FPGA での設計において,
パイプライン構造・ラインバッファ構造にすることで CPU よりも処理速度が格段に速くなることを示した.
そして,設計した画像処理フィルタの一部が実機へ実装できることも確認した.
CPU の場合,処理速度は画像全体のサイズに対して比例して増加していた.それに対して FPGA では,
処理速度は画像の横ラインの長さに比例して増加していた.ラインセンサカメラの場合,横 1 列の画素数
は固定であり縦に関していえばメモリの許す限り無限大に撮像できる.CPU を用いた場合では,レイテン
シ時間は縦方向のデータが増えるにつれ膨大になる.それに対して FPGA を用いた場合では,レイテンシ
時間はラインバッファの数・長さである.横の画素数は固定であるため,縦方向のデータが増えてもレイ
テンシ時間は変わらない.複数のフィルタを連結した場合,CPU では最低でもフィルタ数分のフレーム処
理時間がレイテンシ時間となる.対して FPGA では,それぞれのフィルタのアイドリング状態であった「数
ライン分のデータ入力時間」と「処理の段数」を合計した時間がレイテンシ時間であり,数ラインから数
十ライン程度の画素入力時間である.以上より,ラインセンサカメラのデータ処理に FPGA を用いること
は有効であると考えられる.
今後の課題として,全ての画像処理フィルタで実装実験を行い,実機上での動作確認をする必要がある.
全ての画像処理フィルタの動作確認が終了したら,次実験として CMOS カメラを使用して画像入出力回路
の設計・動作確認を行う予定である.次にカメラ関連のインターフェースを整えて,ラインセンサカメラ
を用いた実験に移る.
43
謝辞
謝辞
本研究を進めるにあたり,学費,生活など様々な面で 4 年間大学生活を支え続けてくれた両親に深く感
謝します.
本研究を遂行・論文を執筆するにあたり,多忙にもかかわらず数々のご指導,助言を賜りました高知工
科大学電子・光システム工学科星野孝総准教授に深く感謝いたします.
また,多岐にわたりご助力・ご指摘いただきました高知工科大学システム工学群未来ロボット工学研究
室の皆様に深く感謝いたします.
44
参考文献
参考文献
[1] 三好 雄大:卒業研究報告”FPGA 画像処理によるリアルタイム凹凸欠陥検出実験”,2010
[2] 星野 総孝:FPGA を用いたモルフォロジー処理のための進化計算による自動設計手法,日本知能情報
ファジィ学会,第 26 回ファジィシステムシンポジウム,2010
[3] 石津 任章,武田 幹雄,馬場 祥宏,佐野 誠,藤原 義也,中野 鉄平,森江 隆:画像処理 IP と FPGA
実装,一般社団法人 電子情報通信学会,電子情報通信学会技術研究報告,2002
[4] 富田 康之:”ラインセンサアプリケーションにおける HALKON の活用 今,市場が求める「ソフトウ
ェア」での処理”,画像ラボ,vol. 24,no. 10,pp. 65-69,2013
[5] 武田 有志:組込みシステムは FPGA / SoC の時代へ,地方独立行政法人 東京都立産業技術研究センタ
ー,Tiri News 2008 vol. 023
[6] 虫明 大貴:卒業研究報告”FPGA による処理を考慮した走査線ラベリングアルゴリズムの開発”,2014
[7] 岡崎 彰夫:はじめての画像処理技術,工業調査会,2000
[8] 平成 18 年度 先端的外観検査技術に関する調査研究報告書,社団法人 日本機械工業連合会・社団法人
日本オプトメカトロニクス協会,2007
[9] 昌達 慶仁:詳解 画像処理プログラミング,ソフトバンククリエイティブ,2008
[10] David A. Forsyth (著) ,Jean Ponce (著) ,大北 剛 (翻訳) :コンピュータビジョン,共立出版,2007
[11] 坂井 修一:コンピュータアーキテクチャ,コロナ社,2004
[12] Design Wave MAGAZINE 2003 年 8 月号,CQ 出版,No.69
[13] すすわたり:FPGA 入門 回路図と HDL によるディジタル回路設計,秀和システム,2012
[14] 三好 健文:Hello World から始める FPGA 入門,CQ 出版,インターフェース ZERO No. 04,2013
45
参考文献
[15] 井倉 将実:FPGA ボードで学ぶ Verilog HDL,CQ 出版,2007
[16] 小林 優:FPGA ボードで学ぶ組込みシステム開発入門~Altera 編~,技術評論社,2011
[17] 木村 真也:わかる Verilog HDL 入門,CQ 出版,2007
[18] 堀 桂太郎:図解 Verilog HDL 実習,森北出版,2006
[19] 玉真 昭男:DSP 内蔵 FPGA を用いた画像処理回路の高速化,静岡理工科大学紀要,2004
[20] 奈良先端科学技術大学院大学 OpenCV プログラミングブック制作チーム,OpenCV プログラミングブ
ック,毎日コミュニケーションズ,2007
[21] 矢嶋 聡:プロフェッショナル Visual C++ 2010,日経 BP 社,2012
[22] 安岡 貴志:Verilog HDL & VHDL テストベンチ記述の初歩,CQ 出版,2011
[23] Altima Corporation:SignalTapⅡ クイック・ガイド,2009 ver9.0
Fly UP