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=''))