使用素描图像识别人脸

使用素描图像识别人脸

说明

论文《Face Photo Recognition Using Sketch》(Xiaoou Tand and Xiaogang Wang)中提出了一种算法,实现人脸照片与素描图像之间的识别。测试数据集:(CUHK Face Sketch Database (CUFS))。依照此算法,实现的代码见github上corfox/FPRUS or csdn code or git oschina

算法步骤

  1. {Q1,Q2,,QM}是训练图像集,计算均值

    Qu=1Mi=1MQi
    ,其中M是训练图像集中的图像数目。记训练集的素描图像(sketch)为{S1,S2,,SM}

  2. 将训练图像集中的每张图像减去均值Pi=QiQu,得到去中心化的训练集{P1,P2,,PM}

  3. 将每张图像矩阵拉伸为一个列向量(或行向量)。假设每张图像都有N个元素,则得到N×M的矩阵P=[P1,P2,,PM]

  4. 得到训练集的协方差矩阵W=PPT,计算其特征向量。然而,由于一般图像的像素数目N大于训练集的图像数MW的秩数仅为M1(训练集图像中的图像有一定的相关性)。所以,计算PTP的特征向量更为简便。推理如下:

    (PTP)Vp=VpΛpP(PTP)Vp=PVpΛp(PPT)PVp=PVpΛpWPVp=PVpΛp

    其中,Vp是特征向量组成的矩阵;Λp是特征值组成的对角矩阵。那么,W的特征向量便是PVp,特征值是Λp

  5. 由步骤4,可以计算得到W的标准正交特征矩阵(orthonormal eigenvector matrix)为Ep=PVpΛ12p(NM列)。

  6. 对于一张新的人脸相片(face photo)Qk,去中心化得到Pk。然后,计算其在特征空间上的投影系数bp=ETpPk,将其作为用于分类的特征矢量。

  7. 再用bp反过来重构Qk的重构图像Pr=Epbp。由Ep=PVpΛ12,得到重构系数如下:

    cp=VpΛ12pbp=[cp1,cp2,,cpM]

    于是,重构图像可以表示为:
    Pr=Pcp=i=1McpiPi

  8. 由步骤7,知可以通过训练集的线性组合来表示重构的图像,系数cp描述了每张训练图像的贡献权重。类比,描述其重构图像为

    Sr=i=1McpiSi

  9. 通过以上步骤,便将不同模态(modality)的相片(Photo)与素描图(sketch)转换为同一模态下,即同为素描或同为相片来进行识别。理论上说,一般常用的识别算法都可以用来对此进行识别。

测试结果

下图是重构的效果图
这里写图片描述

识别率

下面是测试的识别率结果
这里写图片描述

原论文中的识别率如下,差别还是挺大的。
这里写图片描述

参考资料

  1. 《Face Photo Recognition Using Sketch》, Xiaoou Tang and Xiaogang Wang, 2002, ICIP.
原文地址:https://www.cnblogs.com/corfox/p/5414985.html