【问题标题】:Using Multi Spec and R for batch Image Analysis使用 Multi Spec 和 R 进行批量图像分析
【发布时间】:2015-08-18 14:16:57
【问题描述】:

是否可以使用 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 或其他编码程序而无法执行此操作。

提前致谢

【问题讨论】:

  • 没有理由不能假设您可以从命令行执行所需的操作。但是仅将 R 用作批处理工具可能比它的价值更麻烦。您要解决什么样的图像处理任务?我认为你需要在这个过程中更加明确,否则你不会得到任何关于替代方案或好方法的具体建议。
  • 我正在研究细胞成像而不是卫星成像,但它具有相同的原理。我有超过 1000 张具有相同 4 种颜色(棕色、蓝色、白色和棕色重叠蓝色)的图像,我正在尝试查看这些单元格覆盖的表面积。我发现与 ImageJ 相比,Multi Spec 比我正在寻找的内容具有更好的优势,因为我想在每个新图像中使用相同的颜色波长。如果需要更多信息,请发表评论。谢谢
  • 这些图片有多大,它们是什么格式的? “颜色”是固定/分类的还是您处理 RGB 图像?我想要了解的是您是否需要外部工具,或者您是否可以直接使用raster 包...
  • @ForrestR.Stevens 图片大小约为 15MB,尺寸为 2600x2060 像素。颜色也是固定的。有没有办法将我感兴趣的图像和属性(颜色)上传到这里?谢谢
  • 您可以将它们添加到 figshare 或从 Dropbox 等链接它们。但最好的选择是模拟类似的数据。听起来你想要的可以用 R 本身的几行代码来完成。您基本上只是想要按颜色计算像素数?

标签: r batch-processing imaging


【解决方案1】:

所以,我不知道这会让您走多远,但是在您的内存限制范围内,一次处理一张图像应该是可行的。概述的方法是应用于图像的最基本的阈值处理。可以应用更复杂的方法:

library(raster)

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

##  Plot image:
plotRGB(i)

##  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)
))

##  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

【讨论】:

    猜你喜欢
    • 2016-10-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-14
    • 2013-03-23
    • 2012-05-01
    • 1970-01-01
    相关资源
    最近更新 更多