图像的 2DPCA 与 2D2DPCA 特征提取

引言

众所周知,PCA(Principal Component Analysis) (也叫作 Karhunen-Loeve 变换)在模式识别和计算机视觉领域是一个经典的特征提取和数据降维的工具。而2DPCA(二维主成分分析法)方法是在 PCA 的基础之上发展起来的一种新型的主成分分析方法. 相对于传统的PCA方法,2DPCA是基于二维图像矩阵的,而非一维图像向量。这种处理方法不需要事先把图像转成一维的向量,相当于去除了图像的行向量或列向量的相关性。

2DPCA 的优点

在 2DPCA 中,图像的协方差矩阵可以通过使用原始图像矩阵直接构造出来。与 PCA 构造的协方差矩阵相比,使用 2DPCA 的协方差矩阵要小很多。其主要优点有:

  1. 直接地计算训练样本的写法差矩阵;
  2. 计算特征值特征向量所需要的时间比较少。

2DPCA 的数学基础

2DPCA 是 Yang 和Zhang 等人提出来的一种直接图像投影技术,本质上是一种主成分的方法,同时也是一种非监督的学习方法。
Ai,i=1,2,,N N 个样本图像, AjRm×n 。 首先计算协方差矩阵,也就是总体散布矩阵 Gt

Gt=1Nj=1N(AiA^)T(AjA^),

其中 A^=1NNj=1Ai 是全体样本的均值.
计算 Gt 的特征值和特征向量,取特征值累计贡献率 α=0.90.99 所对应的特征向量组成投影矩阵 U=[u1,u2,,uk]Rn×k . 则, Fj=AjURm×k 就是 Aj 的特征。可知,原来二维的图像的大小为 m×n 现在降维 m×k k 是根据 α 来确定的。也就是,实行特征提取后只是压缩了图像矩阵列向量的位数,行向量维数不变。

2D2DPCA

由于只在列方向降低了维数,降维的效果不理想。为了更好的降维,D.Q. Zhang 和 Z.H. Zhou 提出了双向的二维主成分分析方法(2D2DPCA),也就是在行和列两个方向都进行2DPCA处理。
对所有的训练样本进行上诉的 2DPCA 处理之后得到新的训练样本 Fj,j=1,2,,N ,其中 YjRm×k 。在新样本上构造协方差矩阵 Gt :

Gt=1Ni=1N(FiF^)(FiF^)T

同理,求 Gt 的特征值与特征向量,取特征值累计贡献率为 α 的特征向量,得到行方向的投影矩阵 V=[v1,v2,,vd] Fi 的投影为 VTFiRd×k .
至此,两个投影方向的最优投影矩阵 U V 都求得了,对于图像 AjRm×n 最终的降维矩阵为 Yj=VTAjUd×k 。其重构图像为 Aapproxj=VYjUT .

Python 实现

2DPCA 的实现

def TwoDPCA(imgs,p):
'''
imgs 是三维的图像矩阵,第一维是图像的个数
'''
    a,b,c = imgs.shape
    average = np.zeros((b,c))
    for i in range(a):
        average += imgs[i,:,:]/(a*1.0)
    G_t = np.zeros((c,c))
    for j in range(a):
        img = imgs[j,:,:]
        temp = img-average
        G_t = G_t + np.dot(temp.T,temp)/(a*1.0)
    w,v = np.linalg.eigh(G_t)
    w = w[::-1]
    v = v[::-1]
    for k in range(c):
        alpha = sum(w[:k])*1.0/sum(w)
        if alpha >= p:
            u = v[:,:k]
            break
    return u

2D2DPCA 的实现

def TTwoDPCA(imgs,p):
    u = TwoDPCA(imgs,p)
    a1,b1,c1 = imgs.shape
    img = []
    for i in range(a1):
        temp1 = np.dot(imgs[i,:,:],u)
        img.append(temp1.T)
    img = np.array(img)
    uu = TwoDPCA(img,p)
    return u,uu

参考文献
[1] Jian Y, David Z, Frangi A F, et al. Two-dimensional PCA: a new approach to appearance-based face representation and recognition.[J]. IEEE Transactions on Pattern Analysis & Machine Intelligence, 2004, 26(1):131-137.
[2] 陆丽. 基于人脸图像的性别识别与年龄估计研究[D]. 上海交通大学, 2010.

你可能感兴趣的:(python,图像识别,算法)