如何使用EBImage将rgb图像更改为矩阵?

时间:2016-06-20 15:34:56

标签: r

我想使用EBImage包将图像更改为R中的数字矩阵。我试过这段代码,但它只输出所有1:

library(EBImage)
img<-readImage("test.jpg")
imageData(img)[1:50,1:60,1]

这是图像 enter image description here

2 个答案:

答案 0 :(得分:1)

以下示例说明如何加载包含Alpha通道的灰度图像,将其转换为单通道灰度图像,并进行一些后处理:裁剪边框并调整大小。

library(EBImage)

img <- readImage("http://i.stack.imgur.com/9VTWx.png")

# grayscale images containing an alpha channel are represented in EBImage as
# RGBA images by replicating the grayscale intensities over the red, green and
# blue channels

print(img, short=TRUE)
## Image 
##   colorMode    : Color 
##   storage.mode : double 
##   dim          : 819 460 4 
##   frames.total : 4 
##   frames.render: 1 

# convert to grayscale
img <- channel(img, "gray")

# collect matrix indices of non-white pixles
ind <- which(img < 1, arr.ind=TRUE)

# find min/max indices across rows/columns
ind <- apply(ind, 2L, range)
rownames(ind) <- c("min", "max")

ind
##     row col
## min  17   7
## max 819 413

# crop the image
img <- img[ind["min","row"]:ind["max","row"], ind["min","col"]:ind["max","col"]]

# resize to specific width and height
img <- resize(img, w=128, h=128)

display(img)

enter image description here

要提取基础矩阵,请使用imageData(img)

答案 1 :(得分:0)

首先,这不是JPEG图像,而是PNG。 其次,它不是RGB,而是灰度+ alpha(至少根据ImageMagick),尽管alpha通道完全不透明,因此它不能保存任何实际数据。 第三,你获得所有图像的原因是因为你选择的图像部分都是白色的,即最大强度,由值1表示。

尝试imageData(img)[51:100,1:60,1]之类的内容,看看是否有不同的结果。