羅國平
【摘 要】隨著計算機技術和光學成像技術的發展,人臉識別技術應運而生,人臉識別技術在人工智能、機器識別、機器學習、模型理論、專家系統、視頻圖像處理等領域具有廣泛的應用。人臉識別技術,基礎是人臉的邊緣識別和提取,本文重點介紹人臉識別技術中人臉邊緣提取程序實現。
【關鍵詞】人臉識別;感知識別技術;圖像二值化
中國圖書分類號: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。