如何在R中提取图像的颜色特征

时间:2015-11-20 16:18:56

标签: r colors

我想在R中进行一些图像特征提取。目前我正在使用EBImage包。我可以使用hist函数获得RGB直方图,但是我还可以获得Lab-Histogramm吗?此外,我还想存储直方图的数据(像素强度的分布)。这怎么可能?是否可以在R中提取图像的颜色相关图?如果是,我该怎么做? 非常感谢! 这是我到目前为止所做的代码(带注释):

source("http://bioconductor.org/biocLite.R") 
biocLite() 
biocLite("EBImage") 
library(EBImage) 
image1 <- readImage('C:/Users/Inalei/Pictures/Image1.JPG')
image2 <- readImage('C:/Users/Inalei/Pictures/Image2.JPG') 
image3 <- readImage('C:/Users/Inalei/Pictures/Image3.JPG')

hist1 <- hist(image1) #hist1 is empty
hist2 <- hist(image2) #hist2 is empty
hist3 <- hist(image3) #hist3 is empty

library(corrgram)
corrgram(image1) #Error in slot(x, ".Data")[, sapply(x, is.numeric), drop = FALSE] : incorrect number of dimensions

1 个答案:

答案 0 :(得分:1)

我刚刚更新了EBImage开发版本,以便于提取图像直方图数据。现在hist方法无形地返回对应于红色,绿色和蓝色通道的类“直方图”的对象的命名列表。例如,要访问绿色像素强度的分布,您可以使用

hist1 <- hist(image1)
hist1$green

要使用此功能,请从源

安装EBImage
library(devtools)
install_github("Bioconductor-mirror/EBImage")

或等到EBImage版本4.13.5的二进制文件可从https://www.bioconductor.org/packages/3.3/bioc/html/EBImage.html的软件包登录页面获得。

关于Lab色彩空间的问题:不幸的是,目前我们不支持它。

要在颜色通道之间制作相关图,首先构建一个包含每个通道像素值列的数据框

channels = sapply(c("red", "green", "blue"),
  function(ch) as.vector(channel(x, ch)),
  simplify = FALSE)
channels = as.data.frame(channels)

然后传递给corrgram函数

corrgram(channels)