R是神奇的,也是好玩的,除了做各種統計以外,對於圖像的處理功能也是非常不錯的。最近看了R-blogger上的幾篇關於用R做圖像處理的文章,覺得特別有意思,把圖像轉化成各個像素的RGB數據,處理完成以後再重新畫出來,是件很Geek的事情啊!
先上原圖:
關於之前R中一些讀取和處理圖像的包如ReadImages在新版本的R中已經不再支持了,好在還有jpeg能用。
library(‘jpeg’,’ggplot2’,’reshape’)
readImage<-readJPEG(‘test.jpg’)
longImage<-melt(readImage)
rgbImage<-reshape(longImage,timevar=’X3’,idvar=c(’X1’,’X2’),direction=’wide’)
rgbImage$X1<- -rgbImage$X1
colorColumns<- rgbImage[, substr(colnames(rgbImage), 1, 5)== "value"]
with(rgbImage,plot(X2, X1, col = rgb(colorColumns), asp = 1, pch =".",axes=F,xlab='',ylab=''))
rgbAlter<- rgbImage
rgbAlter$X2<- jitter(rgbAlter$X2)
rgbAlter$X1<- jitter(rgbAlter$X1)
rgbAlter$Size<- runif(1:nrow(rgbAlter), 0, 2) #and random point sizes
with(rgbAlter,plot(X2, X1, col = rgb(colorColumns), asp = 1, cex =Size,axes=F,xlab='',ylab=''))
rgbAlter<- rgbImage
rgbAlter[,4] <- 0 #去掉綠色
with(rgbAlter,plot(X2, X1, col = rgb(rgbAlter[, 3:5]), asp = 1, pch =".",axes=F,xlab='',ylab=''))
rgbAlter<- rgbImage
rgbAlter[,c(3:5)] <- round(rgbAlter[, c(3:5)] * 2) / 2
with(rgbAlter,plot(X2, X1, col = rgb(rgbAlter[, 3:5]), asp = 1, pch =".",axes=F,xlab='',ylab=''))