论文部分内容阅读
摘要:图像是一种二维的连续函数,计算机在对图像进行数据处理时必须对其在空间上和亮度上进行数字化。PCA,也即主成份分析,主要用于特征的降维。高维数据中包含了大量的冗余并隐藏了重要关系的相关性,降维的目的就是消除冗余,减少被处理数据的数量。PCA 将图像看作具有一定分布的随机向量,从本质上来讲这是一种基于统计分析信息的方法。本文提出了一种改进型的PCA算法,先将图像进行直方图进行均衡化,增强图像的对比度,再对图像K_L变换进行降维。仿真结果显示识别率高于直接进行PCA降维。
关键词:人脸识别;PCA算法;直方图均衡化
一、算法原理
(一)直方图均衡化
直方图是表示数字图像中每一灰度出现频率的统计关系。直方图能给出图像灰度范围、每个灰度的频度和灰度的分布、整幅图像的平均明暗和对比度等概貌性描述。灰度直方图是灰度级的函数,反映的是图像中具有该灰度级像素的个数,其横坐标是灰度级r,纵坐标是该灰度级出现的频率(即像素的个数)pr(r),整个坐标系描述的是图像灰度级的分布情况,由此可以看出图像的灰度分布特性,即若大部分像素集中在低灰度区域,图像呈现暗的特性;若像素集中在高灰度区域,图像呈现亮的特性。
直方图均衡化,即将随机分布的图像直方图修改成均匀分布的直方图。基本思想是对原始图像的像素灰度做某种映射变换,使变换后图像灰度的概率密度呈均匀分布。这就意味着图像灰度的动态范围得到了增加,提高了图像的对比度。如图所示
(二)主成分分析(PCA)
PCA(Principal Component Analysis,PCA)是主成分分析,主要 用于数据降维,对于一系列例子的特征组成的多维向量,多维向量里的某些元素本身没有区分性,比如某个元素在所有的例子中都为1,或者与1差距不大,那么这个元素本身就没有区分性,用它做特征来区分,贡献会非常小。所以我们的目的是找那些变化大的元素,即方差大的那些维,而去除掉那些变化不大的维,从而使特征留下的都是“精品”,而且计算量也变小了。
对于一个k维的特征来说,相当于它的每一维特征与其他维都是正交的(相当于在多维坐标系中,坐标轴都是垂直的),那么我们可以变化这些维的坐标系,从而使这个特征在某些维上方差大,而在某些维上方差很小。例如,一个45度倾斜的椭圆,在第一坐标系,如果按照x,y坐标来投影,这些点的x和y的属性很难用于区分他们,因为他们在x,y轴上坐标变化的方差都差不多,我们无法根据这个点的某个x属性来判断这个点是哪个,而如果将坐标轴旋转,以椭圆长轴为x轴,则椭圆在长轴上的分布比较长,方差大,而在短轴上的分布短,方差小,所以可以考虑只保留这些点的长轴属性,来区分椭圆上的点,这样,区分性比x,y轴的方法要好!
所以我们的做法就是求得一个k维特征的投影矩阵,这个投影矩阵可以将特征从高维降到低维。投影矩阵也可以叫做变换矩阵。新的低维特征必须每个维都正交,特征向量都是正交的。通过求样本矩阵的协方差矩阵,然后求出协方差矩阵的特征向量,这些特征向量就可以构成这个投影矩阵了。特征向量的选择取决于协方差矩阵的特征值的大小。
二、 直方图均衡化步骤
(一)列出原始图像和变换后图像的灰度级(L是灰度级的个数);
(二)统计原图像中各灰度级的像素个数;
(三)计算原始图像直方图P(i)=Ni/N;
(四)计算累计直方图P(j)=P(1)+ P(2)+ P(3)+…+ P(i);
(五)利用灰度值变换函数计算变换后的灰度值,四舍五入取整;j=INT[(L-1)Pj+0.5]
(六)确定灰度变换关系i→j,据此将原图像的灰度值f(m,n)=i修正为g(m,n)=j;
(七)统计变换后个灰度级的像素个数Nj;
(八)计算变换后图像的直方图Pj=Nj/N
三、 PCA降维步骤
(一)读取训练集图像数据
读取测试集目录下指定个数的图像,然后将其保存在一个二维数组中。如果图像个数为m,图像长宽为i、j,则我们创建一个二维数组A[m][i*j=n]用来保存图像数据。数组的每一行表示一个图像的所有像素信息,每一列表示一个随机变量,也即不同图像同一位置的像素信息,降维也即用更少的列来代表图像。
(二)每列减去均值
将步骤一的每列减去该列的均值,这样使得每列的数据均值为0。
(三)计算协方差矩阵
协方差矩阵表示不同随机变量之间的相互关系,图像中也即求任意两个像素之间的关系。如果两个随机变量的协方差为正或为负,表明两个变量之间具有相关性,如果为0表示两个变量不相关。通过计算协方差矩阵,我们就可以获得不同像素之间的关系。针对人脸识别,计算的协方差矩阵大小为n*n,其中n表示图像的像素点个数。
(四)计算协方差矩阵的特征值和特征向量
由于协方差矩阵是实对称阵,所以可以求得其所有的特征值和特征向量,其共有n个特征值和特征向量。
(五)选择主成分
所谓主成分即是具有最大特征值的特征向量,所以我们需要将特征向量按照特征值由大到小排序,然后根據精度要求选择不同数量的特征向量.
(六)将训练集进行降维
此步骤将原始的训练集进行降维变换,原始的图像数据是m*n的矩阵,只包含主成分的特征向量构成一个n*p的矩阵(每一列都是一个特征向量)。将两个矩阵相乘,我们即可获得降维之后的图像矩阵m*p,这个矩阵远小于原始的图像数据。
(七)将测试集进行降维
同步骤6相似,读取所有的测试集图像,然后对其也进行降维操作。如果测试集有M幅图像,则降维后的矩阵为M*p。
(八)人脸识别
该步骤为人脸识别的最后一步,用来对测试集进行识别,并计算识别准确率。该步骤有一个限制,测试集中的头像必须包含在训练集中,否则得出的结果将没有意义(这也就是代码一开始要求训练集大于测试集的目的)。识别的方法和最初的图像降维方法类似:将测试集中的每一幅降维图像与降维的训练集进行匹配,然后将其分类到距离最小的训练集头像中,如果两个头像表示一个人,表示识别成功,否则表示识别失败。
四、 实验结果
采用ORL人脸数据库,共有40个不同年龄、不同性别和不同种族的对象。每个对象10幅图像共计400幅灰度图像组成,图像尺寸是92×112,图像背景为黑色。在MATLAB的环境下进行仿真,识别率与传统的PCA算法相比有所提高。
关键词:人脸识别;PCA算法;直方图均衡化
一、算法原理
(一)直方图均衡化
直方图是表示数字图像中每一灰度出现频率的统计关系。直方图能给出图像灰度范围、每个灰度的频度和灰度的分布、整幅图像的平均明暗和对比度等概貌性描述。灰度直方图是灰度级的函数,反映的是图像中具有该灰度级像素的个数,其横坐标是灰度级r,纵坐标是该灰度级出现的频率(即像素的个数)pr(r),整个坐标系描述的是图像灰度级的分布情况,由此可以看出图像的灰度分布特性,即若大部分像素集中在低灰度区域,图像呈现暗的特性;若像素集中在高灰度区域,图像呈现亮的特性。
直方图均衡化,即将随机分布的图像直方图修改成均匀分布的直方图。基本思想是对原始图像的像素灰度做某种映射变换,使变换后图像灰度的概率密度呈均匀分布。这就意味着图像灰度的动态范围得到了增加,提高了图像的对比度。如图所示
(二)主成分分析(PCA)
PCA(Principal Component Analysis,PCA)是主成分分析,主要 用于数据降维,对于一系列例子的特征组成的多维向量,多维向量里的某些元素本身没有区分性,比如某个元素在所有的例子中都为1,或者与1差距不大,那么这个元素本身就没有区分性,用它做特征来区分,贡献会非常小。所以我们的目的是找那些变化大的元素,即方差大的那些维,而去除掉那些变化不大的维,从而使特征留下的都是“精品”,而且计算量也变小了。
对于一个k维的特征来说,相当于它的每一维特征与其他维都是正交的(相当于在多维坐标系中,坐标轴都是垂直的),那么我们可以变化这些维的坐标系,从而使这个特征在某些维上方差大,而在某些维上方差很小。例如,一个45度倾斜的椭圆,在第一坐标系,如果按照x,y坐标来投影,这些点的x和y的属性很难用于区分他们,因为他们在x,y轴上坐标变化的方差都差不多,我们无法根据这个点的某个x属性来判断这个点是哪个,而如果将坐标轴旋转,以椭圆长轴为x轴,则椭圆在长轴上的分布比较长,方差大,而在短轴上的分布短,方差小,所以可以考虑只保留这些点的长轴属性,来区分椭圆上的点,这样,区分性比x,y轴的方法要好!
所以我们的做法就是求得一个k维特征的投影矩阵,这个投影矩阵可以将特征从高维降到低维。投影矩阵也可以叫做变换矩阵。新的低维特征必须每个维都正交,特征向量都是正交的。通过求样本矩阵的协方差矩阵,然后求出协方差矩阵的特征向量,这些特征向量就可以构成这个投影矩阵了。特征向量的选择取决于协方差矩阵的特征值的大小。
二、 直方图均衡化步骤
(一)列出原始图像和变换后图像的灰度级(L是灰度级的个数);
(二)统计原图像中各灰度级的像素个数;
(三)计算原始图像直方图P(i)=Ni/N;
(四)计算累计直方图P(j)=P(1)+ P(2)+ P(3)+…+ P(i);
(五)利用灰度值变换函数计算变换后的灰度值,四舍五入取整;j=INT[(L-1)Pj+0.5]
(六)确定灰度变换关系i→j,据此将原图像的灰度值f(m,n)=i修正为g(m,n)=j;
(七)统计变换后个灰度级的像素个数Nj;
(八)计算变换后图像的直方图Pj=Nj/N
三、 PCA降维步骤
(一)读取训练集图像数据
读取测试集目录下指定个数的图像,然后将其保存在一个二维数组中。如果图像个数为m,图像长宽为i、j,则我们创建一个二维数组A[m][i*j=n]用来保存图像数据。数组的每一行表示一个图像的所有像素信息,每一列表示一个随机变量,也即不同图像同一位置的像素信息,降维也即用更少的列来代表图像。
(二)每列减去均值
将步骤一的每列减去该列的均值,这样使得每列的数据均值为0。
(三)计算协方差矩阵
协方差矩阵表示不同随机变量之间的相互关系,图像中也即求任意两个像素之间的关系。如果两个随机变量的协方差为正或为负,表明两个变量之间具有相关性,如果为0表示两个变量不相关。通过计算协方差矩阵,我们就可以获得不同像素之间的关系。针对人脸识别,计算的协方差矩阵大小为n*n,其中n表示图像的像素点个数。
(四)计算协方差矩阵的特征值和特征向量
由于协方差矩阵是实对称阵,所以可以求得其所有的特征值和特征向量,其共有n个特征值和特征向量。
(五)选择主成分
所谓主成分即是具有最大特征值的特征向量,所以我们需要将特征向量按照特征值由大到小排序,然后根據精度要求选择不同数量的特征向量.
(六)将训练集进行降维
此步骤将原始的训练集进行降维变换,原始的图像数据是m*n的矩阵,只包含主成分的特征向量构成一个n*p的矩阵(每一列都是一个特征向量)。将两个矩阵相乘,我们即可获得降维之后的图像矩阵m*p,这个矩阵远小于原始的图像数据。
(七)将测试集进行降维
同步骤6相似,读取所有的测试集图像,然后对其也进行降维操作。如果测试集有M幅图像,则降维后的矩阵为M*p。
(八)人脸识别
该步骤为人脸识别的最后一步,用来对测试集进行识别,并计算识别准确率。该步骤有一个限制,测试集中的头像必须包含在训练集中,否则得出的结果将没有意义(这也就是代码一开始要求训练集大于测试集的目的)。识别的方法和最初的图像降维方法类似:将测试集中的每一幅降维图像与降维的训练集进行匹配,然后将其分类到距离最小的训练集头像中,如果两个头像表示一个人,表示识别成功,否则表示识别失败。
四、 实验结果
采用ORL人脸数据库,共有40个不同年龄、不同性别和不同种族的对象。每个对象10幅图像共计400幅灰度图像组成,图像尺寸是92×112,图像背景为黑色。在MATLAB的环境下进行仿真,识别率与传统的PCA算法相比有所提高。