一个简单的人脸检测
<span style="font-size:18px;"><strong>I=imread('lena.jpg');
imshow(I)
% I=rgb2gray(I);
I=wiener2(I,[5 5]);
figure;
imshow(I);
bw=im2bw(I);
figure;
imshow(bw);
[m n]=size(bw);
r=floor(m/10);
c=floor(n/10);
x1=1;x2=r;
s=r*c;
%吧圖像的邊緣的十分之一區域進行去除
for i=1:10y1=1;y2=c;for j=1:10if(y2<=c | y2>=9*c)|(x1==1 | x2==r*10)bw(x1:x2,y1:y2)=0;endy1=y1+c;y2=y2+c;endx1=x1+r;x2=x2+r;
end %吧圖像邊緣十分之一的弄成黑色
figure;
imshow(bw);
L=bwlabel(bw,4); %標注個聯通區域
BB=regionprops(L,'BoundingBox'); %計算包含這個連通區域的最小矩形的坐標
BB1=struct2cell(BB); %將個聯通區域的坐標結構轉換成元包
BB2=cell2mat(BB1); %將元包轉換成數組
[s1 s2]=size(BB2);
mx=0;
for k=3:4:s2-1p=BB2(1,k)*BB2(1,k+1);if p>mx & (BB2(1,k+1)/BB2(1,k))<2mx=p;j=k;end
end %根據人臉區域長度與寬度的比小于2來確定figure;
imshow(I);
hold on
rectangle('Position',[BB2(1,j-2) BB2(1,j-1) BB2(1,j) BB2(1,j+1)],'EdgeColor','r')
%用紅矩形框畫出人臉區域</strong></span>
總結
- 上一篇: 提取图像的边界,用数字标记不同的目标边界
- 下一篇: 创建形态学操作