【问题标题】:EBImage feature namesEBImage 特征名称
【发布时间】:2014-09-21 14:19:02
【问题描述】:

谁能解释在computeFeatures 中使用什么来计算不同的特征?

我得到了? computeFeatures 中所应用的命名约定。我不明白.0..a..Ba. 标签。

例如:

> library(EBImage)
> y = readImage(system.file("images", "nuclei.tif", package="EBImage"))[,,1]
> x = thresh(y, 10, 10, 0.05)
> x = opening(x, makeBrush(5, shape='disc'))
> x = bwlabel(x)
> ft = computeFeatures(x, y, xname="nucleus")
> colnames(ft)
 [1] "nucleus.0.m.cx"            "nucleus.0.m.cy"           
 [3] "nucleus.0.m.majoraxis"     "nucleus.0.m.eccentricity" 
<snip>
[11] "nucleus.0.s.radius.max"    "nucleus.a.b.mean"         
[13] "nucleus.a.b.sd"            "nucleus.a.b.mad"          
<snip>
[51] "nucleus.Ba.b.mean"         "nucleus.Ba.b.sd"          
[53] "nucleus.Ba.b.mad"          "nucleus.Ba.b.q001"        
[55] "nucleus.Ba.b.q005"         "nucleus.Ba.b.q05"  
<snip>       

我的猜测是nucleus.0.* 功能仅使用来自x 中包含的二进制掩码的数据。所以nucleus.0.m.cy 是使用二进制数据计算的 y 轴质心。还有nucleus.a.m.cynucleus.Ba.m.cy,但不清楚这些计算有何不同(它们非常相关但不完全相同)。

我还假设.a..Ba. 使用y 中的强度值,但细节很模糊。 nucleus.a.b.meannucleus.Ba.b.mean 等功能相似(~.80 corr)但不一样。我假设他们估计了由x 中的标签定义的对象的平均y 强度,但差异尚不清楚。

有这方面的文档吗?

谢谢,

最大

> 会话信息() R 开发中(不稳定)(2014-08-23 r66461) 平台:x86_64-apple-darwin10.8.0(64位) 语言环境: [1] en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8 附加的基础包: [1] stats graphics grDevices utils datasets methods base 其他附加包: [1] EBImage_4.7.16 通过命名空间加载(未附加): [1] abind_1.4-0 BiocGenerics_0.11.4 grid_3.2.0 [4] jpeg_0.1-8 lattice_0.20-29 locfit_1.5-9.1 [7] 并行_3.2.0 png_0.1-7 tiff_0.1-5 [10] 工具_3.2.0

【问题讨论】:

    标签: r image-processing bioconductor


    【解决方案1】:

    你看过这里的文档吗:AnalysisWithEBImage

    这似乎是讨论包的最深入的文档。您是否尝试过直接联系作者 Grégoire Pau?我确定如果你用谷歌搜索他,你可以找到他。

    【讨论】:

    • 我只有 1) 很多特定语法已被弃用,并且 2) 确实如此;不提computeFeatures。在打扰包维护者之前,我想在这里问这个问题(因为我希望有人为我的包做事)。谢谢,马克斯
    【解决方案2】:

    作为免责声明,我对您的领域一无所知,但通过查看函数,我可以很好地猜测发生了什么。我建议您使用debugonce(computeFeatures),然后运行ft = computeFeatures(x, y, xname="nucleus")。您可以单步执行每一行代码(键入Q)退出,看看发生了什么。

    如您所述,文档指出:

    特征被命名为 x.y.f,其中 x 是对象层,y 是 参考图像层和特征名称。

    在您的示例中,computeFeatures三个 参考层(aaB0)生成了值。文档提到,如果您不命名参考层,它们只会被赋予字母表中的字母,因此在您的情况下,您有一个参考层,它被称为a。我相信0 表示它使用no 参考层。

    从查看源代码看来,对于每一层i,都会创建一个 B_i 层。正如您在这段代码中看到的那样,它似乎在每一层上传递了一个硬编码过滤器,在 expandRef 函数中找到(cmets 是我的):

    # Hard code a filter
    blob = gblob(x0 = 15, n = 49, alpha = 0.8, beta = 1.2)
    # Filter using the fast 2D FFT convolution product.
    bref = lapply(ref, function(r) filter2(r, blob)/2)
    # Name it "B" and then the layer name
    names(bref) = paste("B", names(ref), sep = "")
    

    我不确切知道您在此处尝试做什么,但您可以直观地看到此过滤器在做什么。这是您的x(您可以运行display(x) 来查看):

    这是您的参考资料 (y):

    下面是硬编码过滤器的样子:

    这就是硬编码过滤器对y 所做的:

    因此,总结一下:带有0 的所有内容都与无参考进行比较,带有a 的所有内容都直接与y 作为参考进行比较,而带有aB 的所有内容都与@ 的过滤版本进行比较987654345@.

    【讨论】:

    • 在阅读了更多关于此的内容后,我怀疑硬编码过滤器所做的是应用 15 像素 Gaussian blur,如果您需要进行边缘检测,这将很有用。
    • 我知道代码试图做什么,但我正在寻找更多关于使用哪些数据来计算与命名约定相关的特征的确切细节。这里只有1个引用对象(y);多个引用对象将需要一个矩阵列表(对于给定的示例,在reframes 中使用多个值会引发错误)。如果我使用refnames = "prot" 之类的东西,则约定变为“.prot.”和“.Bprot.”,而不是“.a.”和“.Ba”,后者定义得更多,但不解释计算。
    • 虽然您只输入了一个引用对象 (y),但它会为您输入的每个引用对象创建 两个 引用对象,一个在您输入时创建,另一个在您输入时创建一个高斯模糊。正如我所提到的,它总是在高斯模糊前加上“B”。它使用的确切模糊也在上面的代码中给出。最后,它添加了第三个引用,称为0,它不使用任何引用。
    猜你喜欢
    • 2022-11-07
    • 2022-11-25
    • 2012-12-17
    • 2017-11-14
    • 2020-07-27
    • 2022-11-27
    • 2017-02-10
    • 2017-06-03
    相关资源
    最近更新 更多