?? face.m
字號(hào):
function facedetec()
sum=0;
clc,close all;
iptsetpref('ImshowBorder', 'tight')
f=imread('E:\vv.bmp');
Ori_Face=f;
copy=f;
img=f;
figure,imshow(f);
f=rgb2ycbcr(f);%rgb轉(zhuǎn)換為ycbcr
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
figure,imshow(f);
f_cb=f(:,:,2);
f_cr=f(:,:,3);
f= (f_cb>=100) & (f_cb<=127) & (f_cr>=138) &(f_cr<=170) ;
%皮膚顏色在ycbcr色度空間的分布范圍為:100<=cb<=127,138<=cr<=170
figure; imshow(f);
K=medfilt2(f,[5 5]);%5×5中值濾波,去除噪聲
figure,imshow(f);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%利用開(kāi)閉運(yùn)算的方法消除噪聲
se=strel('square',3);
f=imopen(f,se);
f=imclose(f,se);
figure,imshow(f);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%填孔處理
f=imfill(f,'holes');
figure,imshow(f);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%重構(gòu)法
fe=imerode(f,ones(8,7));
fo=imopen(f,ones(8,7));
f=imreconstruct(fe,f);
figure,imshow(f);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%相關(guān)匹配,作用不大,可注釋掉
%w=ones(3);%w為模板大小.
%f=imfilter(f,w);
%figure,imshow(f);
%[M,N]=size(f);
%f=fft2(f);
%w=conj(fft2(w,M,N));
%g=real(ifft2(w.*f));
%gs=scale(g);
%figure,imshow(gs);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%人臉候選區(qū)篩選時(shí),由于頭部部分重合,以及頭部與其他
%部分,例如衣服等的連接,對(duì)篩選造成了困難,故應(yīng)先利用
%閉運(yùn)算操作,斷開(kāi)連接,再進(jìn)行處理.
se1=strel('square',8);
f=imerode(f,se1);
f=imdilate(f,se1);
figure,imshow(f);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%區(qū)域連通
[L,num]=bwlabeln(f,4);
for i=1:num;
[r,c]=find(L==i);
r_temp=max(r)-min(r);
c_temp=max(c)-min(c);
temp=size(r);
sum=sum+temp(1);
area_sq=r_temp*c_temp;
area=size(find(L==i),1);
ratio=area/area_sq;
if (r_temp/c_temp<0.8)|(r_temp/c_temp>2)|temp(1)>2000|temp(1)<200|ratio<0.6
%臉部區(qū)域<250的去掉,一般為手或其他干擾.
%利用臉部寬長(zhǎng)比的大概上下限來(lái)確定一個(gè)模板范圍.
%矩形面積area_sq=目標(biāo)區(qū)長(zhǎng)度*寬度,目標(biāo)區(qū)面積為area,若area/area_sq<0.6,認(rèn)為不是人臉區(qū),刪除之.
for j=1:temp(1);
L(r(j),c(j))=0;
end
else
continue;
end
end
L=bwperim(L,8);%邊緣檢測(cè),檢測(cè)出人臉的邊緣區(qū)域
L=uint8(L);
z=find(L(:)>0);
L(z)=255;
ave=sum/num;%ave=696.
figure(7),imshow(L);
L_r=L;
L_g=L;
L_b=L;
L_rgb=cat(3,L_r,L_g,L_b);%在原圖上加框
figure,imshow(L_rgb);
img1_r=min(L_r + img(:,:,1),255);
img1_g=min(L_g + img(:,:,2),255);
img1_b=min(L_b + img(:,:,3),255);
img1=cat(3,img1_r,img1_g,img1_b);
figure(8),imshow(img1);
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -