⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 facialoutline-detect.m

📁 关于人脸轮廓检测的matlab小程序
💻 M
字号:
clear;  %清空工作区变量
Image=imread('zjt.JPG');    %读取图像文件
imshow(Image);
Iycbcr=rgb2ycbcr(Image);        %颜色空间转换
[m,n,k]=size(Image);
for i=1:1:m                     %根据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);         %开运算(即先腐蚀再膨胀),消除杂散点
%figure,imshow(Ibwopen);
Ibwoc=imclose(Ibwopen,SE);      %闭运算,去掉由于开运算引入的许多缺口
%figure,imshow(Ibwoc);
imf=imfill(Ibwoc,'holes');      %填充孔洞
%figure,imshow(imf);
Iedged=edge(imf,'Roberts');     %边缘检测
%figure,imshow(Iedged);
[Ilabeled regionnum]=bwlabel(Iedged,8);     %连通区域标记

%regloc是一个二维数组,第1维:region编号,第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
%通过对图像的象素级搜索得出各个连通区域的regloc值,为画框作准备
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))     %人脸长宽比限制
       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
            

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -