本文禁止转载、抄袭,请尊重作者权利。
使用特征脸方法的基于Opencv的猫脸检测实现
摘要
目前,在计算机视觉和模式识别领域,脸识别技术是一个很活跃的课题,人脸识别的方法已经十分丰富,而对于日常生活中的宠物脸识别的技术还在发展中,因此对猫脸的识别越来越受到人们的关注。
本文针对提出猫的脸部识别所需要的面部特征并分析其有效性,建立猫的脸部模型和利用脸部模型提出猫的自动识别系统三个问题进行了建模和算法设计。本文将基于目前比较热门的特征脸算法来研究猫脸的面部特征,再利用这些特征量建立猫的面部模型,最后得到猫的机器自动识别装置。
问题一,提出猫的面部特征。我们通过观察对比100张猫的图片,决定提取猫的眼睛、鼻子和嘴巴作为此次研究的三个面部特征。这里采用Haar-like特征的方法来研究。由边缘特征、线性特征、中心特征和对角线特征,组合成特征模板。特征模板内有白色和黑色两种矩形,并定义该模板的特征值为白色矩形像素和减去黑色矩形像素和。Haar特征值反映了图像的灰度变化情况。通过改变特征模板的大小和位置,可在图像子窗口中穷举出大量的特征。将图像从起点开始到各个点所形成的矩形区域像素之和作为一个数组的元素保存在内存中,并计算所有子窗口的特征值。由此可以得到眼睛、鼻子、嘴巴的特征向量。
问题二,建立猫的面部模型。这里我们采用主成分分析(PCA)的方法建立的猫的面部特征模型。利用matlab读取样本(选10张猫脸图片),继而得到灰度图,统一图片尺寸(这里我们采用128*128像素),然后把每张图转换成128*128维的列向量,把所有列向量放到一个集合中。然后计算平均值,得到平均图像(平均脸),计算每张图与平均图像的差值,再计算出它的协方差矩阵,将其对角化,由此得到各个特征向量,也就得到了各个特征脸图像。而在这组特征解系下的解便是属于猫的脸,也就完成了猫脸的模型。
问题三,提出猫的机器自动识别系统。针对猫脸的检测识别有别于人脸,由于猫的品种较多且属猫科的动物较多都对检测识别造成干扰,这样的工作通常比人脸识别更具难度,特征脸技术可用于猫脸检测识别。首先把一批猫脸图像转换成一个特征向量集,称为“Eigenfaces”,即“特征脸”,它们是最初训练图像集的基本组件。识别的过程是把一副新的图像投影到特征脸子空间,并通过它的投影点在子空间的位置以及投影线的长度来进行判定和识别。猫脸检测识别系统的建立可以利用特征脸方法,通过建立简单分类器并级联,进而利用Opencv工具加载分类器进行猫脸检测识别。但限于算法设计和某些遮挡特征的因素存在,对于强干扰因素条件下的图片中猫脸的检测识别还存有一定局限性。综合统计,这种系统的识别正确率可以达到75%以上。
【关键词】特征脸 Haar-like 主成分分析(PCA) 分类器
目录
一、 提出猫的面部特征并分析有效性 ……………………………3
1、 图像的归一化…………………………………………………………3
2、 Haar-like特征………………………………………………………4
3、 有效性分析……………………………………………………………4
二、 建立猫的脸部模型 ……………………………………………5
1、采集样本………………………………………………………………5
2、主成分分析(PCA) …………………………………………………5
3、测试对比………………………………………………………………7
三、 提出猫的机器自动识别系统 …………………………………9
1、构建猫脸数据库,训练分类器………………………………………9
2、使用Opencv进行图像处理 …………………………………………11
3、猫脸检测识别系统效果………………………………………………11
一、提出猫的面部特征并分析有效性
1、图像归一化
为了统一需要读取的图片的尺寸并提高计算的精度,我们需要先对图像进行归一化处理。
归一化的主要过程是:
(1) 坐标中心化
(2) X-shearing归一化
(3) 放缩归一化
(4) 旋转归一化
具体过程用矩阵表示为:
区域f(x,y)对应的p+q矩是:
我们定义的其中心矩为:
定义图像的协方差矩阵M为
我们可以得到:
(其中x‘’‘和y’‘’是变化后的位置,而x,y是初始的位置)
而这个变换过程从右到左就是我们上述的四步骤:坐标中心化,
x,y方向的拉伸,缩放变化,旋转变化。
通过归一化,可以保持仿射变换的不变性,能够消除其他变换对
图像的影响。
在Matlab中我们使用简单的归一化函数[y,ps] =mapminmax(x,ymin,ymax)来实现图像的归一化处理。
完成归一化处理之后我们就可以开始对图像进行特征分析了。
2、Haar-like特征
Haar-like特征最早是由Papageorgiou等应用于人脸表示,这里可以用来分析猫脸。Haar特征分为三类:边缘特征、线性特征、中心特征和对角线特征,组合成特征模板。特征模板内有白色和黑色两种矩形,并定义该模板的特征值为白色矩形像素和减去黑色矩形像素和。Haar特征值反映了图像的灰度变化情况。猫的脸部的一些特征能由矩形特征简单的描述,如:眼睛要比脸颜色要深,鼻子比它周边的颜色要深,嘴巴与它周围的颜色也不同。但矩形特征只对一些简单的图形结构,如边缘、线段较敏感,所以只能描述特定走向(水平、垂直、对角)的结构。
原理简介:对于图中的A, B和D这类特征,特征数值计算公式为:v=Sum白-Sum黑,而对于C来说,计算公式如下:v=Sum白-2*Sum黑;之所以将黑色区域像素和乘以2,是为了使两种矩形区域中像素数目一致。
通过改变特征模板的大小和位置,可在图像子窗口中穷举出大量的特征。上图的特征模板称为“特征原型”;特征原型在图像子窗口中扩展(平移伸缩)得到的特征称为“矩形特征”;矩形特征的值称为“特征值”。
矩形特征可位于图像任意位置,大小也可以任意改变,所以矩形特征值是矩形模版类别、矩形位置和矩形大小这三个因素的函数。故类别、大小和位置的变化,使得很小的检测窗口含有非常多的矩形特征。
由这个原理,我们可以构造一种分类器,来区分猫脸的不同部位。下面以眼睛为例,展示分类的效果。
如:
可以看出,通过使用Haar-like特征方法,利用眼睛与其周围颜色的差别,可以清楚的区分出猫的眼睛的位置。那么同样的,我们可以利用特征向量来区分猫的鼻子和耳朵的位置。
3、有效性分析
从上面的实验结果我们可以看出计算机在区分眼睛的同时也框出了猫的整个脸,这是因为猫脸与其周边的颜色也有差别,说明这种特征法在实际运用中存在一定的误差,容易受背景、光线等的干扰。
二、建立猫的面部模型
1、采集样本
我们从所给的100张猫的图片中随机选取20张,截出猫脸的位置,并保存成jpg图片,构成样本总体。
利用Matlab分别读取上述20张图片的灰度值,存储为灰度矩阵,并统一化矩阵的大小(这里为128*128),然后其转换成128*128维的列向量。由此一共得到了20个列向量,用于下面的猫脸模型的构建。具体代码:
%sample
clear;
clc;
train