生活随笔
收集整理的這篇文章主要介紹了
基于matlab实现人脸识别解析
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1.人臉識別流程
1.1.1基本原理
基于YCbCr顏色空間的膚色模型進行膚色分割。在YCbCr色彩空間內對膚色進行了建模發現,膚色聚類區域在Cb—Cr子平面上的投影將縮減,與中心區域顯著不同。采用這種方法的圖像分割已經能夠較為精確的將人臉和非人臉分割開來。
1.1.2流程圖
人臉和非人臉區域分割程序a=25.39;
b=14.03;
ecx=1.60;
ecy=2.41;
sita=2.53;
cx=109.38;
cy=152.02;
xishu=[cos(sita) sin(sita);-sin(sita) cos(sita)];
%如果亮度大于230,則將長短軸同時擴大為原來的1.1倍
if(Y>230)a=1.1*a;b=1.1*b;
end
%根據公式進行計算
Cb=double(Cb);
Cr=double(Cr);
t=[(Cb-cx);(Cr-cy)];
temp=xishu*t;
value=(temp(1)-ecx)^2/a^2+(temp(2)-ecy)^2/b^2;
%大于1則不是膚色,返回0;否則為膚色,返回1
if value>1result=0;
elseresult=1;
end
end人臉的確認程序
part=zeros(h,w);
%二值化
for i=y:(y+h)for j=x:(x+w)if bImage(i,j)==0part(i-y+1,j-x+1)=255;elsepart(i-y+1,j-x+1)=0;endend
end
[L,num]=bwlabel(part,8);
%如果區域中有兩個以上的矩形則認為有眼睛
if num<2eye=0;
elseeye=1;
end
end
人臉識別主程序
gray=rgb2gray(I);
ycbcr=rgb2ycbcr(I);%將圖像轉化為YCbCr空間
heighth=size(gray,1);%讀取圖像尺寸
width=size(gray,2);
for i=1:heighth %利用膚色模型二值化圖像for j=1:widthY=ycbcr(i,j,1);Cb=ycbcr(i,j,2);Cr=ycbcr(i,j,3);if(Y<80)gray(i,j)=0;elseif(skin(Y,Cb,Cr)==1)%根據色彩模型進行圖像二值化gray(i,j)=255;elsegray(i,j)=0;endendend
end
se=strel('arbitrary',eye(5));%二值圖像形態學處理
gray=imopen(gray,se);
figure;imshow(gray)
[L,num]=bwlabel(gray,8);%采用標記方法選出圖中的白色區域
stats=regionprops(L,'BoundingBox');%度量區域屬性
n=1;%存放經過篩選以后得到的所有矩形塊
result=zeros(n,4);
figure,imshow(I);
hold on;
for i=1:num %開始篩選特定區域box=stats(i).BoundingBox;x=box(1);%矩形坐標Xy=box(2);%矩形坐標Yw=box(3);%矩形寬度wh=box(4);%矩形高度hratio=h/w;%寬度和高度的比例ux=uint16(x);uy=uint8(y);if ux>1ux=ux-1;endif uy>1uy=uy-1;endend
if size(result,1)==1 && result(1,1)>0 %對可能是人臉的區域進行標記rectangle('Position',[result(1,1),result(1,2),result(1,3),result(1,4)],'EdgeColor','r');
else%如果滿足條件的矩形區域大于1,則再根據其他信息進行篩選a=0;arr1=[];arr2=[]; for m=1:size(result,1)m1=result(m,1);m2=result(m,2);m3=result(m,3);m4=result(m,4);%得到符合和人臉匹配的數據if m1+m3<width && m2+m4<heighth && m3<0.2*widtha=a+1;arr1(a)=m3;arr2(a)=m4;%rectangle('Position',[m1,m2,m3,m4],'EdgeColor','r');endend%得到人臉長度和寬度的最小區域arr3=[];arr3=sort(arr1,'ascend');arr4=[];arr4=sort(arr2,'ascend');%根據得到的數據標定最終的人臉區域for m=1:size(result,1)m1=result(m,1);m2=result(m,2);m3=result(m,3);m4=result(m,4);%最終標定人臉if m1+m3<width && m2+m4<heighth && m3<0.2*widthm3=arr3(1);m4=arr4(1);rectangle('Position',[m1,m2,m3,m4],'EdgeColor','r');endend
end
(4)程序說明
人臉識別程序主要包含三個程序模塊,人臉識別主程序由三部分構成。第一部分:將圖像轉化為YCbCr顏色空間,根據色彩模型進行圖像二值化,二值化圖像進行形態學處理、開運算,顯示二值圖像;第二部分:采用標記方法選取出圖中的白色區域,度量區域屬性,存放經過篩選以后得到的所有矩形塊,篩選特定區域,存儲人臉的矩形區域;第三部分:對于所有人臉的矩形區域,如果滿足條件的矩形區域大于1則再根據其他信息進行篩選,標記最終的人臉區域。
圖像分割程序中,利用膚色可以較為精確的將人臉和非人臉區域分割開來,得到較為精確的二值化圖像。
人臉的確認程序,以存儲的所有矩形區域作為研究對象,當區域內有眼睛存在時,才認為此區域為人臉區域
3運行結果
第一幅圖
原始圖像
膚色分割的二值化圖像
人臉識別圖像
第二幅圖
原始圖像
膚色分割的二值化圖像
人臉識別圖像
第三幅圖
原始圖像
膚色分割的二值化圖像
人臉標定
總結
以上是生活随笔為你收集整理的基于matlab实现人脸识别解析的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。