【问题标题】:Getting values from histogram with image使用图像从直方图中获取值
【发布时间】:2016-06-20 02:25:03
【问题描述】:

如何以图像为参数获取直方图的值。 根据this,可以检索这些值,因为 hist() 返回一个值。

其余代码工作正常。但是,返回 null 到直方图(完整代码):

library(EBImage)
image = readImage("cat.png")
grayImage <- channel(image,"gray")
grayScaled = floor(grayImage * 255)
histogram <- hist(grayScaled)

> histogram
NULL

这里使用包 EBImage。所以我想获得像 histogram$counts 这样的强度或计数,但变量 histogram 为空。

【问题讨论】:

    标签: r image-processing histogram


    【解决方案1】:

    EBImage 版本 4.13.5 开始,hist() 对象的方法 hist() 返回一个(列表)histogram-class 对象。对于颜色模式 Grayscale 的图像,结果是类 histogram 的单个对象,对于 Color 图像,结果是一个命名列表,其中包含对应于红色、绿色和蓝色通道的元素,如图所示下面的例子。

    library(EBImage)
    
    file  = system.file("images", "sample-color.png", package="EBImage")
    image = readImage(file)
    
    h = hist(image)
    
    str(h)
    

    此功能目前在包的 devel 分支中可用。可以从GitHub获取:

    devtools::install_github("aoles/EBImage")
    

    【讨论】:

      【解决方案2】:

      EBImage 已为泛型 hist() 注册了一个方法,如下所示:

      library("EBImage")
      findMethodSignatures(hist)
           x          
      [1,] "AffyBatch"
      [2,] "ANY"      
      [3,] "Image"  
      

      这就是为什么在调用hist(grayScaled) 时无法返回histogram-class 对象的原因。 这取决于你想要什么,但你可以访问你的 image 对象(包含一个矩阵)的 .Data 插槽并绘制它,返回所需的对象:

      histogram <- hist(imageData(grayScaled))
      

      【讨论】:

      • 我也在考虑在运行直方图之前分离包:detach("package:EBImage", unload=TRUE)
      • 好主意,在我的示例中,它产生了相同的结果。你知道 hist 在没有注册image 的类定义的情况下是如何识别数据槽的吗?
      • 谢谢大家的回答!
      • @DavidH 与其直接读取.Data 槽,不如使用imageData 访问器来获取/设置Image 对象的像素数组。这种方法的优点是 imageData 函数既适用于正式的 S4 Image 对象,也适用于可能用于存储图像数据的普通 arrays。
      • 我不知道访问者;谢谢,更新了我的答案!
      猜你喜欢
      • 1970-01-01
      • 2014-05-03
      • 2011-01-09
      • 2012-07-01
      • 2014-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多