Haar-Like特徴量の原理・計算式・高速化

この記事では、Haar-Like特徴量の基本的な原理や仕組みについてまとめました。

Haar-Like特徴量とは

Haar-Like特徴では、次のような矩形領域のパターンを設定します。

そして、白領域に対応する画素の和と、黒領域に対応する画素の和の差を特徴量とします。
画素値をそのまま用いる場合と比べて照明条件の変動やノイズの影響を受けにくくなります。

この特徴量は、顔検出などに使われています。

例えば、顔の目の部分は、「目玉が暗い」「目元は明るい」というのが大体誰でも共通しています。
このような特徴をたくさん取ることで顔全体の特徴を捉えていきます。

Haar-Like特徴量の計算アルゴリズム

①Haar-like特徴に用いるパターンを複数用意します。

②入力画像の任意の位置に探索窓を配置します。

③探索窓の任意の位置に矩形領域を配置します。

④矩形領域に任意のパターンを設定します。

⑤パターンの黒領域、白領域それぞれの画素値の和の平均A_1, A_2を求めます。
そして、それらの差を特徴量Hとします。

(1) \begin{eqnarray*} H= A_1-A_2 \end{eqnarray*}

画素値の和の計算には積分画像を用いること処理を高速化します。
【参考】積分画像の原理・計算式・高速化

⑥矩形領域の位置・サイズ・パターンを変えて⑤の計算を繰り返します。

⑦検索窓の位置を変えて②~⑥を繰り返します。

検出時間の高速化

探索窓のサイズにもよりますが、矩形領域の位置・サイズ・パターンの組み合わせの総数は膨大です。
したがって、計算した特徴量全てをそのまま使って顔検出などに利用すると、計算時間が膨大になってしまいます。
そこで、学習によって決定した重要度が高い特徴量のみを使うことで、計算時間を短縮します。
これをブースティング(Boosting)といいます。

【例】
入力画像のサイズが24×24[px]の場合・・・特徴量候補は約18万個
ブースティング・・・重要度が高い数百~数千個の特徴量のみを選択

【参考】ブースト(boost・AdaBoost)の原理

【関連記事】
【画像処理入門】アルゴリズム&プログラミング

シェア&フォローお願いします!