2014-09-21 3 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.cy и nucleus.Ba.m.cy, но неясно, как эти вычисления отличаются (они чрезвычайно коррелированы, но не идентичны).

Я также предполагаю, что значения .a. и .Ba. используют значения интенсивности в y, но детали неясны. Такие функции, как nucleus.a.b.mean и nucleus.Ba.b.mean, похожи (~ .80 corr), но не то же самое. Я предполагаю, что они оценивают интенсивность объектов y, определяемую метками в x, но разница неясна.

Есть ли какая-либо документация по этому вопросу?

Спасибо,

Макс

 
> 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égoire Pau? Я уверен, что если вы его поймете, вы сможете его найти.

+0

У меня есть 1) многие из этого специфического синтаксиса устарели и 2) он действительно упоминает 'computeFeatures'. Я хотел задать вопрос здесь, прежде чем беспокоиться о поддерживающем пакет (как хотелось бы, чтобы кто-то сделал для моих пакетов). Спасибо, Макс – topepo

1

Как отказ от ответственности, я ничего не знаю о вашем поле, но, посмотрев на функцию, я могу сделать довольно хорошее предположение о том, что происходит. Я рекомендую вам использовать debugonce(computeFeatures), а затем запустить ft = computeFeatures(x, y, xname="nucleus"). Вы можете пройти через каждую строку кода (тип Q), чтобы выйти, и посмотреть, что происходит.

Как уже отмечалось, в документации говорится:

Особенности называются x.y.f, где х является объектом слой, у слой изображения ссылки и е с названием функции.

В вашем примере computeFeatures сгенерировал значение для три опорных слоев (a, aB и 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 пикселов [Gaussian blur] (http://en.wikipedia.org/wiki/Gaussian_blur), что было бы полезно если вам нужно выполнить обнаружение краев. – nograpes

+0

Я знаю, что пытается сделать код, но я ищу более подробную информацию о точных данных о том, какие данные используются для вычисления функций относительно соглашения об именах. Здесь всего 1 ссылочный объект ('y'); для более чем одного ссылочного объекта потребуется список матриц (и для данного примера использование более чем одного значения в 'reframes' вызывает ошибку). Если я использую что-то вроде 'refnames =" prot "', соглашение становится «' .prot.' »и« .Bprot.' »вместо« '.a.'» и «' .Ba' », которое является немного более определен, но не объясняет вычисления. – topepo

+0

Хотя вы вводите только один ссылочный объект ('y'), он создает * два * ссылочных объекта для каждого ссылочного объекта, который вы вводите, один по мере ввода, а другой с размытием по Гауссу. Как я уже упоминал, он всегда префикс «B» к гауссовскому размытию. Точное размытие, которое оно использует, также указано в приведенном выше коде. Наконец, он добавляет третью ссылку, называемую '0', которая не использует ссылку. – nograpes

Смежные вопросы