基于鼻子相对位置的头势识别技术
扫描二维码
随时随地手机看文章
引言
近年来,随着模式识别与计算机视觉的迅速发展,人脸检测与识别技术也得到了快速的发展。基于人脸检测的头势识别技术也受到了研究者的重视。通过检测人的头部姿势,人们可以控制一些智能设备,使其为自己工作。例如基于头部姿势识别的智能游戏系统,通过头部姿势控制虚拟机器人走迷宫,既不失游戏的娱乐性,又可以在游戏的过程中锻炼颈椎,提高脑部供血量,有益于游戏者的身心健康。
检测头部姿势,首先需要进行人脸检测,然后根据人脸局部特征来判断人的头部姿势。在头势识别中,本文提出了一种基于鼻子相对位置的头势识别技术。针对已经检测出的人脸区域,提出了一种基于图像处理的鼻子检测方法。该方法先后对摄像头中得到的人脸图像进行灰度化,直方图均衡化,与Sobel算子卷积,二值化和寻找二值图像的连通域等操作,最终在连通域中获得最佳的鼻子位置。然后测试实验者在头部运动时鼻子位置的左右界和上下界,根据这些界限和获得的具体鼻子位置,通过计算鼻子位置与这些界限的比例,判断人的具体头部姿势。
1系统流程与实现
基于鼻子相对位置的头势识别的整体流程如图1所示。
由图1可知,基于鼻子位置的头势识别系统分为鼻子位置识别和头势识别两个部分。其中鼻子位置识别是头势识别的基础,在检测鼻子位置时,需要使用图像的灰度化,直方图均衡化,图像的卷积,图像二值化和寻找连通域等方法对图像进行变换,逐步分割并检测出鼻子位置。鼻子位置识别的目的是头势识别,首先测试实验者的鼻子在抬头,低头,左转,右转的边界位置,然后根据鼻子的相对位置,判断出实验者的头部姿势。
图1基于鼻子位置的头势检测流程图
2鼻子位置检测
收稿日期:2014-03-31基于鼻子位置的头势识别,关键在于从已经检测出的人脸区域中,检测出鼻子的位置,然后通过鼻子位置判断头部姿势。图2所示是检测鼻子位置的图像变换图。在图2中,我们看到,原始图经过灰度化、均衡化、卷积、二值化后,形成比较明显的轮廓,以方便判断鼻子位置。
图2检测鼻子位置的图像变换图
2.1彩色图像的灰度化
在图像处理技术中,图像识别、轮廓提取、图像增强等操作的实现,大多是在灰度图像的基础上进行的。因此,在鼻子位置的检测中,将摄像头读入的图片进行灰度化是十分必要的。
我们使用加权平均法对读入摄像头的图像进行灰度化,由图2可知,将彩色图像灰度化之后,图像变得比较简单,而且信息量的丢失也是比较少的,这样的图像更适合我们进行后续处理。
2.2直方图的均衡化
对于从摄像头读入的数据,有时会因为外部环境中的光线或者摄像设备的工作性能等原因,使得图像整体较暗或者较亮,这样的图像在经过灰度化后,其图片中的数据会集中于一个范围,这对于以后进行图像的边缘增强不利。因此,对彩色图像灰度化后,还要对其进行均衡化处理,增加图像的对比度,以使图像能够适应不同的环境,对以后的卷积处理,鼻子的识别有一定好处。
直方图均衡化的具体实现步骤如下:
统计原始图像中各个灰度级的像素数目;
计算原始图像的直方图,即计算各个灰度级的概率密度;
计算累计分布函数;
计算输出图像灰度级:
利用原始图像的灰度级函数和输出图像的灰度级的映射关系,获得输出图像的像素,最终输出均衡化后的图像。
对灰度图像进行过直方图均衡化后,就得到了令人满意的灰度图,之后就可以利用Sobel算子对这个图像进行边缘增强,从而可以获得鼻子位置。
2.3利用Sobel算子的图像边缘增强
有了图像的灰度图,然后利用索贝尔算子与原始图像进行卷积,获得图像的边缘信息,通过边缘信息寻找鼻子位置。
Sobel算子是图像处理中的重要算子之一,主要作用是对图像进行边缘检测。在技术上,它是一种离散性差分算子,用来运算图像亮度函数的梯度的近似值。在图像的任何一点使用Sobel算子,将会产生对应的梯度矢量或是法矢量。Sobel算子如图3所示。
在原始图像与Sobel算子进行卷积的算法中,使用指针实现。设置六个指针(由于索贝尔算子中总有一行或者一列是0)分别指向要进行卷积运算的3X3的图像,然后与Sobel算子进行卷积,卷积后移动指针即可进行下一次的卷积。实际上,Sobel算子具有横向和纵向两种,对于每个图像,在进行完横向和纵向的卷积后,还要将两种卷积的结果进行合并,然后放到结果图像中。
2.4图像的二值化
原始图像经过上述的一系列变换后,就会形成一个边缘轮廓明显的灰度图。为了更方便的找到鼻子位置,我们需要将灰度图二值化。图像的二值化处理,就是将图像上的所有点都设置为0或者255两个值,这样图像的信息量减少,容易识别某个特定区域的位置,如图2中二值化后的图像。
这里,我们需要找到一个合适的阈值,即若原始图的灰度值大于或等于阈值时,我们把它设置为255,小于阈值时设置为0。因此,阈值的选取至关重要。在实验中,我们采用用户手工输入阈值的方法实现。用户通过判断二值图像鼻子区域的大小,控制阈值来实现图像的最佳二值化。
2.5识别鼻子位置
在灰度图像的二值化之后,我们就可以清楚的看到图像中的眼角,嘴角,头部的轮廓,鼻子的相应位置是白色的,因此,我们首先应该找到图像中的白色区域,这就涉及到二值图像中连通域的提取问题。具体寻找连通域的算法如下:
(1)扫描二值图像中的所有像素点,得到一个像素点后,先判断当前点的左方和上方有没有点,若没有点,那么这个点是一个新的区域的开始,申请一个链表节点,将像素点的数据存人;
(2)得到一个像素点后,若左方有像素点,而上方没有像素点,则将此点标记为左方点的值,然后存入对应链表数据区;若左方没有像素点,而上方有像素点,则将此点标记为上方点的值,然后存入对应链表的数据区;
(3)得到一个像素点后,如果其上方和左方都有点,则选择这两个中的最小的标记点,并修改大标记为小标记,并将此点存人相应的链表。
找到所有连通域后,遍历连通域的链表,对于链表中的数据(即一系列的坐标值),分别找到坐标中x,V的最小值和最大值,组成两个坐标点,得到这个连通域的矩形区域。计算矩形区域的中心,这个中心在人脸的中部区域,将这个连通域标记为候选鼻子位置。然后将所有候选鼻子位置的连通域的外接矩形面积计算出来,然后比较大小,将面积最大的候选鼻子位置定为最佳鼻子位置,并用黄色的矩形框标记出来。如图2中识别鼻子位置后的图。
3头势识别
3.1鼻子位置上下界与左右界的确定
由于每个人的鼻子位置占人脸的比例不尽相同,而判断头势是根据鼻子在人脸的比例确定的,所以,在根据鼻子位置判断头部姿势之前,首先需要确定人的头部在左转,右转,抬头,低头的所有阶段,鼻子位置的移动范围。即鼻子位置左右界和上下界的确定。图4所示是基于鼻子位置的头势识别原理图,其中的虚线框为鼻子的左右界和上下界。
图4基于鼻子位置的头势识别原理图
3.2头部姿势的识别
在这个算法中,我们要检测头部的五种姿势,分别是左转、右转、平视、抬头和低头,这些姿势的检测都需要根据上文提到的鼻子位置上下界,左右界以及当前鼻子的具体位置进行判断。根据图4中所示,我们先判断鼻子中心点在人脸中的哪个区,然后根据这个区域来识别判断头部的具体姿势。
假设鼻子的左右界分别是xi和x(x<x),鼻子的上下界分别是M和乃3<乃)。鼻子位置的中心点坐标是5)。具体的判断方法如下:
若(x—x1)<(x2—x1)/3,且(y2—y1)/3<(y—yi)<[2(y2—y1,]/3,则头部姿势是朝向左方(即左转);
若(x—X1)/3<(x—X1)<[2(x2—X1)]/3,且(y—yD<(y2—y1,/3,则头部姿势是朝向上方(即抬头);
若(X—X1)/3<(x—X1)<[2(改—X1)]/3,且y—y1,/3<(y—y1)<[2(y2—yD]/3,则头部姿势是朝向正前方(即平视);
若(x—X1)/3<(x—X1)<[2(他—X1)]/3,且(y—y〔)>[2(y,—y1)]/3,则头部姿势是朝向下方(即低头);
若(x—也)>[2(x2—x1)]/3,且頒2—y1)/3<(y—y1)<[2(y2—y1)]/3,则头部姿势是朝向右方(即右转)。
4实验结果分析
在实验中,我们使用的软件环境是Windows7下的
VS2005,硬件环境是主频2.93GHz,内存2.0GB的主机。识别效果如图5所示。
图5实验结果
由图5可知,本实验中所用的鼻子识别算法可靠实用,可以准确判定鼻子的位置,并可通过鼻子在脸中的相对位置识别实验者的头部姿势。
5结语
本文提出了一种基于鼻子相对位置的头部姿势识别技术。在进行头势识别前先通过学习获得实验者鼻子位置移动的左右界和上下界,之后,利用图像处理技术识别出实验者的鼻子位置,通过鼻子位置和这两个界限的比例关系确定人的头部姿势。实验表明,在光线比较充足,背景不是很复杂的环境下,本文所使用的头势识别方法效果比较好。
20211123_619d08584dad8__基于鼻子相对位置的头势识别技术