Eigenface(PCA)人脸识别实验

本文通过PCA降维和OpenCV的EigenFace算法在ORL数据集上进行人脸识别实验,详细介绍了PCA变换原理,数据处理,特征脸生成,以及模型训练与识别过程,测试准确率达到96%。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、ORL数据集简介

ORL人脸数据集一共包含40个不同人的400张图像,是在1992年4月至1994年4月期间由英国剑桥的Olivetti研究实验室创建。

此数据集下包含40个目录,每个目录下有10张图像,每个目录表示一个不同的人。所有的图像是以PGM格式存储,灰度图,图像大小宽度为92,高度为112。对每一个目录下的图像,这些图像是在不同的时间、不同的光照、不同的面部表情(睁眼/闭眼,微笑/不微笑)和面部细节(戴眼镜/不戴眼镜)环境下采集的。所有的图像是在较暗的均匀背景下拍摄的,拍摄的是正脸(有些带有略微的侧偏)。

每个目录分别命名为sx,其中x表示受试者编号(在1到40之间)。在每一个目录所选受试者的10张不同的图像,分别命名为:y.pgm,其中y表示特定对象的不同面部表情、细节(1到10之间)。

ORL人脸数据集下载地址

2、PCA变换原理

在人脸识别过程中,一般把图片看成是向量进行处理,高等数学中我们接触的一般都是二维或三维向量,向量的维数是根据组成向量的变量个数来定的,例如就是一个二维向量,因为其有两个参量。而在将一幅图像抽象为一个向量的过程中,我们把图像的每个像素定为一维,对于一幅的普通图像来说,最后抽象为一个维的高维向量,如此庞大的维数对于后续图像计算式来说相当困难,因此有必要在尽可能不丢失重要信息的前提下降低图像维数,PCA就是降低图像维数的一种方法。图像在经过PCA变换之后,可以保留任意数量的对图像特征贡献较大的维数分量,也就是你可以选择降维到30维或者90维或者其他,当然最后保留的维数越多,图像丢失的信息越少,但计算越复杂。

3、、数据提取与处理

%matplotlib inline
# 导入所需模块
import matplotlib.pyplot as plt
import numpy as np
import os
import cv2
# plt显示灰度图片
def plt_show(img):
    plt.imshow(img,cmap='gray')
    plt.show()

# 读取一个文件夹下的所有图片,输入参数是文件名,返回文件地址列表
def read_directory(directory_name):
    faces_addr = []
    for filename in os.listdir(directory_name):
        faces_addr.append(directory_name + "/" + filename)
    return faces_addr

# 读取所有人脸文件夹,保存图像地址在faces列表中
faces = []
for i in range(1,41):
    faces_addr = read_directory('C:/Users/ASUS/Desktop/att_faces/s'+str(i))
    for addr in faces_addr:
        faces.append(addr)

# 读取图片数据,生成列表标签
images = []
labels = []
for index,face in enumerate(faces):
    # enumerate函数可以同时获得索引和值
    image = cv2.imread(face,0)
    images.append(image)
    labels.append(int(index/10
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

弈-剑

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值