Mastering OpenCV with Practical Computer Vision Projectの第8章の顔認識は、4つのStepで構成されている。
今回は、Step2の、顔認識の精度を高めるための前処理に関しての続き
顔と両目の検出ができた場合、両目の位置をそろえることにより検出精度を高める。
・warpAffin()を使用することで、以下の項目を実現できる。
・両目が水平なるように回転させる。
・両目の間隔を一定にそろえる
・目の高さを顔の中心にすることで、顔の高さを所望のものにする。
・髪の毛、額、あご、耳の部分が含まれないように領域を切り取る
あらかじめ決めた理想の座標と、検出した両目の座標を用いてアフィン行列を作る。
はじめに、目の中心座標を求め、アフィン変換を行う
詳細な方法は、コードに記載されている。
・ヒストグラムの平滑
現実世界では、左右の照明環境が異なる場合があり、認識精度に影響を与える。
右半分と、左半分でヒストグラムの平滑化を別々に行う
ただし、そのまま合成すると境目ではっきりとしたエッジが生じてしまう。
これを回避するために、左右別々のヒストグラムの平滑化と、全体で平滑化したものを
合成する。
左から 0-25% 左半分の平滑化画像
25-50% 左半分の平滑化画像と全体平滑化画像を距離に応じて加算
50-75% 全体平滑化画像と右半分の平滑化画像とを距離に応じて加算
75-100% 右半分の平滑化画像
・スームージング
平滑化を行うとノイズが目立ってしまう
これを回避するためにbilateralFilterを使用する
・楕円マスク
首は影の影響を受けやすいので、黒画像の楕円マスクを作成、上記画像と合成する
以上により認識用の前処理画終了
第8章を数日前に読み終えていたのだが、なかなか書く気力がなかったが何とか年内に纏め上げることができた。
0 件のコメント:
コメントを投稿