为PCA准备图像数据

时间:2018-12-30 00:37:43

标签: python scikit-learn pca

嗨,我尝试将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))

任何其他更简便的方法也都很好。

1 个答案:

答案 0 :(得分:0)

读取图像数据后,它将是一个2D数组。您必须将其弄平,.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)