一个R-beginner问题:
我想将RGB-Image转换为灰度,并使用image()
显示/绘制它library(EBImage)
orig = readImage("c:/test/b/s2.png")
gray = orig
colorMode(gray) = Grayscale
display(gray) #works
image(gray) #Error 'z' should be a matrix
由colorMode(灰色)=灰度转换的图像似乎与图像功能不兼容。 R EBImage中的Crayscale图像是否有多个通道?
然后我手动转换它并且能够调用它上面的image()
r = channel(orig,"r")
g = channel(orig,"g")
b = channel(orig,"b")
gray1 = 0.21*r+0.71*g+0.07*b
display(gray1)
image(gray1) #works
然而,灰度图像的强度略有不同。 有没有办法在R EBImage中将RGB转换为一个通道灰色?
修改 为了回答这个问题,为什么选择EBImage:
该软件包提供了一些图像处理功能。例如。我可以使用更多EBImage命令轻松显示扫描测试条纹(img1)的强度图(img2):
blotgraph = resize(gblur(gray1,3),200,1)
plot(blotgraph, type="l")
我不知道如何在没有EBImage的情况下解决这类任务
答案 0 :(得分:7)
这可能更简单,但有更快更简洁的方法来压缩颜色层。
library(png)
foo<-readPNG("c:/test/b/s2.png")
#that's an array n by m by 3 . Now reduce to grey
bar<- foo[,,1]+foo[,,2]+foo[,,3]
# normalize
bar <- bar/max(bar)
# one of many ways to plot
plot(c(0,1),c(0,1),t='n')
rasterImage(bar, 0,0,1,1)
请注意,这会创建一个灰度图像对象bar
,同时“保存”全色对象foo
。
答案 1 :(得分:6)
很抱歉,如果我错了,但据我所知,你的转换为灰度并没有以正确的方式完成。通常使用命令grayimage<-channel(yourimage,"gray")
将EBImage转换为灰度
和图像(灰度图像)给出
Image
colormode: Grayscale
storage.mode: double
dim: X Y
nb.total.frames: 1
nb.render.frames: 1
其中colormode给出nb.total.frames:3