PCA算法可以使得高维数据(mxn)降到低维,而在整个降维的过程中会丢失一定的信息,也会因此而实现降噪除噪的效果,另外,它通过降维可以计算出原本数据集的主成分分量Wk矩阵(kxn),如果将其作为数据样本,则可以将其作为原来数据集特征的主特征分量,如果用在人脸识别领域则可以作为人脸数据集的特征脸
具体实现降噪效果和人脸特征脸的代码如下所示: #1-1利用手写字体数据集MNIST对PCA算法进行使用和效果对比,体现PCA算法的降噪功能
from sklearn import datasets
digits=datasets.load_digits()
x=digits.data
y=digits.target
noisy_digits=x+np.random.normal(0,2,size=x.shape)
ex=noisy_digits[y==0,][:10]
for num in range(1,10):
x_num=noisy_digits[y==num,:][:10]
ex=np.vstack([ex,x_num])
print(ex.shape)
#定义绘图10x10的图像函数,可以看出PCA算法的降噪效果
def plot_digits(data):
fig,axes=plt.subplots(10,10,figsize=(10,10),subplot_kw={"xticks":[],"yticks":[]},
gridspec_kw=dict(hspace=0.1,wspace=0.1))
for i ,ax in enumerate(axes.flat):
ax.imshow(data[i].reshape(8,8),
cmap="binary",interpolation="nearest",
clim=(0,16))
plt.show()
plot_digits(ex)
pca=PCA(0.8)
pca.fit(noisy_digits)
a=pca.transform(ex)
b=pca.inverse_transform(a)
plot_digits(b) #1-2PCA算法在人脸识别与特征脸的应用
import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import fetch_lfw_people
faces=fetch_lfw_people()
print(faces.keys())
print(faces.data.shape)
def plot_faces(face):
fig,axes=plt.subplots(6,6,figsize=(10,10),subplot_kw={"xticks":[],"yticks":[]},
gridspec_kw=dict(hspace=0.1,wspace=0.1))
for i ,ax in enumerate(axes.flat):
ax.imshow(face[i].reshape(62,47),cmap="bone")
plt.show()
random_indexes=np.random.permutation(len(faces.data))
x=faces.data[random_indexes]
face1=x[:36,:]
plot_faces(face1)
from sklearn.decomposition import PCA
pca4=PCA(svd_solver="randomized") #利用随机方式进行降维,提高计算的效率
pca4.fit(x)
print(pca4.components_.shape) #输出人脸数据集的主要成分的数据集形状组成(mxn),m代表的是降低到的维度,n是指数据的总体原维度
print(plot_faces(pca4.components_[:36,:]))
face3=fetch_lfw_people(min_faces_per_person=60) #输出训练图片最少有60个的人脸数据样本
print(face3.data.shape)
print(len(face3.target_names))
运行结果如下所示:

												

PCA算法提取人脸识别特征脸(降噪)的更多相关文章

  1. opencv基于PCA降维算法的人脸识别

    opencv基于PCA降维算法的人脸识别(att_faces) 一.数据提取与处理 # 导入所需模块 import matplotlib.pyplot as plt import numpy as n ...

  2. Android 虹软人脸识别SDK-人脸对比

    准备 : 登录官方网站,获取SDK,进行个人验证后新建项目,获取APP_ID,和SDK_KEY: https://ai.arcsoft.com.cn/ucenter/resource/build/in ...

  3. Eigenface与PCA人脸识别算法实验

    简单的特征脸识别实验 实现特征脸的过程其实就是主成分分析(Principal Component Analysis,PCA)的一个过程.关于PCA的原理问题,它是一种数学降维的方法.是为了简化问题.在 ...

  4. 机器学习: 特征脸算法 EigenFaces

    人脸识别是机器学习和机器视觉领域非常重要的一个研究方向,而特征脸算法是人脸识别里非常经典的一个算法,EigenFaces 是基于PCA (principal component analysis) 即 ...

  5. 【转】PCA算法学习_1(OpenCV中PCA实现人脸降维)

    前言: PCA是大家经常用来减少数据集的维数,同时保留数据集中对方差贡献最大的特征来达到简化数据集的目的.本文通过使用PCA来提取人脸中的特征脸这个例子,来熟悉下在oepncv中怎样使用PCA这个类. ...

  6. 总结几个简单好用的Python人脸识别算法

    原文连接:https://mp.weixin.qq.com/s/3BgDld9hILPLCIlyysZs6Q 哈喽,大家好. 今天给大家总结几个简单.好用的人脸识别算法. 人脸识别是计算机视觉中比较常 ...

  7. 基于机器学习人脸识别face recognition具体的算法和原理

    引自:http://blog.csdn.net/eclipsesy/article/details/78388468?utm_source=debugrun&utm_medium=referr ...

  8. OpenCV人脸识别的原理 .

    OpenCV人脸识别的原理 . 在之前讲到的人脸测试后,提取出人脸来,并且保存下来,以供训练或识别是用,提取人脸的代码如下: void GetImageRect(IplImage* orgImage, ...

  9. Yale数据库上的人脸识别

    一.问题分析 1. 问题描述 在Yale数据集上完成以下工作:在给定的人脸库中,通过算法完成人脸识别,算法需要做到能判断出测试的人脸是否属于给定的数据集.如果属于,需要判断出测试的人脸属于数据集中的哪 ...

随机推荐

  1. 【原】centos安装django

    一.更新系统软件包yum update -y 二.安装软件管理包和可能使用的依赖 yum -y groupinstall "Development tools" yum insta ...

  2. Python经典排序算法

    https://www.cnblogs.com/onepixel/p/7674659.html这个文章很nice https://www.bilibili.com/video/av685670?fro ...

  3. iOS中统计平台的使用

    iOS腾讯Bugly使用  https://www.jianshu.com/p/f672e0d202ef iOS 百度统计的使用技巧 https://blog.csdn.net/yy1992320/a ...

  4. Preparing for the interview of FLAG and USDA

    7,Dynamic Programming 1,Unique Paths A robot is located at the top-left corner of a m x n grid (mark ...

  5. broadcom sdk command

    1.查看端口link状态 BCM.0>ps 2.查看vlan BCM.0>vlan show 3.查看pvlan BCM.0>pvlan show 4.CPU发包 BCM.0> ...

  6. ElementUI 日期选择器 datepicker 选择范围限制

    在使用elementUI中日期选择器时,经常会遇到这样的需求——对可选择的时间范围有一定限制,比如我遇到的就是:只能选择今天以前的一年以内的日期. 查阅官方文档,我们发现它介绍的并不详细,下面我们就来 ...

  7. 洛谷P1091合唱队形(DP)

    题目描述 NNN位同学站成一排,音乐老师要请其中的(N−KN-KN−K)位同学出列,使得剩下的KKK位同学排成合唱队形. 合唱队形是指这样的一种队形:设K位同学从左到右依次编号为1,2,…,K1,2, ...

  8. HDU 5570:balls 期望。。。。。。。。。。。。。。。

    balls  Accepts: 19  Submissions: 55  Time Limit: 6000/3000 MS (Java/Others)  Memory Limit: 65536/655 ...

  9. BKP寄存器

    STM32的BKP: 备份寄存器是42个16位的寄存器,可用来存储84个字节的用户应用程序数据.他们处在备份域里,当VDD电源被切断,他们仍然由VBAT维持供电.当系统在待机模式下被唤醒,或系统复位或 ...

  10. 深浅copy浅析

    Python代码在开始执行的时候,代码会被系统从硬盘调入内存,等候CPU执行,至于怎么个调入逻辑,还不清楚. 在高级语言中,变量是对内存及其地址的抽象.也就是说变量就是内存地址. 那么我们先来介绍两种 ...