筑波大学情報学群の実験講座「組み込み技術キャンパスOJT」(以下、COJT)における最後のカリキュラム「自由課題」で、私たち赤崎と石田は、物体検知のアルゴリズム、「背景差分法」をテーマに据えて各自の作品を設計しました(自由課題については第8回の成果報告会の記事を参照)。1年間の総まとめである自由課題で、私たちがこれまでの学びをどう生かし、設計を進めていったのかについて2回に分けてお伝えします。今回は、赤崎の作品について説明します。

 赤崎は、背景差分法により動く物体を検知する回路を制作しました。

 背景差分法とは、背景となる画像(例:監視カメラの画像)を事前に用意し、観測画像との差分をとることで物体を検知する手法です。下の図を見ていただくとすぐ理解できると思います。

物体検知の様子
[画像のクリックで拡大表示]
背景差分法概略図
[画像のクリックで拡大表示]

 左が実際にFPGA上で動作している様子で、右が背景差分法の概略図です。背景差分法自体はとてもシンプルなアルゴリズムです。概略図に示した通り、背景を用意し、撮影した画像と比較し、違いが出たところを出力する。たったこれだけのアルゴリズムです。

 上のような単純な背景差分を行う回路は、今回の課題で制作した「キャプチャー回路」と「描画回路」の2つを組み合わせれば簡単に作成できました。具体的には、まずキャプチャー回路から画像を取り込み、背景画像とします。それを二値化し、適当なしきい値を設けてそれを基準とし、撮影画像を二値化したものとの差分を判定し、差分が現れている箇所を描画回路で色付けする。これだけの手順で背景差分が実現できます。

 しかしながら、この簡単かつ単純すぎるアルゴリズムはやはり穴だらけで、改良しないとまともに動作しません。なぜなら、画像ごとの誤差の影響によって、正常な物体検知ができないからです。カメラの位置を固定して同じ風景の画像を連続的に撮影しても、それぞれの撮影画像には人間に判別できないような、それこそ1画素単位の誤差が存在します。しかも、その誤差はそれぞれの画像ごとに揺らぐので、背景画像を用意して単に撮影画像との差分を取るだけでは、画像ごとの誤差の影響をまともに受けてしまうのです。