PR

 次に、照度の変化に対応する方法を考え、照度が変化すると画像の輝度値が変化することに着目しました。輝度といえば、CMOSカメラが送ってくる画像データの形式がYUV422で、ちょうどそのY値が輝度です(キャプチャー回路の記事を参照)。そこで、画素値の差分を取るときにこれまではRGB値を用いていていたのを、今度は輝度のY値のみで行うことにしました。

 さて、輝度のみを用いることによって、画像を単に輝度の値を要素としたベクトルと見なせることにお気付きでしょうか。画像の照度が変化すると、すべての画素の輝度が“一律に変化”します。輝度の変化は、ベクトルの大きさが変化することを意味します。しかし、一律に変化しているのでベクトルの向き自体は変わりません。ということは、ここで皆さんが高校ないし大学の授業で習った「ベクトルの正規化」を用いれば、大きさを無視してベクトルの向きだけで画像の差分を取ることができます。これを利用したのが「正規化距離法」です。

正規化距離法
[画像のクリックで拡大表示]

 上図の式を撮影画像ごとに計算します。ベクトル正規化しているので値は0~1の範囲に収まり、背景画像との差分が現れれば値が大きくなります。従って、適当にしきい値を設けて差分を判定します。これで誤検知がぐっと減るようになりました。

2つの手法の比較。左はかなりノイズの影響を受けているが右は頑健
[画像のクリックで拡大表示]

 輝度を考慮することにより、カメラの照度の調整に対してだけではなく、室内の明かりの変化などにもそれなりに頑健となっています。このアルゴリズムもやっていることは単純ですが、それをハードウエアで動かすのはなかなか大変でした。除算の計算などソフトウエアでは問題となりませんが、ハードウエアでは簡単に遅延の原因となります。キャプチャー回路と描画回路を用いていたのでそれらを今回の課題の回路に合わせて書き換えることにもかなり時間を取られました。