MATLAB的疲劳检测系统

一、课题介绍
本设计针对现有逐帧眼睛定位方法计算量大,速度慢的缺点,提出一种用于疲劳驾驶实时监测的眼睛定位方法,该方法能够在保证眼睛定位准确性的同时,减少人脸定位的计算量,从而提高图像处理速度,实现对眼睛开闭状态的实时监测,保证驾驶疲劳监测系统的可靠性。
该方法基于 YCbCr 色彩空间相邻两帧的差值来检测等采样间隔中眼睛位置的移动,并参照前一帧图像定位出的眼睛准确区域,就可以确定当前帧眼睛的候选区域,再对候选区域进行提取,即可得到眼睛的准确区域。
二、算法步骤
本色痕迹所述的一种用于疲劳驾驶实时监测的眼睛定位方法,利用 Matlab2012 软件实现,包括以下步骤 :
步骤一,对人脸及眼睛初始定位,获得眼睛精确图像 :先利用摄像头拍摄清晰的人脸彩色图像,再分割人脸彩色图像,获得人脸宽度 Fw 和人脸高度 Fh,然后,利用现有眼睛定位方法对第一帧图像进行眼睛定位,得出第一帧眼睛所在的矩形区域和精确位置,即眼睛精确图像,并记录下眼睛位置的参数 {(x,y),w,h} ;
步骤二,基于 YCbCr 色彩空间肤色模型的相邻帧差法,求相邻帧差值的绝对值 :先将相邻两帧彩色图像均转换到 YCbCr 色彩空间,得到前后两帧 YCbCr 色彩空间的图像,用img1 表示前一帧 YCbCr 色彩空间的图像,用 img2 表示后一帧 YCbCr 色彩空间的图像 ;然后利用“肤色模型”对 img1 和 img2 进行二值化处理,得到两帧二值图像,用 BW1 表示前一帧二值图像,用 BW2 表示后一帧二值图像 ;最后将两帧二值图像 BW1 和BW2 相减并取绝对值,得到相邻帧差值的二值图像 BW。
步骤三,根据相邻帧差值的二值图像,判断前后两帧头部图像是否重叠 :相邻两帧头部图像若是重叠,则执行下一步 ;相邻两帧头部图像若没有重叠,返回步骤一 ;
相邻两帧头部图像重叠判断的方法是,假设前一帧二值图像 BW1 的像素值为 1 的区域面积为 A1,假设后一帧二值图像 BW2 的像素值为 1 的区域面积为 A2,假设相邻帧差值的二值图像BW 的像素值为1 的区域面积为A3,若0 ≤ A3 < A1+A2,则相邻两帧图像有重叠,否则不重叠 ;
步骤四,头部位移检测 :分别检测头部横向位移 dx 及纵向位移 dy ;
步骤五,眼睛候选区域预测 :
依据头部位移,利用“眼睛位移预测模型”对眼睛横向位移 Dx 及纵向位移 Dy 进行预测 ;令前一帧图像的眼睛实际所在的矩形区域表示为 {(x,y),w,h},(x,y) 为矩形区域左上角点的坐标,w 为矩形的宽度,h 为矩形的高度 ;根据位移量 Dx、Dy 和前一帧眼睛所在的矩 形区域,即可确定当前帧眼睛候选区域

v2-d2940acd255af49ec5c4dd6de7432267_b.png

步骤六,眼睛候选区域修正 :
1) 利用 Matlab2012 软件中的 rgb2gray(rgb2gray 是享誉全球的科学计算软件Matlab 图像处理工具箱中的函数,其功能是将彩色图像 RGB 转换成灰度图像I,其使用方法为 :I = rgb2gray(RGB)) 函数将眼睛候选区域图转换为灰度图像 ;

2) 利用“最大类间方差法”(NOBUYUKI OTSU.A threshold selection method from gray level histograms.IEEE TRANSACTIONS ON SYSTREMS,MAN,AND CYBERNETICS,VOL.

SMC-9,NO.1,JANUARY 1979,p62-66.) 找出图像进行灰度阈值分割所需要的阈值 T ;

3) 利用阈值 T 对图像进行阈值分割,得到一幅二值图像 ;

4) 利用 Matlab2012 软件中的 bwlabel【Matlab 图像处理工具箱的函数,其功能是标记二值图像中的连通区域,使用方法L = bwlabel(BW,n),该函数返回一个与BW 同样大小的矩阵 L,L 含有 BW 中连通对象的标记,n 一般选取 4 或者 8,意即四向连通或八向连通,默认为 8】函数对阈值分割后得到的二值图像进行连通区域标记 ;

“连通区域标记法”出自《数字图像处理》,作者 :( 美 ) 冈萨雷斯等著出版社 :电子工业出版社,出版时间 :2004-5-1 字数 :879000 版次 :1 版 1 次页数 :609 印刷时间 : 2004-5-1 I S B N :9787505398764。

二值图像的连通区域标记是从仅由“0”像素 ( 通常表示背景点 ) 和“1”像素 ( 通常表示模式图形点 ) 组成的一幅点阵图像中,将相互邻接 (4- 邻域或 8- 邻域 ) 的“1”值像素集合提取出来。

5) 找出连通标记结果中面积最大的两个区域,作为眼睛区域 ;

6) 截取眼睛候选区域原始图像中与 4) 中区域对应的图像,得到的图像即为眼睛的准确区域图像 ;

7) 参照图 2 记录下眼睛的位置参数 {(x,y),w,h},替代步骤一中的 {(x,y),w,h}。

步骤七,重复步骤二至步骤六,进行下一帧的眼睛定位。

进一步,所述的现有眼睛定位方法的包括肤色检测、人脸分割、灰度积

分投影和形态学处理四个步骤。进一步,所述肤色模型为 :

v2-957736780fa868b16f34eb87d4a503fd_b.png

其中 Cb 和 Cr 代表 YCbCr 色彩空间中的两个色度分量。利用上述肤色模型对 img1 和 img2 进行肤色检测,将符合肤色模型的点的像素值令为 1,不符合肤色模型的点的像素值令为 0,分别得到二值图像 BW1 和二值图像 BW2,最后将 BW1 和 BW2 相减并取绝对值,得到二值图像 BW,即 YCbCr 空间的相邻帧差图。

进一步,头部位移检测依据下列步骤进行 ;

(1) 首先通过从上至下扫描图像,找到第一次出现白色像素的横线,取该横线以下

Fh 的图像区域,记为 p1 ;

(2) 取 p1 中上 2/3 的区域,记为 p2 ;

(3) 根据 p2 中白色区域的左右边界,取出左右边界内的区域,记为 p3,即为头部的横向大致运动范围,且令 p3 的宽为 W,高为 H ;

(4) 以 p3 的水平中轴线 y = H/2 为界,上下分别取出占图像高度 30%的图像,记为 p4 ;计算 p4 每一行连续白色像素的最大宽度,记为 dxi,其中 i ∈ [1,0.6H] ;将 dxi 的平均值作为头部的横向位移态的判定的延时和漏判。

三、流程图

MATLAB的疲劳检测系统_第1张图片

v2-891fc5ed11cf1f4ee29ffef68c0b2caf_b.png

你可能感兴趣的:(定位,计算机视觉,人脸识别,slam,opencv)