matlab眼睛检测,一个人眼检测的程序,但是不是很懂,求大神留言讲解一下

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

clear all;

close all;

clc;

I=imread('img_368.jpg');

I=rgb2gray(I); %灰度变换

figure(1); imshow(I);

J=I;

[m,n]=size(J);

if isa(J,'double')~=1

J=double(J);

end

M=5; %gabor滤波器有5个尺度

X=16; %gabor滤波器窗口大小

Y=16;

gb=getGaborKernels(M,X,Y);

gabor_real=conv2(J,real(gb(:,:,1)),'same'); %返回和J大小相同的卷积

gabor_imag=conv2(J,imag(gb(:,:,1)),'same');

f=sqrt(gabor_real.*gabor_real+gabor_imag.*gabor_imag); %平方根 .*矩阵乘法

f=(f-min(f(:))) / (max(f(:))-min(f(:)));

figure(2); imshow(f);

% 边沿亮点涂黑

f(1:10,:)=0;

f(m-10:end,:)=0;

f(m/2+1:2*m/3,:)=0;

figure(3);

imshow(f);

k=f;

t=k(1:m/2,1:n/2);

max_t=max(t(:)); %返回最大值

k(1:m/2,1:n/2)=k(1:m/2,1:n/2)>0.45*max_t;

t=k(1:m/2,n/2+1:end);

max_t=max(t(:));

k(1:m/2,n/2+1:end)=k(1:m/2,n/2+1:end)>0.45*max_t;

t=k(2*m/3+1:end,:);

max_t=max(t(:));

k(2*m/3+1:end,:)=k(2*m/3+1:end,:)>0.45*max_t;

k(m/2+1:end,:)=0;

figure(4);imshow(k);

se = strel('square',5); %宽度为5的窗口

k = imdilate(k,se); %膨胀

figure(5);

imshow(k);

k(1:15,:)=0;

%% left eye

BW=k(1:m/2,1:n/2); %认为给的图片就是正面人脸

[L,num]=bwlabel(BW); %num中存放联通域的个数

max_area=0;min_r=0;max_r=0;min_c=0;max_c=0;

for p=1:num

[r,c]=find(L==p);

mn_r=min(r);

mx_r=max(r);

mn_c=min(c);

mx_c=max(c);

temp=L(mn_r:mx_r,mn_c:mx_c);

curr_area=sum(temp(:)) / p;

if (curr_area>max_area)

max_area=curr_area;

min_r=mn_r;max_r=mx_r;

min_c=mn_c;max_c=mx_c;

end

end

center_r=round((min_r+max_r)/2);

center_c=round((min_c+max_c)/2);

% add %

fprintf('左眼:[%d,%d]\n',center_r,center_c); %中心点坐标

I(center_r-17:center_r-15,center_c-17:center_c+17)=255; %画框框

I(center_r+15:center_r+17,center_c-17:center_c+17)=255;

I(center_r-17:center_r+17,center_c-17:center_c-15)=255;

I(center_r-17:center_r+17,center_c+15:center_c+17)=255;

%% right eye %%%%

BW=k(1:m/2,n/2+1:n);

[L,num]=bwlabel(BW);

max_area=0;min_r=0;max_r=0;min_c=0;max_c=0;

for p=1:num

[r,c]=find(L==p);

mn_r=min(r);

mx_r=max(r);

mn_c=min(c);

mx_c=max(c);

temp=L(mn_r:mx_r,mn_c:mx_c);

curr_area=sum(temp(:)) / p;

if (curr_area>max_area)

max_area=curr_area;

min_r=mn_r;max_r=mx_r;

min_c=mn_c;max_c=mx_c;

end

end

center_r=round((min_r+max_r)/2);

center_c=round((min_c+max_c)/2);

fprintf('右眼:[%d,%d]\n',center_r,n/2+center_c);

I(center_r-17:center_r-15,n/2+center_c-17:n/2+center_c+17)=255;

I(center_r+15:center_r+17,n/2+center_c-17:n/2+center_c+17)=255;

I(center_r-17:center_r+17,n/2+center_c-17:n/2+center_c-15)=255;

I(center_r-17:center_r+17,n/2+center_c+15:n/2+center_c+17)=255;

figure(6); imshow(I);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值