羅國(guó)平
【摘 要】隨著計(jì)算機(jī)技術(shù)和光學(xué)成像技術(shù)的發(fā)展,人臉識(shí)別技術(shù)應(yīng)運(yùn)而生,人臉識(shí)別技術(shù)在人工智能、機(jī)器識(shí)別、機(jī)器學(xué)習(xí)、模型理論、專家系統(tǒng)、視頻圖像處理等領(lǐng)域具有廣泛的應(yīng)用。人臉識(shí)別技術(shù),基礎(chǔ)是人臉的邊緣識(shí)別和提取,本文重點(diǎn)介紹人臉識(shí)別技術(shù)中人臉邊緣提取程序?qū)崿F(xiàn)。
【關(guān)鍵詞】人臉識(shí)別;感知識(shí)別技術(shù);圖像二值化
中國(guó)圖書分類號(hào):TP391 文獻(xiàn)標(biāo)識(shí)碼A
一、引言
計(jì)算機(jī)識(shí)別是目前人工智能領(lǐng)域研究的重點(diǎn),人臉識(shí)別是計(jì)算識(shí)別的重要內(nèi)容之一,而人臉區(qū)域提取是人臉識(shí)別的關(guān)鍵,本文重點(diǎn)探討如何實(shí)現(xiàn)人臉區(qū)域識(shí)別。
1.1.采用VC++設(shè)計(jì)人臉識(shí)別程序基本組成
人臉識(shí)別系統(tǒng)通過圖像采集系統(tǒng)捕捉圖像,然后通過計(jì)算相似度、二值化處理、垂直直方圖、水平直方圖、然后標(biāo)記人臉區(qū)域,邊緣提取等步驟,才能實(shí)現(xiàn)人臉識(shí)別,過程是比較復(fù)雜的。因此,能否正確標(biāo)記出人臉區(qū)域是人臉識(shí)別是否成功的關(guān)鍵。
1.2.人臉識(shí)別面部區(qū)域提取
人臉面部區(qū)域提取,首先將圖像二值化處理,如果二值化處理成功則處理,提取臉部區(qū)域,標(biāo)記臉部區(qū)域塊,如果二值化處理未完成,則退出本次處理,具體算法詳細(xì)參考以下程序。
void CFaceDetectDlg::OnBtnMarkFace1()
{
if(!method1->m_bBinaryReady)
{
AfxMessageBox("請(qǐng)先計(jì)算二值化圖!");
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(); } } 經(jīng)過處理二值化處理后,該算法能正確識(shí)別出人臉區(qū)域,為下一步標(biāo)記眼睛、鼻子、嘴巴等部位做好準(zhǔn)備。 二、實(shí)現(xiàn)測(cè)試 為了方便實(shí)驗(yàn),將人臉圖像通過手機(jī)或攝像頭方式拍取圖片,存儲(chǔ)在計(jì)算機(jī)中,通過編寫的識(shí)別程序,讀取圖片,處理圖像數(shù)據(jù)后,然后捕捉人臉區(qū)域,經(jīng)過實(shí)際測(cè)試,能夠正確識(shí)別出人臉區(qū)域,如圖1所示。 三、結(jié)論 通過多次試驗(yàn),該算法完全能夠正確提取出人臉區(qū)域,為人臉進(jìn)一步識(shí)別做好準(zhǔn)備。這種算法測(cè)試成功,由于C語言具有很好的可移植性,因此這種算法很容易移植到其它嵌入式設(shè)備中。 【參考文獻(xiàn)】 [1]、Visual C++ 6.0數(shù)字圖像處理 何斌、馬天予、王運(yùn)堅(jiān)、朱紅蓮. 2002。 [2]、Visual C++ 數(shù)字圖像與圖形處理,向世明 電子工業(yè)出版社 2002。