MATLAB_8-边缘检测_大长腿干扰下识别人脸

思想:

1,利用肤色识别,首先转换为YCbCr类型。

YCbCr其中Y是指亮度分量,Cb指蓝色色度分量,而Cr指红色色度分量。

ycbcr(:,:,3);这个就是代表取出肤色的意思。

cr(cr>146&cr<160)=255:在区间:144-160里面的就使其变成255,白色,其余的就变成黑色:

cr(cr~=255)=0等同于,cr不等于255的就让其变成0,黑色。

得到:

然后就容易研究啦,变成二值图。

再根据需要找到的人脸与干扰项(长腿)的特征区别进行排查就OK啦。

查看有坑洞的图片,以及填充过后的图片:

代码:

bwao=bwareaopen(bwfill,1600);
figure,imshow(bwao);

 

利用数学进行筛选:

bs=bwboundaries(bwao); 

bwboundaries是一个函数,可以用来获取二值图中对象的轮廓,包括外部轮廓与内部边缘。

 

rectangle(),程序语言,功能是画一个矩形。

rectangle('position',[min(x),min(y),w,h'], 'edgecolor','r'):

position:位置的意思

后面四个,一次是。最小X坐标,最小Y坐标,w:向右方向扩展长度。h:向上方向扩展长度

edgecolor:边缘颜色

r:代表红色

代码:

clear,clc,close all;
f=imread('girls.jpg');
imshow(f);
ycbcr=rgb2ycbcr(f);
cr=ycbcr(:,:,3);

cr(cr>146&cr<160)=255;
cr(cr~=255)=0;
figure,imshow(cr);

bw=im2bw(cr);
figure,imshow(bw);
bwfill=imfill(bw,'holes');
figure,imshow(bwfill);

bwao=bwareaopen(bwfill,1600);
figure,imshow(bwao);

bs=bwboundaries(bwao);
figure,imshow(f);

for i=1:size(bs,1)
    boders=bs{i};
    x=boders(:,2);
    y=boders(:,1);
    w=max(x)-min(x);
    h=max(y)-min(y);
    hold on;
    if(h/w>1&&h/w<2)
        rectangle('position',[min(x),min(y),w,h'], 'edgecolor','r');
    end    
end




结果:

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值