在 R 中绘制 EBImage 中的特征数

Plotting numbers of features in EBImage in R

我有一个关于 EBImage 的 computeFeatures 函数的问题。我使用以下代码来计算特征。

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 不再可用。

因此,是否有其他方法可以绘制图像中特征或对象的数量?

函数 hullFeaturesdrawtext 已失效。 hullFeatures 已被 computeFeatures.shape 取代。现在需要使用 computeFeatures.moment 来找到每个对象的位置。基础 text 函数现在用于向以光栅模式绘制的图像添加文本。

可以在小插图中找到 EBImage 的精彩概述:vignette("EBImage-introduction", package = "EBImage")。但是,对于 4.22.1 版,小插图不再显示如何对分段对象进行编号。这是 Pau、Sklyar 和 Huber 于 2010 年 4 月 22 日发布的 PDF 中示例的再现。

为了稍微阐明术语,computeFeatures 函数族 return 维数矩阵 n x p 其中 n 是分段数 objects(行)和 pfeatures(列)的数量。在此示例中,每个对象都是一个单元格。 computeFeatures.moment 编辑的特征 return 是 m.cx, m.cy, m.majoraxis, m.eccentricitym.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")