眨眼检测

http://blog.csdn.net/kastolo/article/details/14111901

眨眼检测算法有很多种,但准确率都有很大提高空间。此摘录几种简单的判断方法:

一:基于阀值的

http://www.cpe.ku.ac.th/~jeab/papers/chinnawat_JCSSE2009.pdf

当眼完全闭上时、需要更高的阀值才能找到一个联通区(media blur后)


二:简单逻辑判断法

https://github.com/madhurjain/TrackNoseBlinkEye/blob/master/TrackNoseBlinkEye/TrackNoseBlinkEye.cpp

说简单点就是判断眼中心在不在当前联通区内

[cpp]  view plain  copy
  1. /*        Eye blink code goes here & checks for bounding rects 
  2.         to determine whether eye is blinked or not. 
  3.         */  
  4. int is_blink(CvSeq* comp, int num, CvRect window, CvRect eye)  
  5. {  
  6.                 if (comp == 0 || num != 1)  
  7.                         return 0;  
  8.    
  9.                 CvRect r1 = cvBoundingRect(comp, 1);  
  10.    
  11.                 /* component is within the search window */  
  12.                 if (r1.x < window.x)  
  13.                         return 0;  
  14.                 if (r1.y < window.y)  
  15.                         return 0;  
  16.                 if (r1.x + r1.width > window.x + window.width)          
  17.                         return 0;  
  18.                 if (r1.y + r1.height > window.y + window.height)  
  19.                         return 0;  
  20.    
  21.                 /* get the centroid of eye */  
  22.                 CvPoint pt = cvPoint(  
  23.                         eye.x + eye.width/2 ,  
  24.                         eye.y + eye.height/2   
  25.                         );  
  26.    
  27.                 /* component is located at the eye's centroid */  
  28.                 if (pt.x <= r1.x || pt.x >= r1.x + r1.width)  
  29.                 return 0;  
  30.             if (pt.y <= r1.y || pt.y >= r1.y + r1.height)  
  31.                     return 0;  
  32.   
  33.                 return 1;  
  34. }  


个人依据经验做的算法如下

[cpp]  view plain  copy
  1. //特征:眼睁开时图形似矩形、闭眼时似三角形。  
  2. /** 
  3.        Trianglelikely  Highly 
  4.    开  图形似矩形  眼高 
  5.    闭  似高三角形    眼低 
  6.   
  7.    openEyeLikely = max ((up and down value/2 )* high) 
  8.   
  9.  f(x) = max(openEyeLikely) 
  10.  归一化处理: 
  11.  高度归一化处理:Highly = float(brightCount)/rowMean.rows; 开眼时为1,闭眼时实验数据为0.3左右 
  12.  rectangleLikely归一化处理: rectangleLikely  =  (up + down)/2 / middle.  开眼时接尽1, 闭眼小于0.5 
  13.   
  14.  openEyeLikely = rectangleLikely * Highly ; 
  15.  */  


其实、眨点有很多特点:下眼皮很少移动、是上眼皮向下眨。由此可以做很一个眨眼周期的估计,上眼皮在一个周期内会跳动一次。


实际情况下会有很多其它问题

一:很难捕捉到真正close eye的瞬间。

二:眨眼会有拖影。


这些情况都难以解决,只能说慢点眨点吧,太快了处理不过来。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值