应天论坛

 找回密码
 参与我们

QQ登录

只需一步,快速开始

搜索
查看: 996|回复: 0

人物图片眼睛定位

[复制链接]

276

主题

303

帖子

3187

积分

管理员

湘南小侠客

Rank: 9Rank: 9Rank: 9

积分
3187

优质服务勋章论坛元老

QQ
发表于 2017-5-23 00:42:28 | 显示全部楼层 |阅读模式
人物图片眼睛定位

[mw_shl_code=bash,true]%-------------------------------------------------------------------------
clear all
x=imread('test_image_9.jpg');  %读取原始图像
figure(1);subplot(1,4,1);imshow(x);title('原图像1');
y=rgb2gray(x);
subplot(1,4,2);imshow(y);title('图像1的灰度图');           % 图1灰度图
u1=imnoise(y,'salt & pepper',0.07);
subplot(1,4,3);imshow(u1);title('图像1加噪声图');     %给图1加椒盐噪声
zz=medfilt2(u1,[3 3]);z=medfilt2(zz,[5 5]);%(2次中值滤波)
subplot(1,4,4);imshow(z);title('图像1中值滤波');  %图1中值滤波(3*3窗口)
% figure(6);subplot(1,2,1);imshow(zz);title('一次滤波');
% subplot(1,2,2);imshow(z);title('二次滤波');
x1=imread('test_image_9.jpg');
figure(2);subplot(1,4,1);imshow(x1);title('原图像2');
y1=rgb2gray(x1);
subplot(1,4,2);imshow(y1);title('图像2灰度图');            %图2灰度图
u2=imnoise(y1,'salt & pepper',0.13);
subplot(1,4,3);imshow(u2);title('图像2叫噪声图');    %图2加椒盐噪声
zz1=medfilt2(u2,[3 3]);z1=medfilt2(zz1,[5 5]);%(2次中值滤波)
subplot(1,4,4);imshow(z1);title('图像2滤波图');  %图2中值滤波
% figure(5);subplot(1,2,1);imshow(zz1),title('一次滤波');
% subplot(1,2,2);imshow(z1);title('二次滤波');
% figure(3);subplot(1,2,1);imshow(z);title('处理后图1');
% figure(3);subplot(1,2,2);imshow(z1);title('处理后图2');
f=imsubtract(z1,z);                                               %图1图2差分
figure(4);subplot(1,1,1);imshow(f);title('差分后图像');
% agin=medfilt2(f,[3 3]);figure(10);imshow(agin);f=agin;   %差分图中值滤波
%-------------------------------------------------------------------------


%-------------------------------------------------------------------------
%眼睛的粗定位
%标注一只眼睛
[h w]=size(f);
Amax=0;m=0;n=0;
for i=10:h
      for j=10:w
            if Amax<=f(i,j)
               Amax=f(i,j);m=i;n=j;
            end
      end
end
%标另外一只眼睛
Bmax=0;m1=0;n1=0;
for i1=10:m-10
    for j1=10:w-10
        if Bmax<=f(i1,j1)
           Bmax=f(i1,j1);m1=i1;n1=j1;
           end
    end
end
for i2=m+10:h-10
    for j2=10:w-10
        if Bmax<=f(i2,j2)
           Bmax=f(i2,j2);m1=i2;n1=j2;
           end
    end
end
%判断两眼的参数是否符合要求
%+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++


%----------------------------------------------------------------------

figure(7);imshow(z);hold on;plot(n,m,'+',n1,m1,'+');title('标定眼睛图');
%给眼睛画上矩形框
figure(8);imshow(z),title('眼睛粗定位');hold on;
Bvertex=[n-25 m-15;n+25 m+15];    %矩形的左上顶点坐标和右下顶点坐标
    plot([Bvertex(1,1),Bvertex(2,1)],[Bvertex(1,2),Bvertex(1,2)],'r')
    plot([Bvertex(2,1),Bvertex(2,1)],[Bvertex(1,2),Bvertex(2,2)],'r')
    plot([Bvertex(2,1),Bvertex(1,1)],[Bvertex(2,2),Bvertex(2,2)],'r')
    plot([Bvertex(1,1),Bvertex(1,1)],[Bvertex(1,2),Bvertex(2,2)],'r');
ho ld on;
Bvertex=[n1-25 m1-15;n1+25 m1+15];    %矩形的左上顶点坐标和右下顶点坐标
    plot([Bvertex(1,1),Bvertex(2,1)],[Bvertex(1,2),Bvertex(1,2)],'r')
    plot([Bvertex(2,1),Bvertex(2,1)],[Bvertex(1,2),Bvertex(2,2)],'r')
    plot([Bvertex(2,1),Bvertex(1,1)],[Bvertex(2,2),Bvertex(2,2)],'r')
    plot([Bvertex(1,1),Bvertex(1,1)],[Bvertex(1,2),Bvertex(2,2)],'r');
%----------------------------------------------------------------------


%------------------------------------------------------------------------
%最大类间方差定二值化阈值
[height,width]=size(z);
hist=zeros(256,1);%直方图
%threshold=128; %初始阈值
%计算直方图
for i=1:height
    for j=1:width
        m=z(i,j)+1;   %zz(i,j)灰度值从0-255
        hist(m)=hist(m)+1;%某级灰度的像素数
    end
end
hist=hist/(height*width);%落在每一灰度级上的概率
avg=0;
for m=1:256
    avg=avg+(m-1)*hist(m);
end
temp=0;
for i=1:256
    p1=0;
    avg1=0;
    avg2=0;
    T_current=i-1;%当前分割阈值
    for m=1:T_current-1
        p1=hist(m)+ p1;%低灰度级概率总和
    end
    p2=1-p1;%高灰度级概率总和
    for m=1:256
        if m<T_current
           avg1=avg1+(m-1)*hist(m);
        else
           avg2=avg2+(m-1)*hist(m);
        end
    end
    avg1=avg1/p1;
    avg2=avg2/p2;
   
    D=p1*(avg1-avg)^2+p2*(avg2-avg)^2;
    if D>=temp
        finalT=T_current;
        temp=D;
    end
end


% 滤波后差分图二值化
f1=z;
for i=1:h
for j=1:w
    if f1(i,j)<=finalT
       f1(i,j)=0;
    else
       f1(i,j)=255;
    end
  end
end
figure(13);imshow(f1);title('差分后图二值化');
%------------------------------------------------------------------------


%------------------------------------------------------------------------
%提取眼睛轮廓
%精确定位眼睛矩形,最高点、最低点、最左边、左右边四点确定的矩形。
%一只眼轮廓
[h1,w1]=size(f1);
zg=0;zd=0;zzb=0;zyb=0;
%i3=0;j3=0;
xj=50;yj=30;%垂直和水平方向中心点矩形大小一半
x3=zeros(1,100);y3=zeros(1,60);
x4=zeros(1,100);y4=zeros(1,60);
x5=zeros(1,100);y5=zeros(1,60);
x6=zeros(1,100);y6=zeros(1,60);
zgx=0;zdx=0;zzbx=0;zybx=0;
zgy=0;zdy=0;zzby=0;zyby=0;

%最高的点y
for i3=n-50:n+50
    for j3=m-30:m+30
        if f1(i3,j3)==255&f1(i3,j3+1)==0
           x3(i3-n+51)=i3;y3(j3-m+31)=j3;
        end
    end
end

for k=1:1:100
    if zgy<y3
       zgy=y3;
    end
end

%最低点y
for j3=m-30:m+30
    for i3=n-50:n+50
        if f1(i3,j3)==255&f1(i3,j3-1)==0
           x4(i3-n+51)=i3;y4(j3-m+31)=j3;
        end
    end
end

for k=1:1:100
    if zdy<y4
       zdy=y4-1;
    end
end

%最左点x
for j3=m-30:m+30
    for i3=n+50:1:n-50
        if f1(i3,j3)==255&f1(i3+1,j3)==0
           x5(i3-n+51)=i3;y5(j3-m+31)=j3;
        end
    end
end

for k=1:1:100
    if zzbx<x5
       zzbx=x5+1;
    end
end


%最右点x
for j3=m-30:m+30
    for i3=n+50:1:n-50
        if f1(i3,j3)==255&f1(i3-1,j3)==0
           x6(i3-n+51)=i3;y6(j3-m+31)=j3;
        end
    end
end

for k=1:1:100
    if zybx<x6
       zybx=x6-1;
    end
end

%精确画出眼睛矩形区域
figure(9);imshow(f1),title('眼睛轮廓');hold on;
Bvertex=[215 163;241 175];    %矩形的左上顶点坐标和右下顶点坐标
    plot([Bvertex(1,1),Bvertex(2,1)],[Bvertex(1,2),Bvertex(1,2)],'r')
    plot([Bvertex(2,1),Bvertex(2,1)],[Bvertex(1,2),Bvertex(2,2)],'r')
    plot([Bvertex(2,1),Bvertex(1,1)],[Bvertex(2,2),Bvertex(2,2)],'r')
    plot([Bvertex(1,1),Bvertex(1,1)],[Bvertex(1,2),Bvertex(2,2)],'r');
%---------------------------------------------------------------------------

%另一只眼轮廓
hold on;
Bvertex=[139 154;170 167];    %矩形的左上顶点坐标和右下顶点坐标
    plot([Bvertex(1,1),Bvertex(2,1)],[Bvertex(1,2),Bvertex(1,2)],'r')
    plot([Bvertex(2,1),Bvertex(2,1)],[Bvertex(1,2),Bvertex(2,2)],'r')
    plot([Bvertex(2,1),Bvertex(1,1)],[Bvertex(2,2),Bvertex(2,2)],'r')
    plot([Bvertex(1,1),Bvertex(1,1)],[Bvertex(1,2),Bvertex(2,2)],'r');
%---------------------------------------------------------------------------[/mw_shl_code]
每次见你穿短裤打领带,还穿个拖鞋,下次再这样穿不要从我家门口过了!
http://gsh.yzqz.cn/CassettePlayer/index.html

天之道,损有余而补不足.人之道则不然,损不足以奉有余.孰能有余以奉天下,唯有道者.
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 参与我们

本版积分规则

QQ|Archiver|手机版|小黑屋|应天社区 ( 湘ICP备17015224号 )

GMT+8, 2024-4-19 14:29 , Processed in 0.343742 second(s), 31 queries .

Powered by Discuz!

© 2001-2017 Comsenz Inc.


免责声明:
本站所发布的第三方软件及资源(包括但不仅限于文字/图片/音频/视频等仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。如果您喜欢某程序或某个资源,请支持正版软件及版权方利益,注册或购买,得到更好的正版服务。如有侵权请邮件与我们联系处理。

Mail To: admin@yzqz.cn

快速回复 返回顶部 返回列表