2014-12-15 18 views
6

Tôi có một thư mục hình ảnh JPG mà tôi đang cố gắng phân loại cho một cuộc thi kaggle. Tôi đã thấy một số mã trong Python mà tôi nghĩ rằng sẽ thực hiện điều này trên các diễn đàn, nhưng đã tự hỏi là nó có thể làm trong R? Tôi đang cố gắng chuyển đổi thư mục này của nhiều hình ảnh jpg thành tệp csv có số hiển thị màu xám của mỗi pixel, tương tự như trình nhận dạng chữ số tay tại đây http://www.kaggle.com/c/digit-recognizer/chuyển đổi jpg thành greyscale csv bằng cách sử dụng R

Vì vậy, về cơ bản jpg -> .csv trong R, hiển thị số cho màu xám của từng pixel để sử dụng để phân loại. Tôi muốn đặt một mô hình rừng hoặc tuyến tính ngẫu nhiên trên đó.

+1

bạn có thể dùng lệnh 'gói jpeg' và 'readJPEG' để đọc các tập tin Nếu họ thật sự đơn kênh (greyscale) hình ảnh, sau đó giá trị tại x/y. điều phối sẽ là 0: 1 và tương ứng với cấp độ xám. – hrbrmstr

+1

@hrbrmstr có thể đáng chú ý là "hầu hết" tệp JPEG là 8 bit nên có thể chuyển đổi f rom '0: 1' đến' 0: 255' nếu muốn. –

Trả lời

7

Có một số công thức về cách thực hiện việc này tại số link này. Gói raster là một cách tiếp cận. Này về cơ bản chuyển đổi các ban nhạc RGB với một ban nhạc màu đen và trắng (nó làm cho nó nhỏ hơn về kích thước, mà tôi đoán những gì bạn muốn.)

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 

Tôi nghĩ rằng gói EBImage cũng có thể giúp cho vấn đề này (không phải trên Cran, cài đặt nó thông qua 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

Cảm ơn bạn đã chia sẻ kiến ​​thức Mike :) – barker

Các vấn đề liên quan