【问题标题】:Convert RGB-image to one-channel gray image in R EBImage在 R EBImage 中将 RGB 图像转换为单通道灰度图像
【发布时间】:2013-12-06 19:46:18
【问题描述】:

一个 R 初学者问题:

我想将 RGB 图像转换为灰度并使用 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(gray) = Grayscale 转换的图像似乎与 image-function 不兼容。 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 的情况下解决此类任务

【问题讨论】:

  • 在您发布的代码中,您在第一个块中犯了一个错误。应该是image(gray) 而不是image(grey)
  • 为什么要使用EBImage?使用标准的basegraphics 封装工具将图像对象转换为灰度并不是什么大问题。
  • @Manetheran 好的,谢谢!我已经修好了。然而它有原因没有解决问题:-)。
  • @CarlWitthoft:我或多或少是偶然来到 R 的。我搜索了一些与图像处理相关的问题并遇到了 EBImage。我试过 R 并立即喜欢它。所以你会建议先尝试用核心功能来实现所有东西?

标签: r image-processing


【解决方案1】:

这可能更简单,尽管有更快、更简洁的方法来压缩颜色层。

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

【讨论】:

  • 有趣的学习png-package! bar
  • @ValentinHeinitz 一定有一个 rgb--to-gray 函数,但我现在找不到它:-(
【解决方案2】:

对不起,如果我错了,但据我了解,您的灰度转换没有以正确的方式完成。一般来说,EBImage 转换为灰度是使用命令grayimage&lt;-channel(yourimage,"gray") 完成的 和 image(grayimage) 给出

Image
  colormode: Grayscale 
  storage.mode: double 
  dim: X Y 
  nb.total.frames: 1 
  nb.render.frames: 1 

其中颜色模式给出nb.total.frames:3

【讨论】:

  • 完美!这就是我一直在寻找的。 (我认为您的意思是 nb.total.frames:1 而不是 3)我不知道通道功能的“灰色”参数值
猜你喜欢
  • 1970-01-01
  • 2020-10-20
  • 2014-02-26
  • 2014-12-22
  • 2016-11-05
  • 1970-01-01
  • 2019-11-14
  • 1970-01-01
相关资源
最近更新 更多