使用Multi Spec和R进行批量图像分析

时间:2015-08-18 14:16:57

标签: r batch-processing imaging

是否可以使用R来启用一批图像通过Multi Spec(或任何其他程序 - 不包括ImageJ)而不是单个图像分析?

如果是这样的话?

我使用以下链接附加了我正在寻找的图像: “http://figshare.com/s/f81b92ea474f11e5b78d06ec4bbcf141” “http://figshare.com/s/463ec4ce475011e5909106ec4b8d1f61

“编辑”图像是“ms485_a7c5,c3aR 40x gm 1.tif”的副本,其中突出显示了我正在搜索的内容。

蓝色圆圈周围的黑框是我正在寻找的一组数据,特别是它们在图像中的数量以及它们所覆盖的图像的%区域。 合并的蓝色和棕色区域周围的红色框也是我特别需要的,具有与上述相同的值。 最后,图像的棕色区域也是我正在寻找的,但仅限于图像中覆盖的%区域。

我能够在Multi-Spec上对1张图像进行分析,但我需要在1000多张图像上进行分析,因为我不熟悉R或其他编码程序,所以无法进行此操作。

提前致谢

1 个答案:

答案 0 :(得分:1)

所以,我不知道这会给你带来多大的帮助,但是每次处理一张图像应该可以在你的记忆限制内完成。概述的方法是应用于图像的最基本的阈值处理。可以应用更复杂的方法:

library(raster)

i <- brick("./data/ms485_a7c5_c3aR_40x_gm_1.tif")
names(i) <- c("r", "g", "b")

##  Plot image:
plotRGB(i)

enter image description here

##  Here you could use a more sophisticated classification method:
#k <- kmeans(i[], centers=4, iter.max = 100, nstart = 4)
#c <- raster(i)
#c[] <- c$cluster

##  Instead we'll just set some simple thresholds:
c1 <- (i$r < 170 & i$g < 140 & i$b > 150)*1  ## Blues
c2 <- (i$r > 150 & i$g > 150 & i$b > 150)*2  ## Lights
c3 <- (i$r < 170 & i$g < 150 & i$b < 140)*3  ## Darks

##  Plot the classified data so you see what you're summarizing below:
plot(c, add=T, legend=F, col=c(
  rgb(255, 255, 255, maxColorValue=255),
  rgb(100, 100, 180, maxColorValue=255),
  rgb(220, 220, 220, maxColorValue=255),
  rgb(120, 100, 90, maxColorValue=255)
))

enter image description here

##  And calculate your summary stats by class:

t <- table(c[])
names(t) <- c("Unclassified", "Blues", "Lights", "Darks")
t

##  Unclassified        Blues       Lights        Darks 
##        283887       220042      4475129       376942

##  Or we can calculate those cell counts as percentages of pixels:
t/ncell(c) * 100

##  Unclassified        Blues       Lights        Darks 
##      5.300355     4.108327    83.553566     7.037752 

现在,因为您尚未使用可以准确识别蓝色区域的技术对图像进行分割或阈值处理,所以您必须找出适合您的最佳方法。获得分类图像后,您可以使用SDMTools包来计算图像中出现的不同修补程序的数量等。

##  To summarize distinct patches within your classified "Blues":
library(SDMTools)

##  Calculate stats, and count all patches for "Blues":
class_stats <- ClassStat(c1, cellsize=1, bkgd=0)
class_stats$n.patches

##  [1] 1858

##  Only count patches larger than 10 pixels:
image_clusters <- ConnCompLabel( c1 )
patch_stats <- PatchStat(image_clusters, cellsize=1)
sum(patch_stats[patch_stats$patchID>0,]$n.cell > 10)

##  [1] 462