2014-09-21 130 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