LBP学习和PCA学习

1、LBP(Local Binary Pattern,局部二值模式)重点内容
是一种用来描述图像局部纹理特征的算子;它具有旋转不变性和灰度不变性等显著的优点。对光照具有不变性。它是首先由T. Ojala, M.Pietikäinen, 和 D. Harwood 在1994年提出,用于纹理特征提取。而且,提取的特征是图像的局部的纹理特征;
原始的LBP算子定义为在3*3的窗口内,以窗口中心像素为阈值,将相邻的8个像素的灰度值与其进行比较,若周围像素值大于中心像素值,则该像素点的位置被标记为1,否则为0。这样,3*3邻域内的8个点经比较可产生8位二进制数(通常转换为十进制数即LBP码,共256种),即得到该窗口中心像素点的LBP值,并用这个值来反映该区域的纹理信息。如下图所示:
LBP学习和PCA学习
对光照具有不变性
LBP学习和PCA学习
LBP学习和PCA学习
原始LBP特征使用的是固定邻域内的灰度值,当图像的尺度发生变化时,LBP特征的编码将会发生错误,将不能正确的反映像素点周围的纹理信息,因此研究人员对其进行了改进。为了适应不同尺度的纹理特征,并达到灰度和旋转不变性的要求,并用圆形邻域代替了正方形邻域,改进后的 LBP 算子允许在半径为 R 的圆形邻域内有任意多个像素点。从而得到了诸如半径为R的圆形区域内含有P个采样点的LBP算子:
对于给定的点 (xc,yc), 其确定的圆上的某点 (xp,yp) 由下式计算:

其中, R 是圆的半径, P 是圆上的点的个数。如果一个在圆上的点不在图像坐标上, 用它周围的像素值内插得到,Opencv使用的是双线性插值,双线性插值的公式如下:
LBP学习和PCA学习
Uniform Pattern,也被称为等价模式或均匀模式。对于半径为R的圆形区域内含有P个采样点的LBP算子将会产生2P种模式。很显然,随着邻域集内采样点数的增加,二进制模式的种类是以指数形式增加的。因此,需要对原始的LBP模式进行降维,使得数据量减少的情况下能最好的表示图像的信息.
实际图像中,绝大多数LBP模式最多只包含两次从1到0或从0到1的跳变。因此,Ojala将“等价模式”定义为:当某个LBP所对应的循环二进制数从0到1或从1到0最多有两次跳变时,该LBP所对应的二进制就称为一个等价模式类。除等价模式类以外的模式都归为另一类,称为混合模式类。
LBP学习和PCA学习
LBP(P,R)有2^p个值,也就是说图像共有2^p种二进制模型,然而实际研究中发现,所有模式表达信息的重要程度是不同的,统计研究表明,一幅图像中少数模式特别集中,达到总模式的百分之九十左右的比例,Ojala等人定义这种模式为Uniform模式,如果一个二进制序列看成一个圈时,0-1以及1-0的变化出现的次数总和不超过两次,那么这个序列就是Uniform模式 ,比如,00000000、00011110、00100001、11111111,在使用LBP表达图像纹理时,通常只关心Uniform模式,而将所有其他的模式归到同一类中。 在表情识别中,最常用的是把LBP的统计柱状图作为表情图像的特征向量。为了考虑特征的位置信息,把图像分成若干个小区域,在每个小区域里进行直方图统计,即统计该区域内属于某一模式的数量,最后再把所有区域的直方图一次连接到一起作为特征向量接受下一级的处理。
旋转不变性的LBP特征。首先不断的旋转圆形邻域内的LBP特征,根据选择得到一系列的LBP特征值,从这些LBP特征值选择LBP特征值最小的作为中心像素点的LBP特征:
LBP学习和PCA学习
2、PCA降维简介
Pca是一种kl变换。
先介绍什么是kl变换:
假设n*N的图像在某一通道上传输了L次,
LBP学习和PCA学习
其中,每一个f(x,y)不同的原因是由于干扰的影响。
首先将图像使用行列堆叠的方法构成n^2的向量
LBP学习和PCA学习
图像向量的协方差定义为:
LBP学习和PCA学习
其中,mf是f的均值向量,就是将f中的n*n个向量的均值。
协方差矩阵是N^2* N^2的矩阵。
LBP学习和PCA学习
协方差
是衡量两个变量同时变化的变化程度。协方差大于0表示x和y若一个增,另一个也增;小于0表示一个增,一个减。如果x和y是统计独立的,那么二者之间的协方差就是0;但是协方差是0,并不能说明x和y是独立的。协方差绝对值越大,两者对彼此的影响越大,反之越小。协方差是没有单位的量,因此,如果同样的两个变量所采用的量纲发生变化,它们的协方差也会产生树枝上的变化。
求出协方差的特征值和特征向量。协方差矩阵是一个对称矩阵,而对称矩阵一定可以对角化, 通过对称矩阵来求解这个矩阵上的广义的特征值和特征值和特征向量。而特征和特征向量是表征正交变换不会对该向量产生方向上的变化的向量,只有长度上的变化,变化的倍数就是特征值的大小。可以作为在这个坐标变换空间当中的基底。

Pca的算法实现matlab版本:
程序的第一步是:将他图像集合放到一个数组当中。
for i=1:40
for j=1:5 a=imread(strcat(‘D:\PCA3\ORL\s’,num2str(i),’_’,num2str(j),’.bmp’)); 将图像拉成生成列向量
b=a(1:112*92);
b=double(b);
allsamples=[allsamples;b]; 应该是matlab当中的语法。这句话就是将b向量的值存在动态数组当中。
end
end
这个步骤说明了我们的图像特征提取是实际上是对矩阵进行操作。
将200图像进行求平均值。
samplemean=mean(allsamples);

求取平均值的效果如上图所示。
sigma=xmean*xmean’;实际上就是计算
LBP学习和PCA学习
使用该语句来进行协方差矩阵的求解。其中,xmean表示的是(x-mean)
for i=1:200
xmean(i,:)=allsamples(i,:)-samplemean;
end;
[v,d]=eig(sigma); 使用eig方程组来对协方差矩阵进行求特征值和特征向量。d1=diag(d); 在对协方矩阵的公式
[d2,index]=sort(d1);按照特征值的大小对特征向量和特征值进行排序。

LBP学习和PCA学习
可以看出前80个特征向量就可以表示出90的图像的能量。

while (i<=p&&dsort(i)>0)
base(:,i)=dsort(i)^(-1/2)*xmean’*vsort(:,i);
i=i+1;
end