【问题标题】:Preparing image data for PCA为 PCA 准备图像数据
【发布时间】:2019-05-27 05:13:06
【问题描述】:

您好,我尝试将 PCA 应用于包含许多图片 (.jpg) 的文件夹。但是,我坚持将其转换为 scikit-learn PCA 接受的格式。 PCA 似乎采用数组数据格式。我读过像PCA for image data 这样的文章,但对我来说看起来很复杂。我只想将图像转换为可接受的格式,然后使用pca.fit

在我使用 os.walk 将图像更改为灰度并调整其大小之前(如下所示)。我想知道我是否也可以在 PCA 上使用它。

from sklearn.decomposition import PCA
from PIL import Image 
import os
import numpy as np

WORK_DIR = 'D:/folder/' #working folder
source = os.path.join(WORK_DIR, 'train')  
target = os.path.join(WORK_DIR, 'gray')  

for root, dirpath, filenames in os.walk(source):
    for file in filenames:
        image_file = Image.open(os.path.join(root, file))
        image_file.draft('L', (256, 128)) 
        image_file.save(os.path.join(target, file))

任何其他更简单的方法也会很棒。

【问题讨论】:

    标签: python scikit-learn pca


    【解决方案1】:

    读取图像数据后,它将是一个二维数组。你必须把它弄平,.flatten() 会这样做。现在您可以将此数据用于pca.fit()。

    from sklearn.decomposition import PCA
    from PIL import Image 
    import os
    import numpy as np
    
    WORK_DIR = 'D:/folder/' #working folder
    source = os.path.join(WORK_DIR, 'train')  
    target = os.path.join(WORK_DIR, 'gray')  
    
    train_data=[]
    for root, dirpath, filenames in os.walk(source):
        for file in filenames:
            image_file = os.path.join(root, file)
            print(image_file)
            train_data.append(np.array(Image.open(image_file,'r')).flatten())
    
    pca=PCA()
    pca.fit(train_data)
    

    【讨论】:

    • 谢谢。看来我需要将 train_data (一个列表)重塑为二维数组。消息说ValueError: Expected 2D array, got 1D array instead: array=[]. Reshape your data either using array.reshape(-1, 1) if your data has a single feature or array.reshape(1, -1) if it contains a single sample. 我不太确定消息中的“单一功能”含义。我的数据是图像。如果我想将列表重塑为 (-1, 1),我应该如何更改代码?
    • 看起来循环中没有读取图像,您可以尝试我的更新解决方案,看看控制台中是否打印了任何图像文件名?
    • 我仍然从更新的代码中收到同样的错误。
    猜你喜欢
    • 1970-01-01
    • 2017-04-07
    • 1970-01-01
    • 1970-01-01
    • 2020-04-05
    • 2020-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多