r image(x,y,col = rgb,...)函数给出错误

时间:2014-07-07 19:50:34

标签: r

我在R中有以下代码:

img = read.csv(file="img119.csv")

img像这样加载:

X   Y   R   G   B
1   0   0   0.48046875  0.65234375  0.83593750
2   0   1   0.40234375  0.57031250  0.73828125
3   0   2   0.24609375  0.39453125  0.54687500
4   0   3   0.07031250  0.19921875  0.32031250
5   0   4   0.00000000  0.07812500  0.17187500


width = img[length(img[,1]),1]+1;

height = img[length(img[,2]),2]+1;

x = 1:width;

y = 1:height;

img[,3:5] = img[,3:5]/256;

rgb_colors = rgb(img[,3:5])

imgfunction <-function(xx,yy){

  idx = xx*width + height - yy;

  rgb_color = rgb_colors[idx];

  return ( rgb_color )

} 

rgb_colors_xy = outer(x,y,imgfunction)

image(x,y,rgb_colors)

我想像常规图像一样绘制csv文件。但是,最后一行给出了如下错误:

Error in image.default(x, y, rgb_colors) : 'z' must be a matrix

我不确定我做错了什么,感谢您帮助我修复此代码。

谢谢,

1 个答案:

答案 0 :(得分:1)

graphics::image不会从三维数据创建彩色图像。您需要使用raster::imagerasterImage。请仔细阅读帮助文件,以了解RGB数据必须如何转换为数组。 &#34;长&#34;方法是创建三个xy矩阵,并用

中的某些内容填充每个矩阵。
for(i in 1:max(x)) {
    for(j in 1:max(y)) redmat[i,j]<- img[i,j,3]
}

有更快的工具,有人比我可能发布的更清醒。另请注意,R索引从1开始,而不是零,因此您需要适当地抵消计数。