顔認識アプリケーション
1507 ワード
前に述べた顔テストの後、顔を抽出し、訓練や識別のために保存し、顔を抽出するコードは以下の通りである.
顔の前処理
今では顔を手に入れました.その顔の画像を使って顔認識をすることができます.しかし、このように簡単に普通の画像から直接顔認識をしようとすると、少なくとも10%の精度を失うことになります.
1人の顔認識システムでは、複数の前処理技術を適用して、認識する画像を標準化することが極めて重要である.多くの顔認識アルゴリズムは光照射条件に敏感であるため,暗室で訓練すれば明るい部屋では認識されない可能性があるなどである.この問題は「lumination dependent」に帰すことができ、他にも多くの例があります.例えば、顔も画像の非常に固定された位置(例えば、目の位置が同じ画素座標)、固定された大きさ、回転角度、髪と装飾、表情(笑い、怒りなど)、光照射方向(左または上)でなければなりません.これは、顔認識を行う前に、良い画像プリプロセッシングフィルタを使用することが重要な理由です.顔の周りの余分なピクセルを除去するなど、他のことをする必要があります(楕円マスクを使うなど、髪や画像の背景ではなく、内部の顔領域だけを表示します.彼らの変化は顔領域より多いからです).
簡単にするために、私があなたに示した顔認識システムは、階調画像を用いた特徴的な顔の方法です.そこで、カラー画像を階調画像に簡単に変換し、その後、ヒストグラム等化(Histogram Equalization)を自動的に顔画像の明るさとコントラストを標準化する方法として簡単に使用する方法を説明します.より良い結果を得るためには、カラー顔認識(color face recognition,ideally with color histoggram fitting in HSV or another color space instead of RGB)を使用するか、エッジ補強(edge enhancement)、輪郭検出(contour detection)、ジェスチャー検出(motion detection)など、より多くの前処理を使用することができます.
void GetImageRect(IplImage* orgImage, CvRect rectInImage, IplImage* imgRect,double scale)
{
// orgImage (rectInImage) imgRect
IplImage *result=imgRect;
CvRect size;
size.x=rectInImage.x*scale;
size.y=rectInImage.y*scale;
size.width=rectInImage.width*scale;
size.height=rectInImage.height*scale;
//result=cvCreateImage( size, orgImage->depth, orgImage->nChannels );
//
cvSetImageROI(orgImage,size);
cvCopy(orgImage,result);
cvResetImageROI(orgImage);
}
顔の前処理
今では顔を手に入れました.その顔の画像を使って顔認識をすることができます.しかし、このように簡単に普通の画像から直接顔認識をしようとすると、少なくとも10%の精度を失うことになります.
1人の顔認識システムでは、複数の前処理技術を適用して、認識する画像を標準化することが極めて重要である.多くの顔認識アルゴリズムは光照射条件に敏感であるため,暗室で訓練すれば明るい部屋では認識されない可能性があるなどである.この問題は「lumination dependent」に帰すことができ、他にも多くの例があります.例えば、顔も画像の非常に固定された位置(例えば、目の位置が同じ画素座標)、固定された大きさ、回転角度、髪と装飾、表情(笑い、怒りなど)、光照射方向(左または上)でなければなりません.これは、顔認識を行う前に、良い画像プリプロセッシングフィルタを使用することが重要な理由です.顔の周りの余分なピクセルを除去するなど、他のことをする必要があります(楕円マスクを使うなど、髪や画像の背景ではなく、内部の顔領域だけを表示します.彼らの変化は顔領域より多いからです).
簡単にするために、私があなたに示した顔認識システムは、階調画像を用いた特徴的な顔の方法です.そこで、カラー画像を階調画像に簡単に変換し、その後、ヒストグラム等化(Histogram Equalization)を自動的に顔画像の明るさとコントラストを標準化する方法として簡単に使用する方法を説明します.より良い結果を得るためには、カラー顔認識(color face recognition,ideally with color histoggram fitting in HSV or another color space instead of RGB)を使用するか、エッジ補強(edge enhancement)、輪郭検出(contour detection)、ジェスチャー検出(motion detection)など、より多くの前処理を使用することができます.