Frage

Ich habe einige Erfahrungen mit R als Statistikplattform, bin aber unerfahren in bildbasierter Mathematik.Ich habe eine Reihe von Fotografien (TIFF-Format, px / µm ist bekannt) mit Löchern und unregelmäßigen Kurven.Ich möchte den kürzesten Abstand zwischen einem Loch und der nächsten Kurve für dieses bestimmte Loch messen.Ich möchte dies für jedes Loch in einem Foto tun.Die Löcher sind auch nicht regelmäßig, daher muss ich dem Programm möglicherweise mitteilen, was Löcher und was Kurven sind (ImageJ verfügt über Funktionen für Punkte und segmentierte Linien).

Irgendwelche Ideen, wie das geht?Welches Paket soll ich in R verwenden?Würden Sie ein anderes Programm für diese Art von Aufgabe empfehlen?

Beispielbild

War es hilfreich?

Lösung

BEARBEITEN: Dies ist jetzt mit dem Skleropaket möglich.Das Paket ist derzeit unter GitHub verfügbar. Die Vorgehensweise wird ausführlich in das Tutorial .Zur Veranschaulichung verwende ich ein Beispiel aus dem 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)

Bildbeschreibung hier eingeben

Mit den Funktionen des sclero-Pakets können auch Stichprobenfleckgrößen hinzugefügt werden.Bitte lesen Sie Abschnitt 2.5 im Tutorial.

Andere Tipps

Für Image J wurde ein Tool zur Kantenerkennung geschrieben, mit dem Sie zuerst die Löcher und Linien finden und klären können. Sie finden es unter

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

Das Herumspielen mit den Einstellungen für die Schwellenwertbildung und die Hysterese kann hilfreich sein, um die gefundenen Linien und Löcher zu erhalten. Es ist schwer zu sagen, ob dies eine große Chance hat, ohne Ihre tatsächlichen Fotos zu sehen, aber ein Kollege von mir hat mit diesem Tool gute Ergebnisse bei FRAP-Bildern erzielt. Ich habe ein ImageJ-Tool programmiert, das anhand dieser Bilder Wiederherstellungen in der FRAP-Analyse berechnen kann. Wenn Sie sich den Code ansehen, erhalten Sie möglicherweise einige Ideen (siehe: ) http://imagejdocu.tudor.lu/doku.php?id=plugin:analysis:frap_normalization:start )

Ich weiß nur, dass Sie mit Bildern arbeiten können, indem Sie EBImage verwenden, der im Bioconductor-System enthalten ist. Der Rimage des Pakets ist verwaist und wird daher nicht mehr verwaltet.

So finden Sie die kürzeste Entfernung: Sobald Sie die Koordinaten der Linien und Löcher haben, können Sie sich für die Schrotflinte entscheiden: Berechnen Sie die Abstände zwischen allen Punkten und der Linie und nehmen Sie dann das Minimum. Eine Illustration dazu in 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
    )
  )
}

Dann:

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

Was Sie mathematisch überprüfen können, indem Sie die Gleichungen aus dem Kreis und der Linie ableiten. Dies geht schnell genug, wenn Sie nicht Millionen von Punkten haben, die Tausende von Linien und Löchern beschreiben.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top