在 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 不再可用。
因此,是否有其他方法可以绘制图像中特征或对象的数量?
函数 hullFeatures
和 drawtext
已失效。 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(行)和 p
是 features(列)的数量。在此示例中,每个对象都是一个单元格。 computeFeatures.moment
编辑的特征 return 是 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")
我有一个关于 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 不再可用。
因此,是否有其他方法可以绘制图像中特征或对象的数量?
函数 hullFeatures
和 drawtext
已失效。 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(行)和 p
是 features(列)的数量。在此示例中,每个对象都是一个单元格。 computeFeatures.moment
编辑的特征 return 是 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")