資源簡介
人臉識別,MATLAB源碼,matlab人臉識別,基于matlab的人臉識別

代碼片段和文件信息
clear?all
close?all
clc
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%?讀入待檢測圖像
x=?imread(‘boy1.bmp‘);
xx=x;
figureimshow(x);?%RGB
fR=xx(::1);
fG=xx(::2);
fB=xx(::3);
figureimshow(fR);?%?r?gray?
f=1/9*ones(3);%低通濾波器,濾除高頻噪聲?
filtered_fR=imfilter(fRf);
filtered_fG=imfilter(fGf);
filtered_fB=imfilter(fBf);
figureimshow(filtered_fR);?%?r?gray?filter
x_filtered=cat(3filtered_fRfiltered_fGfiltered_fB);
figureimshow(x_filtered);?%rgb?filter
I=rgb2ycbcr(x);????????%顏色空間轉換??Ycbcr
figureimshow(I);
gray=rgb2gray(x);??%gray
figureimshow(gray);
[abc]=size(I);?%得到圖像的像素點個數
Iy?=?I(::1);
Icb?=?I(::2);
Icr?=?I(::3);
figureimshow(Icb);
title(‘Icr‘);
%display(c);
cb=double(I(::2));
%display(cb);
cr=double(I(::3));
for?i=1:a???%240
????for?j=1:b?%320
????????w=[cb(ij)cr(ij)];
????????m=[117.4316?148.5599];
????????n=[260.1301?12.1430;12.1430?150.4574];
????????p(ij)=exp((-0.5)*(w-m)*inv(n)*(w-m)‘);%算某象素點的概率
????????if?(p(ij)<0.5)?
????????????p(ij)=0;
????????else?
????????????p(ij)=1;
????????end
????end
end?
fenge=p;
figure
imshow(fenge);
SE?=?strel(‘square‘3);?
imf=imopen(pSE);?????????%開運算(即先腐蝕再膨脹),消除雜散點?
xingtai=imf;
figure
imshow(xingtai);
%figureimshow(Ibwopen);?
%Ibwoc=imclose(IbwopenSE);??????%閉運算,去掉由于開運算引入的許多缺口?
%figureimshow(Ibwoc);?
%imf=imfill(Ibwoc‘holes‘);??????%填充孔洞?
%%%%%%%%%%%%%%%%%%%%%%%根據填充率去除手腳、胳膊等非人臉區域%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
[Lnum]=bwlabel(imf8);?????%連通區域標記?
B=zeros(size(imf));
for?i=1:num
????Area(i)=bwarea(L==i);%計算每個皮膚區域的面積
end
for?i=1:num
????[rc]?=?find(L==i)?;
????left(i)=min(c);
????right(i)=max(c);
????up(i)=min(r);
????down(i)=max(r);
end
for?i=1:num?
????%計算各矩形區域面積
????Rect_Area(i)=(down(i)-up(i))*(right(i)-left(i));
end
%計算各區域的填充率
Ratio=Area./Rect_Area;
for?i=1:num?
???if?Ratio(i)>=0.5%若相應區域的填充率大于0.5則保留該區域
???????[xy]=find(L==i);%第i塊區域的坐標值
???????B=B+bwselect(imfyx8);%把填充率大于0.5皮膚區域疊加起來???
???end??????
end
%%%%%%%%%%%%%%%%%%%%%%%%%%根據面積比來進一步除去一些較小的非人臉區域%%%%%%%%%%%%%%%%%%%%%%%%%%
[L1num1]=bwlabel(B8);?????%連通區域標記
B1=zeros(size(B));
for?i=1:num1
????Area(i)=bwarea(L1==i);%計算每個皮膚區域的面積
end
maxarea=max(Area);%取最大值
q=Area/maxarea;%每塊區域的面積與最大區域面積的比值???
for?i=1:num1?
???if?q(i)>=0.3%若相應區域的面積比值大于0.3則保留該區域
???????[xy]=find(L1==i);%第i塊區域的坐標值
???????B1=B1+bwselect(Byx8);%把面積比值大于0.3皮膚區域疊加起來???
???end??????
end
%%%%%%%%%%%%%%%%%%%%%%%%%%根據膚色區域的長寬比來除去一些非人臉區域%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
[L2num2]=bwlabel(B18);?????%連通區域標記?
B2=zeros(size(B1));
for?i=1:num2
????[rc]?=?find(L2==i);??
????left(i)=min(c);
????right(i)=max(c);
????up(i)=min(r);
????down(i)=max(r);
end
for?i=1:num2
????if?((down(i)-up(i))/(right(i)-left(i)))>0.8&((down(i)-up(i))/(right(i)-left(i)))<2
????????[xy]=find(L2==i);
????????B2=B2+bwselect(B1yx8);%%%把滿足長寬比在0.8到2的區域留下
????end
end
figure
imshow(xx);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%把人臉框出來%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
[L3?num3]=bwlabel(B28);???
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件?????230454??2012-10-09?10:29??face\boy1.bmp
?????文件???????3753??2018-03-23?16:25??face\face_idenfication.m
?????文件?????294966??2012-10-09?10:30??face\girl1.bmp
?????文件?????230454??2012-10-09?10:29??face\girl2.bmp
?????文件?????304182??2012-10-09?15:07??face\girl3.bmp
?????文件????1133360??2017-11-21?20:26??face\lena1.png
?????文件??????19259??2018-03-20?19:14??face\mayun.jpg
?????目錄??????????0??2018-03-23?17:58??face
-----------?---------??----------?-----??----
??????????????2216428????????????????????8
評論
共有 條評論