Для 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
Что вы можете проверить математически, выведя уравнения из круга и линии.Это происходит достаточно быстро, если у вас нет миллионов точек, описывающих тысячи линий и дырок.