罗国平
【摘 要】随着计算机技术和光学成像技术的发展,人脸识别技术应运而生,人脸识别技术在人工智能、机器识别、机器学习、模型理论、专家系统、视频图像处理等领域具有广泛的应用。人脸识别技术,基础是人脸的边缘识别和提取,本文重点介绍人脸识别技术中人脸边缘提取程序实现。
【关键词】人脸识别;感知识别技术;图像二值化
中国图书分类号:TP391 文献标识码A
一、引言
计算机识别是目前人工智能领域研究的重点,人脸识别是计算识别的重要内容之一,而人脸区域提取是人脸识别的关键,本文重点探讨如何实现人脸区域识别。
1.1.采用VC++设计人脸识别程序基本组成
人脸识别系统通过图像采集系统捕捉图像,然后通过计算相似度、二值化处理、垂直直方图、水平直方图、然后标记人脸区域,边缘提取等步骤,才能实现人脸识别,过程是比较复杂的。因此,能否正确标记出人脸区域是人脸识别是否成功的关键。
1.2.人脸识别面部区域提取
人脸面部区域提取,首先将图像二值化处理,如果二值化处理成功则处理,提取脸部区域,标记脸部区域块,如果二值化处理未完成,则退出本次处理,具体算法详细参考以下程序。
void CFaceDetectDlg::OnBtnMarkFace1()
{
if(!method1->m_bBinaryReady)
{
AfxMessageBox("请先计算二值化图!");
return;
}
m_bShowFace = true;
SetCursor(LoadCursor(NULL,IDC_WAIT));
int *temp = new int[m_nWndWidth];
int max = 0;
int pos = -1;
for(int j=0; j { int count = 0; for(int i=0; i { if(method1->m_pBinaryArray[i][j] == 1) count++; } temp[j] = count; if(count > max) { max = count; pos = j; } } int left,right,l,top,bottom; for(l=pos; l>=0; l--) { if(temp[l] { left = l; break; } } for(l=pos; l { if(temp[l] { right = l; break; } } for(int i=0; i { int count = 0; for(l = left;l<=right;l++) { if(method1->m_pBinaryArray[i][l] == 1) count++; } if(count>=(right-left)*0.5) { top = i; break; } } bottom=(int)(top+(right-left)*1.5)>=m_nWndHeight?m_nWndHeight-1:(int)(top+(right-left)*1.5); CopyBitMap(m_tResPixelArray,m_tOriPixelArray); for(i=top;i<=bottom;i++) { m_tResPixelArray[i][left].rgbBlue=255; m_tResPixelArray[i][left].rgbGreen = m_tResPixelArray[i][left].rgbRed = 0;m_tResPixelArray[i][right].rgbBlue=255; m_tResPixelArray[i][right].rgbGreen = m_tResPixelArray[i][right].rgbRed = 0; } for(j=left;j<=right;j++) { m_tResPixelArray[top][j].rgbBlue=255; m_tResPixelArray[top][j].rgbGreen = m_tResPixelArray[top][j].rgbRed = 0; m_tResPixelArray[bottom][j].rgbBlue=255; m_tResPixelArray[bottom][j].rgbGreen = m_tResPixelArray[bottom][j].rgbRed = 0; } MakeBitMap(); SetCursor(LoadCursor(NULL,IDC_ARROW)); if(m_bFaceOK) { ReplaceDlg dlg; if(dlg.DoModal()==IDOK) { CopyBitMap(m_tResPixelArray,m_tOriPixelArray); CRect rect(left,top,right,bottom); m_rFaceRegion = rect; MakeBitMap(); } } else { m_bFaceOK = true; CopyBitMap(m_tResPixelArray,m_tOriPixelArray); CRect rect(left,top,right,bottom); m_rFaceRegion = rect; MakeBitMap(); } } 經过处理二值化处理后,该算法能正确识别出人脸区域,为下一步标记眼睛、鼻子、嘴巴等部位做好准备。 二、实现测试 为了方便实验,将人脸图像通过手机或摄像头方式拍取图片,存储在计算机中,通过编写的识别程序,读取图片,处理图像数据后,然后捕捉人脸区域,经过实际测试,能够正确识别出人脸区域,如图1所示。 三、结论 通过多次试验,该算法完全能够正确提取出人脸区域,为人脸进一步识别做好准备。这种算法测试成功,由于C语言具有很好的可移植性,因此这种算法很容易移植到其它嵌入式设备中。 【参考文献】 [1]、Visual C++ 6.0数字图像处理 何斌、马天予、王运坚、朱红莲. 2002。 [2]、Visual C++ 数字图像与图形处理,向世明 电子工业出版社 2002。