5

我有一些使用 R 作为统计平台的经验,但在基于图像的数学方面缺乏经验。我有一系列带有孔和不规则曲线的照片(tiff 格式,px/µm 已知)。我想测量一个洞和那个特定洞的最近曲线之间的最短距离。我想对照片中的每个洞都这样做。这些孔也不是规则的,所以也许我需要告诉程序什么是孔,什么是曲线(ImageJ 具有点和分段线功能)。

任何想法如何做到这一点?我应该在 R 中使用哪个包?您会为此类任务推荐另一个程序吗?

示例图片

4

2 回答 2

2

编辑:现在可以使用 sclero 包执行此操作。该软件包目前在GitHub 上可用,教程中详细描述了该过程。只是为了说明,我使用教程中的一个例子:

library(devtools)
install_github("MikkoVihtakari/sclero", dependencies = TRUE)
library(sclero)
path <- file.path(system.file("extdata", package = "sclero"), "shellspots.zip")
dat <- read.ijdata(path, scale = 0.7812, unit = "um") 
shell <- convert.ijdata(dat)
aligned <- spot.dist(shell)
plot(aligned)

在此处输入图像描述

也可以使用 sclero 包提供的功能添加样本点大小。请参阅教程中的第 2.5 节。

于 2012-04-23T14:20:20.717 回答
1

有一个为 Image J 编写的边缘检测工具,可以帮助您首先找到孔和线,并澄清它们。你可以在

http://imagejdocu.tudor.lu/doku.php?id=plugin:filter:edge_detection:start

调整阈值和滞后的设置有助于找到线和孔。如果没有看到您的实际照片,很难判断这是否有很大的工作机会,但我的一位同事在 FRAP 图像上使用此工具取得了良好的效果。我编写了一个 ImageJ 工具,该工具可以根据这些图像计算 FRAP 分析中的回收率。查看代码时,您可能会得到一些想法(参见: http://imagejdocu.tudor.lu/doku.php?id=plugin:analysis: frap_normalization :start )

我知道您可以使用图像的唯一方法是使用EBImage包含在生物导体系统中的图像。该包Rimage是孤立的,因此不再维护。

求最短距离:一旦有了线和孔的坐标,就可以采用霰弹枪法:计算所有点与线之间的距离,然后取最小值。R 中关于它的说明:

x <- -100:100
x2 <- seq(-70,-50,length.out=length(x)/4)

a.line <- list(x = x,
               y = 4*x + 5) 

a.hole <- list(
  x = c(x2,rev(x2)),
  y = c(200 + sqrt(100-(x2+60)^2),
        rev(200 - sqrt(100-(x2+60)^2)))
  )

plot(a.line,type='l')
lines(a.hole,col='red')

calc.distance <- function(line,hole){

  mline <- matrix(unlist(line),ncol=2)
  mhole <- matrix(unlist(hole),ncol=2)

  id1 <- rep(1:nrow(mline),nrow(mhole))
  id2 <- rep(1:nrow(mhole), each=nrow(mline))

  min(
    sqrt(
      (mline[id1,1]-mhole[id2,1])^2 + 
      (mline[id1,2]-mhole[id2,2])^2
    )
  )
}

然后 :

> calc.distance(a.line,a.hole)
[1] 95.51649

您可以通过从圆和线推导出方程来进行数学检查。如果您没有数百万个点来描述数以千计的线和孔,那么这会足够快。

于 2012-01-12T15:31:44.903 回答