Подготовка данных изображения для PCA - PullRequest
0 голосов
/ 30 декабря 2018

Привет, я попытался применить PCA к папке со многими картинками внутри (.jpg).Тем не менее, я застрял при преобразовании его в формат, который принимает PCA scikit-learn.Похоже, что PCA принимает формат данных массива.Я читаю статьи типа PCA для данных изображения , но для меня это выглядит довольно сложно.Я просто хочу преобразовать изображения в принятый формат, а затем использовать 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 голосов
/ 30 декабря 2018

После прочтения данных изображения это будет двухмерный массив.Вы должны сгладить это, .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)
...