この顔検出回路は、課題で制作した「キャプチャー回路」と「描画回路」を組み合わせた構成になっています。二つの回路については、これまでの記事で解説されたものとほとんど同じものを使用していますが、顔検出機能を実装するために、描画回路に新たなモジュールを追加しました。フレームを肌色および髪色で2値化するための「2値化モジュール」と、積分画像*1を生成する「積分モジュール」の二つです。

*1 積分画像 画像処理時に画素値の和を計算することが多々あるが、この計算を効率良く処理するための画像。積分画像における画素値は、元の画像の左上隅からその位置までの画素値を合計したものになる。こうすることによって、和を計算する際に参照する画素が四つで済み、画像の大小にかかわらず固定される(通常は、例えば画素数が640×480で画像の画素値の和を求めるには640×480すべての画素を参照しなければならない)。
積分モジュール
[画像のクリックで拡大表示]

 ここで、この回路の処理の流れを説明します。

(i)キャプチャー回路で映像を取り込む
(ii)取り込んだ映像を、RGB形式からHSV形式に変換する
(iii)変換した映像から、肌色と髪色で2値化したものをそれぞれ生成する
(iv)2値化したものから積分画像を生成する
(v)積分画像に対して走査を行い、顔の部分に白線を描画する

 (i)については、キャプチャー回路の記事で解説しているので省略します。

 (ii)では、取り込んだ映像はRGB形式になっていますが、RGB形式は色判定に不向きなので(光などで情報が変わってしまう)、HSV*2形式に変換します。

*2 HSV 色相(色の種類、0~360の範囲で表現)、彩度(色の鮮やかさ、0~100の範囲で表現)、および明度(色の明るさ、0~100の範囲で表現)という三つの成分から成る色空間。RGBよりも人間の知覚表現に近い形式である。