資源簡介
膚色模型人臉識別matlab代碼,膚色模型人臉識別matlab代碼,膚色模型人臉識別matlab代碼
代碼片段和文件信息
clear?all
close?all
clc
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%?讀入待檢測圖像
RGB=?imread(‘1.jpg‘);
subplot(221)imshow(RGB);title(‘原圖‘);
I=rgb2ycbcr(RGB);???%顏色空間轉換?
[abc]=size(I);?%得到圖像的像素點個數
cb=double(I(::2));
cr=double(I(::3));
%膚色模型
for?i=1:a
????for?j=1:b
????????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?
%去噪
SE?=?strel(‘square‘8);?
imf=imopen(pSE);?????????%開運算(即先腐蝕再膨脹),消除雜散點?
subplot(222)imshow(imf);title(‘膚色模型分割效果圖‘);
%%%%%%%%%%%%%%%%%%%%%%%根據填充率去除手腳、胳膊等非人臉區域%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
[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)=b
- 上一篇:用matlab生成正弦表程序.m文件
- 下一篇:matlab基于GUI實現記事本功能
評論
共有 條評論