MATLAB_no.2:关于眼睛的_cutab=[cutab;a b];_cutab(:,2)-cutab(:,1):

Posted wx62c4104564970

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MATLAB_no.2:关于眼睛的_cutab=[cutab;a b];_cutab(:,2)-cutab(:,1):相关的知识,希望对你有一定的参考价值。


原图:

MATLAB_no.2:关于眼睛的_cutab=[cutab;a


要得到的:

MATLAB_no.2:关于眼睛的_cutab=[cutab;a


目的,是截取除眼睛那里的地方。

具体的照片以及参考代码:

思想:

目的是寻找眼睛,目前的知识就是关于投影之类的。无非是水平投影亦或者是垂直投影。
哪个方法可以寻找到单独的眼睛那里的区域就是可行的方法。
当然,彩色图不便于研究。转换为二值图:

MATLAB_no.2:关于眼睛的_cutab=[cutab;a


但是,黑色的数值是0.不便于研究。所以进行倒置:

MATLAB_no.2:关于眼睛的_cutab=[cutab;a


~:这个是取非的意思。就是倒置。

这样就可以啦。

接下来进行投影:

figure,imshow(bw);
figure,imshow(bw);
figure,imshow(bw);

说明奇数是进行倒置的!

MATLAB_no.2:关于眼睛的_cutab=[cutab;a


下面是w’的投影。

投影就是,将该列上的所有数值相加!

白色极限:255

黑色:0

但是显示白色,并不都是255。可能是70,125之类的。

所以sum数值越大,白色就越多。

MATLAB_no.2:关于眼睛的_cutab=[cutab;a


由图可知,眼睛位置就是那个最为宽大的地方!

接下来就是来找出那一段的具体坐标数值。

[h,w]=size(bw);

这里说一下,因为编程很容易出现超出范围。所以,只好限制。通过图形的宽和高。
上面这个是有错误之后,才知道的!

具体编程,由于一开始就是0.只能从0开始入手。

while(a<h)
while(ws(a)==0&&a<h)
a=a+1;
end
b=a;
while(ws(b)>0)
b=b+1;
end
cutab=[cutab;a b];
a=b;
end

这段代码就是存储一段两边都不是零的区域的起始点与终止点。

还要保证正常运行就出现啦上面的代码啦!

其中:cutab=[cutab;a b];是不断追加的意思!

MATLAB_no.2:关于眼睛的_cutab=[cutab;a


注意符号:

MATLAB_no.2:关于眼睛的_cutab=[cutab;a


cutab(:,2)-cutab(:,1):

MATLAB_no.2:关于眼睛的_cutab=[cutab;a


接下来要找到最大的区域。

subab=cutab(:,2)-cutab(:,1);

这个是一个一维数组来存储上面的二维数组之间的差值。

下面就是找到最大数值:n来存储:最大数值。k:来存储行数。

[n,k]=max(subab);hre=bw(cutab(k,1):cutab(k,2)?;

代码分析的是倒置的图。就是上面找的最大的白色区域的下标。

找到对应的行数,第一个数到第二个数就是啦。

figure,imshow(hre)

MATLAB_no.2:关于眼睛的_cutab=[cutab;a


下面就是对于眼睛再进一步截取啦。

就要用到find函数啦。

​matlab中find 函数如何使用​​ 具体就是存储所有非黑色点位置啦。

[~,c]=find(hre);

至于那个“~”符号,啥也没有。只有一个c来保存。

就是第一个碰到白色,和最后一个碰到白色的!

% rr=hre(:,min©:max©);%显示灰白图。

rr=f(cutab(k,1):cutab(k,2),min©:max©,:);

彩色图需要用三维数来显示!

OK。就这么多。

最后的结果:

MATLAB_no.2:关于眼睛的_cutab=[cutab;a


我的代码:

clc,clear,close all
f=imread(eye.jpg);
bw=~im2bw(f);
imshow(bw);
imshow(f);
figure,imshow(bw);
ws=sum((bw));
figure,plot(ws);
a=1;b=1;cutab=[];t=[];
[h,w]=size(bw);
while(a<h)
while(ws(a)==0&&a<h)
a=a+1;
end
b=a;
while(ws(b)>0)
b=b+1;
end
cutab=[cutab;a b];
a=b;
end
subab=cutab(:,2)-cutab(:,1);
[n,k]=max(subab);
hre=bw(cutab(k,1):cutab(k,2),:);
[~,c]=find(hre);
% rr=hre(:,min(c):max(c));%显示灰白图。
rr=f(cutab(k,1):cutab(k,2),min(c):max(c),:);
figure,imshow(rr)


以上是关于MATLAB_no.2:关于眼睛的_cutab=[cutab;a b];_cutab(:,2)-cutab(:,1):的主要内容,如果未能解决你的问题,请参考以下文章

求一篇关于小猫特点的作文,如:眼睛,皮毛,耳朵,颜色,动作各方面描写。

SecureCRT优化调整永久设置保护眼睛和配色方案

如何在iPhone中检测眼睛瞳孔并测量瞳孔之间的距离

虚拟现实中的眼睛跟踪

10种方法缓解所显示器造成的眼睛疲劳

图结构数据库和 PHP