2014-09-21 115 views
4

任何人都可以解释什么是用来计算computeFeatures内的不同功能?EBImage功能名称

我得到应用的命名约定,在? 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之类的特征是相似的(〜.80corr),但不相同。我假设他们估计x中由标签定义的对象的平均强度为y,但差异尚不清楚。

有没有关于此的任何文档?

感谢,

最大

 
> sessionInfo() 
R Under development (unstable) (2014-08-23 r66461) 
Platform: x86_64-apple-darwin10.8.0 (64-bit) 

locale: 
[1] en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8 

attached base packages: 
[1] stats  graphics grDevices utils  datasets methods base  

other attached packages: 
[1] EBImage_4.7.16 

loaded via a namespace (and not attached): 
[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] parallel_3.2.0  png_0.1-7   tiff_0.1-5   
[10] tools_3.2.0 

回答

1

你有没有在这里看到的文档:AnalysisWithEBImage

这似乎是讨论的深度包文件中之最。您是否尝试过直接联系作者GrégoirePau?我相信如果你谷歌他可以找到他。

+0

我有,但1)许多特定的语法已被弃用,2)它不提;'computeFeatures'。我想在这里问这个问题,然后再打扰软件包维护人员(因为我希望有人为我的软件包做)。 Max – topepo 2014-09-24 19:01:04

1

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

正如你提到的,文件规定:

功能被命名为x.y.f,其中x是对象层,Y的 参考图像层和F功能名称。

在您的例子computeFeatures已经为参考层(aaB,并0)生成的值。文档中提到,如果你没有命名你的参考图层,他们只会得到字母表的字母,所以在你的情况下你有一个参考图层,它被称为a。我相信0意味着它使用没有参考层。

通过观察源代码,似乎每一个层,则创建一个B_ 层。这似乎传递一个硬编码的过滤器在每一层,你可以在这个代码,在expandRef功能发现看到(的评论是我的):

# 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)看到它):

enter image description here

这是您参考(y):

enter image description here

这里是硬编码的过滤器是这样的:

enter image description here

这是硬编码的过滤器是什么y

enter image description here

因此,要总结:一切与0被比作没有参考,一切以a直接作为基准进行比较,以y,一切与aB相比,y的过滤版本。

+0

在阅读了更多关于此之后,我怀疑硬编码过滤器正在做的是应用15像素[高斯模糊](http://en.wikipedia.org/wiki/Gaussian_blur),这将是有用的如果你需要做边缘检测。 – nograpes 2014-09-24 18:25:51

+0

我知道代码试图做什么,但我正在寻找更多关于什么数据用于计算相对于命名约定的特征的确切细节的细节。这里只有1个参考对象('y');多个参考对象需要一个矩阵列表(并且,对于给定示例,在'reframes'中使用多个值会引发错误)。如果我使用'refnames =“prot”',那么约定就变成了“'.prot.'”和“'.Bprot.'”,而不是“'.a.'”和“'.Ba'”,这是一个更多的定义,但没有解释计算。 – topepo 2014-09-24 19:07:45

+0

尽管您只输入一个参考对象('y'),它会为您输入的每个参考对象创建*两个*参考对象,一个是您输入的参考对象,另一个是高斯模糊。正如我所提到的,它总是以“B”作为高斯模糊的前缀。上面的代码也给出了它使用的精确模糊。最后,它增加了第三个参考,称为'0',它不使用参考。 – nograpes 2014-09-24 20:36:46