人脸识别区域提取

2019-07-24 10:33罗国平
智富时代 2019年6期
关键词:人脸识别

罗国平

【摘 要】随着计算机技术和光学成像技术的发展,人脸识别技术应运而生,人脸识别技术在人工智能、机器识别、机器学习、模型理论、专家系统、视频图像处理等领域具有广泛的应用。人脸识别技术,基础是人脸的边缘识别和提取,本文重点介绍人脸识别技术中人脸边缘提取程序实现。

【关键词】人脸识别;感知识别技术;图像二值化

中国图书分类号: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。

猜你喜欢
人脸识别
人脸识别 等
揭开人脸识别的神秘面纱
人脸识别技术的基本原理与应用
人脸识别技术在高速公路打逃中的应用探讨
基于(2D)2PCA-LBP 的人脸识别方法的研究
浅谈人脸识别技术
人脸识别在高校安全防范中的应用
巡演完美收官 英飞拓引领人脸识别新潮流
人脸识别在Android平台下的研究与实现
基于Metaface字典学习与核稀疏表示的人脸识别方法