人脸检测

function facedetec()
  sum=0;
  % clc,close all;
  iptsetpref('ImshowBorder', 'tight')
  f=imread('faces.jpg');
  Ori_Face=f;
  copy=f;
  img=f;
  % figure,imshow(f);
  f=rgb2ycbcr(f);%rgb转换为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(1); imshow(f);
  %K=medfilt2(f,[5 5]);%5×5中值滤波,去除噪声
  %figure,imshow(f);
  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%利用开闭运算的方法消除噪声
  se=strel('square',3);
  f=imopen(f,se);
  f=imclose(f,se);
  figure(2),imshow(f);
  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%填孔处理
  f=imfill(f,'holes');
  figure(3),imshow(f);
  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%重构法
  fe=imerode(f,ones(8,7));
  fo=imopen(f,ones(8,7));
  f=imreconstruct(fe,f);
  figure(4),imshow(f);
  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%相关匹配,作用不大,可注释掉
  %w=ones(3);%w为模板大小.
  %f=imfilter(f,w);
  %figure(5),imshow(f);
  % [M,N]=size(f);
  % f=fft2(f);
  % w=conj(fft2(w,M,N));
  % g=real(ifft2(w.*f));
  % gs=gscale(g);
  % figure,imshow(gs);
  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  %人脸候选区筛选时,由于头部部分重合,以及头部与其他
  %部分,例如衣服等的连接,对筛选造成了困难,故应先利用
  %闭运算操作,断开连接,再进行处理.
  se1=strel('square',8);
  f=imerode(f,se1);
  f=imdilate(f,se1);
  figure(6),imshow(f);
  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%区域连通
  [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
  %脸部区域<250的去掉,一般为手或其他干扰.
  %利用脸部宽长比的大概上下限来确定一个模板范围.
  %矩形面积area_sq=目标区长度*宽度,目标区面积为area,若area/area_sq<0.6,认为不是人脸区,删除之.
  for j=1:temp(1);
  L(r(j),c(j))=0;
  end
  else
  continue;
  end
  end
  L=bwperim(L,8);%边缘检测,检测出人脸的边缘区域
  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);
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值