NHKオンデマンドに加入してから「ITホワイトボックス2」という番組を視ています。
今回のテーマは、「デジタルカメラ 簡単・キレイのスゴイ技」」でした。
http://www.nhk.or.jp/itwb/2/workshop/10.html
放送の中で、デジタルカメラの顔検出の話題があり、以外と単純な方法で行っていることを今頃知りました。
人間は画像からものを検出したり顔の検出も非常に簡単にできるので、コンピュータにも非常に簡単にできる
だろうと思われていた時期がある、ところが実際にやってみるとものすごく難しい。
1970年代には、顔の目と鼻と口があることを一生懸命を見つけようとしたけど、人間の顔には個人差があり、
横を向いている場合とか、目があったけどこっちには口がなかったりと、判定がむずかしかった。
ところが、2000年に発表された研究論文によって顔検出のブレークスルーがおきます。
顔の明暗の特徴を、単純化した白黒の図形に置き換え、写真全体からこの特徴に当てはまる場所を絞り込む
ことでより高速に顔が検出できるようになった。
論文:http://research.microsoft.com/en-us/um/people/viola/pubs/detect/violajones_cvpr2001.pdf

例えば、目のあたりとその下を比べると 窪んだ目のあたりが暗くみえます。
明暗の差で暗いところを黒、明るいところを白とした単純な図形に置き換えます。
同じことを鼻のあたりで行うと、つきでた鼻は明るく、その左右は影になって暗くなります。
そのような白黒の図形を数千種類使い、マッチするかでどうかで顔を検出するのです。
背景などと一緒に人物が写っている写真があった場合、検出用の図形一つ一つは単純なので、
最初は背景とかも候補になったりするのですが、順番にマッチしない箇所を外して選んでいって
最終的に淘汰して残ったものが顔として検出されるようになるのです。
いわゆる発想の転換ってやつですね。コンピュータは単純な作業をするのは得意ですもん。
デジタルカメラ向け顔画像処理技術
http://www.kec.jp/committee/johoshi/pdf/jyohoshi_210-3.pdf
低解像度画像からの顔検出
www.isl.titech.ac.jp/~hasegawalab/papers/face_detect_low3.pdf
OpenCVで学ぶ画像認識
http://gihyo.jp/dev/feature/01/opencv/0003?page=1
C#からOpenCVで顔を検出して"ゆっくり"してみよう
http://d.hatena.ne.jp/zecl/20090424/p1
肌色検出、及びその弊害
http://www.ai.kyutech.ac.jp/~toshi/kiso_2/ensyu/color/skin.html
顔検出の第一人者でもある佐藤真一著「石頭なコンピュータの眼を鍛える」