R / ImageJ:测量点和曲线之间的最短距离

时间:2012-01-12 09:37:20

标签: r geometry photo imagej

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

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

Example image

2 个答案:

答案 0 :(得分:2)

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

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)

enter image description here

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

答案 1 :(得分: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

您可以通过从圆和直线导出方程式来数学检查。如果没有数百万个点来描述数千条线和孔,那么这个速度就足够快了。

相关问题