?

人臉識別區域提取

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字典學習與核稀疏表示的人臉識別方法
91香蕉高清国产线观看免费-97夜夜澡人人爽人人喊a-99久久久无码国产精品9-国产亚洲日韩欧美综合