zoukankan      html  css  js  c++  java
  • PCA算法提取人脸识别特征脸(降噪)

    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))
    运行结果如下所示:

    
    
  • 相关阅读:
    android启动模式2
    acvitity的日常 启动模式(上)
    Fragment 切换问题
    异常处理
    Xutils的使用 转载 带自己细细研究
    hibernate 增删改
    OGNL
    JDBC
    Struts 文件的上传与下载
    ActionContext和ServletActionContext小结
  • 原文地址:https://www.cnblogs.com/Yanjy-OnlyOne/p/11326949.html
Copyright © 2011-2022 走看看