我有一些R作为统计平台的经验,但对基于图像的数学缺乏经验。我有一系列照片(tiff格式,px /μm已知),有孔和不规则曲线。我想测量一个洞和那个特定洞的最近曲线之间的最短距离。我想为照片中的每个洞做这个。这些孔也不规则,所以也许我需要告诉程序什么是孔和什么是曲线(ImageJ有点和分段线函数)。
任何想法如何做到这一点?我应该在R中使用哪个包?你会为这种任务推荐另一个程序吗?
答案 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)
还可以使用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
您可以通过从圆和直线导出方程式来数学检查。如果没有数百万个点来描述数千条线和孔,那么这个速度就足够快了。