![R语言模糊化图片(骰子作画的原理) r语言模糊匹配](http://img.aihuau.com/images/30101030/30102053t01f5a5e72618ef3048.jpg)
看到阮一峰的一篇文章骰子作画的算法,http://www.ruanyifeng.com/blog/2011/11/dice_portrait.html很干兴趣,尝试用R实现了一下。原理:将原图按指定好的像素分块,每一个小块是一个矩阵,计算每一块矩阵某个色度的平均值。将每一个矩阵内色度的平均值和原图色度的分位数比较,将其打上不同的标识,即将图片分成若干区域,每个区域经过计算后,如果是骰子则用1-6涧的一个整数表示,1-6代表骰子的某一个面。最后将指定的骰子的某一面平铺即可得到最终的结果。源码如下library(bmp)library(jpeg)library(pixmap)t <- read.bmp
t <- readJPEG("E:\个人\Think 1600×900\Think 09.jpg")r=read.bmp('myrgbimage.bmp')dim(t)plot(t)z <- t[, , 1]dim(z)dim(z1)[1]z1<-t(z)temp <-z[c(1:10), c(21:30)]mean(temp)k <- 1#按照10×10的划分小块 将小块内的数据的平均值保存到数组resultresult <- array(0)for(i in 1:160){ for(j in 1:90) { result[k] <-mean(z1[c((i-1)*10+1, i*10), c((j-1)*10+1, j*10)]) k <- k+1 print(paste(k,i,j,sep=",")) }}paste(k,i,j, sep=",")
p<-seq(0,1,0.1)
#数组长度为14400length(result)#查看分布summary(result)#计算数组的十等分值 保存到数组quan中p<-seq(0,1,0.1)
quan<-quantile(result,probs<- p)quan[11]#将转后的数据保存到result1字符串数组中result1<-array(0)for( i in 1:length(result)){ if(result[i] { result1[i]<- 1 } else if(result[i] result1[i]<- 2 } else if(result[i] result1[i]<- 3 } else if(result[i] result1[i]<- 4 } else if(result[i] result1[i]<- 5 } else if(result[i] result1[i]<- 6 } else if(result[i] result1[i]<- 7 } else if(result[i] result1[i]<- 8 } else if(result[i] result1[i]<- 9 } else { result1[i]<- 10 } }k <- 1#提取下标值x<- NULLy<- NULLx<-array(0);y<-array(0);
for (i in 1:160){ for( j in 1:90){ x[k]<- i y[k]<- j k <- k+1 } }length(y)
#再次转换到90×160的矩阵result2<-matrix(result1, nrow = 90, ncol = 160)new<-data.frame(x,y,result1)names(new)<-c('x', 'y', 'pch')#画出空白画板plot(1:160,type = "n")#points(new$y,new$x,pch=new$pch)
最后的结果比较图为,还是可以的