4

我正在尝试用 Python 编写一个人脸识别程序(我将应用 k-nn 算法进行分类)。

首先,我将图像转换为灰度,然后用图像的像素(总共 128x128= 16384 个特征)创建了一个长列向量(通过使用 Opencv 的 imagedata 函数)

所以我得到了一个如下所示的数据集(最后一列是类标签,我只显示了数据集的前 7 个特征而不是 16384)。

176, 176, 175, 175, 177, 173, 178, 1 
162, 161, 167, 162, 167, 166, 166, 2

但是当我将 k-nn 应用于这个数据集时,我得到了尴尬的结果。我是否需要对这个数据集应用额外的过程,而不是仅仅将图像转换为像素表示?

谢谢。

4

4 回答 4

2

通常,人脸识别管道需要几个阶段才能有效。某种程度的几何归一化对准确性至关重要。您要么需要手动标记基准点并为每个图像获取变换,要么自动检测基准点,其中有开源基准点检测器。试试 opencv 的 getAffineTransform 函数。此外,照明差异可能会导致巨大的问题。您可以尝试照明标准化技术(例如,自商图像),因为它们非常适用于漫反射和阴影(不是镜面反射)。对于降维,主成分分析 (PCA) 或线性判别分析 (LDA) 是很好的起点。但是,您可能会考虑更有意义的特征,例如 LBP、HOG 或 SIFT,而不是原始像素特征。还,

于 2013-08-08T00:29:06.373 回答
1

您可能需要对齐眼睛、鼻尖和嘴巴。

您可能还需要更复杂的图像表示方法。例如,梯度方向和自商图像将是很好的起点。

于 2010-11-17T03:59:27.267 回答
1

如果你想让它运作良好,是的,你需要做一个特征转换。

PCA 或 LDA 运行良好。PCA 将获取一组输入向量(在本例中为您的向量化图像)并找到跨越输入集的特征脸。然后,在测试期间,您将输入向量(即图像)投影到这组特征脸上,并使用生成的坐标向量作为特征向量。如需更多信息,请参阅 [ Turk 和 Pentland,1991 年]。

我在PIE 数据库上使用这种基本 PCA 方法的个人实验是成功的。

于 2010-11-14T06:08:27.253 回答
0

你怎么打印这个?您是否尝试过使用重塑功能?它将 2D 图像转换为具有/不具有多个通道的 1D 图像。

此外,图像的像素不是features。脸后面可以有很多不同的物体——窗帘、书、其他脸等。脸的边界、眼睛之间的距离等东西对这些东西更不变。

于 2010-11-14T05:57:58.760 回答