Построение числа функций в EBImage в R

У меня есть вопрос, касающийся функции computeFeatures в EBImage. Я использовал следующий код для вычисления функций.

biocLite("EBImage")
library (EBImage)
Image <- readImage("test.jpg")
Image3<-getFrame(Image,3)
x = thresh(Image3, w=15, h=15, offset=0.05) 
x = opening(x, makeBrush(5, shape='disc')) 
x = bwlabel(x) 
fts = computeFeatures.shape(x) 

Это дает мне список вычисленных функций. Тем не менее, это список из 39 функций, и меня интересуют только некоторые из них. Таким образом, я хотел бы знать, какие из computeFeatures соответствуют каждой функции в изображении.

Решение было представлено по адресу http://www.bricol.net/research/leafranks/11-01MS/EBImage-introduction.pdf с использованием следующего кода:

> nmask = thresh(nuc, 10, 10, 0.05) 
> nmask = opening(nmask, makeBrush(5, shape='disc')) 
> nmask = fillHull(nmask) 
> nmask = bwlabel(nmask) Cell bodies are segmented using propagate. 
> ctmask = opening(cel>0.1, makeBrush(5, shape='disc')) 
> cmask = propagate(cel, nmask, ctmask)
> res = paintObjects(cmask, img, col='#ff00ff') 
> res = paintObjects(nmask, res, col='#ffff00')
> xy = lapply(hullFeatures(cmask), function(hf) hf[, c('g.x', 'g.y')]) 
> labels = lapply(xy, function(z) as.character(1:nrow(z))) 
> font = drawfont(weight=600, size=16) 
> res = drawtext(res, xy=xy, labels=labels , font=font, col="white")

Которые наносят числа, соответствующие функциям на изображении. Однако функция hullFeatures больше не доступна.

Таким образом, есть ли другой способ нанести на график количество объектов или объектов в изображении?

0 ответов

Функции hullFeatures а также drawtext несущественны hullFeatures был заменен computeFeatures.shape, Теперь нужно использовать computeFeatures.moment найти положение каждого объекта. База text теперь функция используется для добавления текста к изображению в растровом режиме.

Отличный обзор EBImage можно найти в виньетке: vignette("EBImage-introduction", package = "EBImage"), Однако в версии 4.22.1 виньетка больше не показывает, как нумеровать сегментированные объекты. Вот воссоздание примера из PDF от 22 апреля 2010 года Пау, Скляра и Хубера.

Чтобы немного уточнить номенклатуру, computeFeatures семейство функций возвращает матрицу размерности n x p где n количество сегментированных объектов (строк) и p количество объектов (столбцов). В этом примере каждый объект является ячейкой. Функции, возвращаемые computeFeatures.moment являются m.cx, m.cy, m.majoraxis, m.eccentricity а также m.theta, Положение определяется первыми двумя признаками.

# Starting from EBImage
  if (!require(EBImage)) {
    source("http://bioconductor.org/biocLite.R")
    biocLite("EBImage")
    library(EBImage)
  }

# Use example nuclei and cells, make colorized composite
  nuc <- readImage(system.file('images', 'nuclei.tif', package='EBImage'))
  cel <- readImage(system.file('images', 'cells.tif', package='EBImage'))
  img <- rgbImage(green=1.5*cel, blue=nuc)

# Recreate nuclear and cell masks, add border to color composite
  nmask <- thresh(nuc, 10, 10, 0.05)
  nmask <- opening(nmask, makeBrush(5, shape='disc')) 
  nmask <- fillHull(nmask) 
  nmask <- bwlabel(nmask)
  ctmask <- opening(cel>0.1, makeBrush(5, shape='disc')) 
  cmask <- propagate(cel, nmask, ctmask)
  res <- paintObjects(cmask, img, col='#ff00ff') 
  res <- paintObjects(nmask, res, col='#ffff00')

# Determine position (center of mass) of each object in 'cmask'
  M <- apply(cmask, 3, computeFeatures.moment) # list of length 4 returned
  xy <- lapply(M, function(m) m[,c("m.cx", "m.cy")])

# Create labels and plot in 'raster' mode 
  labels <- lapply(xy, function(z) as.character(1:nrow(z)))
  plot(getFrame(res, 3, type = "render")) # or plot(res[,,,3])

# Add labels by text function
  text(xy[[3]], labels[[3]], col = "white")

Другие вопросы по тегам