2014-12-15 34 views
6

Ho una cartella di immagini JPG che sto cercando di classificare per una competizione di kaggle. Ho visto del codice in Python che penso possa portare a termine questo sui forum, ma mi chiedevo se fosse possibile farlo in R? Sto cercando di convertire questa cartella di molte immagini jpg in file CSV che hanno numeri che mostrano la scala di grigi di ogni pixel, simile al riconoscitore di cifre della mano qui http://www.kaggle.com/c/digit-recognizer/convertire jpg in scala di grigi csv utilizzando R

Quindi in pratica jpg -> .csv in R, mostrando i numeri per la scala di grigi di ciascun pixel da utilizzare per la classificazione. Mi piacerebbe mettere una foresta casuale o un modello lineare su di esso.

+1

si può usare il pacchetto '' jpeg' e readJPEG' per leggere i file se sono veramente monocanale (scala di grigi) le immagini, quindi il valore al x/y. coord sarà 0: 1 e corrisponderà al livello di scala di grigi – hrbrmstr

+1

@hrbrmstr potrebbe valere la pena notare che "la maggior parte" dei file JPEG è 8 bit, quindi si potrebbe convertire rom '0: 1' a' 0: 255' se lo si desidera. –

risposta

7

Esistono alcune formule su come eseguire questa operazione in questo link. Il pacchetto raster rappresenta un approccio. Questo trasforma sostanzialmente le bande RGB a una banda in bianco e nero (lo rende più piccole dimensioni, che sto indovinando ciò che si desidera.)

library(raster) 
color.image <- brick("yourjpg.jpg") 

# Luminosity method for converting to greyscale 
# Find more here http://www.johndcook.com/blog/2009/08/24/algorithms-convert-color-grayscale/ 
color.values <- getValues(color.image) 
bw.values <- color.values[,1]*0.21 + color.values[,1]*0.72 + color.values[,1]*0.07 

penso che il pacchetto EBImage può anche aiutare per questo problema (non su CRAN, installarlo tramite source:

source("http://bioconductor.org/biocLite.R") 
biocLite("EBImage") 
library(EBImage) 

color.image <- readImage("yourjpg.jpg") 
bw.image <- channel(color.image,"gray") 
writeImage(bw.image,file="bw.png") 
+0

Grazie per aver condiviso la conoscenza Mike :) – barker