?? facialoutline-detect.m
字號(hào):
clear; %清空工作區(qū)變量
Image=imread('zjt.JPG'); %讀取圖像文件
imshow(Image);
Iycbcr=rgb2ycbcr(Image); %顏色空間轉(zhuǎn)換
[m,n,k]=size(Image);
for i=1:1:m %根據(jù)CbCr的閾值生成二值圖像
for j=1:1:n
if(Iycbcr(i,j,2)<125&&Iycbcr(i,j,2)>90&&Iycbcr(i,j,3)<170&&Iycbcr(i,j,3)>133)
Ibw(i,j)=255;
else
Ibw(i,j)=0;
end
end
end
figure,imshow(Ibw);
SE = strel('square',3);
Ibwopen=imopen(Ibw,SE); %開運(yùn)算(即先腐蝕再膨脹),消除雜散點(diǎn)
%figure,imshow(Ibwopen);
Ibwoc=imclose(Ibwopen,SE); %閉運(yùn)算,去掉由于開運(yùn)算引入的許多缺口
%figure,imshow(Ibwoc);
imf=imfill(Ibwoc,'holes'); %填充孔洞
%figure,imshow(imf);
Iedged=edge(imf,'Roberts'); %邊緣檢測(cè)
%figure,imshow(Iedged);
[Ilabeled regionnum]=bwlabel(Iedged,8); %連通區(qū)域標(biāo)記
%regloc是一個(gè)二維數(shù)組,第1維:region編號(hào),第2維:1234分別代表top、left、right、bottom值
for i=1:1:regionnum
regloc(i,1)=n;
regloc(i,2)=m;
regloc(i,3)=0;
regloc(i,4)=0;
end
%通過(guò)對(duì)圖像的象素級(jí)搜索得出各個(gè)連通區(qū)域的regloc值,為畫框作準(zhǔn)備
for i=1:1:m
for j=1:1:n
if(Ilabeled(i,j)~=0)
num=Ilabeled(i,j);
if(i<regloc(num,1))
regloc(num,1)=i;
end
if(j<regloc(num,2))
regloc(num,2)=j;
end
if(j>regloc(num,3))
regloc(num,3)=j;
end
if(i>regloc(num,4))
regloc(num,4)=i;
end
end
end
end
hold on;
for num=1:1:regionnum
if(regloc(num,4)>(regloc(num,1)+(regloc(num,3)-regloc(num,2))*1.2)) %人臉長(zhǎng)寬比限制
regloc(num,4)=regloc(num,1)+(regloc(num,3)-regloc(num,2))*1.2;
end
x=[regloc(num,2);regloc(num,2);regloc(num,3);regloc(num,3);regloc(num,2)];
y=[regloc(num,1);regloc(num,4);regloc(num,4);regloc(num,1);regloc(num,1)];
plot(x,y); %畫框
end
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -