资源简介
人脸识别中检测人脸眼睛的状态,基于matlab的,简单易懂
代码片段和文件信息
clc;
clear all;
%------------------读入待识别的人脸图像------------------------
[filename pathname] = uigetfile( ...
{‘*.bmp;*.jpg;*.png;*.jpeg‘ ‘Image Files (*.bmp*.jpg*.png*.jpeg)‘; ...
‘*.*‘ ‘All Files (*.*)‘} ...
‘Pick an image‘);
if isequal(filename0)||isequal(pathname0)
return;
end;
fpath=[pathname filename];
RGB=imread(fpath);
YCbCr=rgb2ycbcr(RGB);%将rgb图像转为YCbCr图像
[HW]=size(rgb2gray(RGB));
%------------------利用肤色来提取人脸区--------------------------
M=[117.4361;156.5599];
C=[160.130112.1430;12.1430299.4574]; %见文献
P=zeros(HW);
PM=0;
x=zeros(21); %x=[CbCr]‘转置
for i=1:H
for j=1:W
x(1)=YCbCr(ij2);
x(2)=YCbCr(ij3);
P(ij)=exp(-0.5*(x-M)‘/C*(x-M));%相似度计算
if P(ij)>PM
PM=P(ij);
end
end
end
P=P/PM; %归一化
%---------------图像二值化---------------------------
thr=0.6:-0.05:0.10;
len=length(thr);
nch=zeros(len-11);
num=zeros(len);
for k=1:len
thresh=thr(k); %设定可能的阈值
num(k)=sum(sum(P>thresh));
if k>1
nch(k-1)=num(k)-num(k-1);
end
end
[minnchindex]=min(nch);
thresh=thr(index+1);%确定阈值
I=P>thresh; %二值化处理
subplot(221)imshow(I)%I为二值化后的图像
%-------------------直方图,即投影积分--------------------------
shp=sum(I2);%人脸水平投影,即横向,来确定人脸的高度
shp=shp‘;
len=length(shp);
y=1:len;
hold on
subplot(221)
chz=sum(I); %人脸垂直投影,即竖直方向来确定人脸的宽度
%subplot(222)
plot(shpy);
%subplot(222)
plot(chz);
subplot(222)
plot(shpy);
subplot(222)
plot(chz);
%%%%利用chz确定左右边界,左边界是峰值的0.2倍,右边界是峰值的0.3倍
[max_chzindex]=max(chz);
i=index;
while i>0
i=i-1;
if chz(i)<0.2*max_chz;
L=i;
break;
end
end
j=index;
while j j=j+1;
if chz(j)<0.3*max_chz;
R=j;
break;
end
end
%%%%%%%%达到人脸宽度一半的起始位置确定为人脸框的上边界
newpface=I(:L:R);
newshp=sum(newpface2);
i=0;
while i i=i+1;
if newshp(i)>0.5*(R-L);
T=i; %%%上边界
break;
end
end
B=T+1.4*(R-L); %下边界1.5
if B>H
B=H;
else
B=floor(B);
end;
subplot(224)imshow(RGB)
hold on;
subplot(224);
plot([L L][T B]‘Linewidth‘2‘color‘‘red‘);
plot([R R][T B]‘Linewidth‘2‘color‘‘red‘);
plot([L R][B B]‘Linewidth‘2‘color‘‘red‘);
plot([L R][T T]‘Linewidth‘2‘color‘‘red‘);
face=RGB(T:BL:R:);
figure(2);
imshow(face);
%------------------确定眼睛y轴位置----------------------------
faceb=I(T:BL:R);%脸部的二值化图像,该二值化图像是以肤色为阈值的
figure(3)
subplot(221)imshow(faceb);
shp=sum(faceb2);%人脸水平投影,即横向,来确定人脸的高度
shp=shp‘;
len=length(shp);
y=1:len;
chz=sum(faceb); %人脸垂直投影,即竖直方向来确定人脸的宽度
hold on
%subplot(222)
shp=smooth(shp30‘loess‘);%对数据进行平滑处理
chz=smooth(chz30‘loess‘);
plot(shpy);
%subplot(223)
plot(chz);
subplot(222)
plot(shpy);
subplot(223)
plot(chz);
indexmin=find(diff(sign(diff(shp)))==2)+1; %求极小值对应位置
midface=len/2-5;%人脸的水平中心位置
nummin=length(indexmin);%极小值个数
indexpf=find(indexmin eye=indexmin(indexpf(end));
eyebr
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 6380 2013-05-20 17:26 客户\ycbcr.m
文件 5651 2013-05-20 13:34 客户\za.fig
文件 9844 2013-05-20 13:48 客户\za.m
文件 3584 2013-05-20 13:34 客户\za_activex1
文件 3584 2013-05-20 13:34 客户\za_activex2
文件 710656 2013-05-20 19:17 客户\项目验收程序说明.doc
目录 0 2013-05-21 21:45 客户
----------- --------- ---------- ----- ----
739699 7
相关资源
- Matlab锁相环仿真-Phase Locked Loop.rar
-
Fuzzysimuli
nk有关模糊PID问题概述-自适 - 用matlab写的有限元程序-FEM2DL_Box.m
- matlab开发-能带计算
- matlab开发-FlockingAlgorithm
- KF+EKF matlab程序实现
- Matlab多元统计分析程序
- matlab实现电力系统潮流计算-PQ分解法
- matlab读取SP3文件
- 内弹道计算
- 相关向量机的快速算法
- 基于MATLAB的OFDM系统仿真及分析
- 基于MATLAB的液压伺服控制系统分析与
- MATLAB7.x图像处理
- 灰度共生矩阵matlab
- 实用化工计算机模拟--MATLAB在化学工程
- MATLAB电机仿真精华50例源代码.zip
- 水和水蒸气热力性质计算程序代码m
- MATLAB课设学生成绩管理系统
- 清洁机器人路径规划matlab仿真程序
- MATLAB电机仿真精华50例源代码269078
- BP神经网络解决手写数字识别问题 m
- 基于倒谱图判断浊音的基音周期MATL
- 图像的饱和度,亮度,色调的matlab代
- 肤色检测matlab代码
- SRC的程序,matlab的,很有用处
- 粒子群算法优化pid源码 matlab仿真.ra
- ChinaMap.rar
- MATLAB控制工程工具箱技术手册
- 圆拟合matlab程序,以及圆心 半径的确
评论
共有 条评论