Question

J'ai une certaine expérience avec R comme plate-forme de statistiques, mais je suis sans expérience en mathématiques à base d'image. J'ai une série de photographies (format tiff, px / um est connu) avec des trous et des courbes irrégulières. Je voudrais mesurer la distance la plus courte entre un trou et la courbe la plus proche de ce trou particulier. Je voudrais le faire pour chaque trou dans une photographie. Les trous ne sont pas réguliers non plus, je alors peut-être besoin de dire au programme quels sont les trous et quelles sont les courbes (ImageJ a un point et les fonctions de ligne segmentés).

Toutes les idées comment faire cela? Quel forfait dois-je utiliser dans R? Recommanderiez-vous un autre programme pour ce genre de tâche?

Exemple image

Était-ce utile?

La solution

EDIT: Faire cela est maintenant possible en utilisant package scléro. Le paquet est actuellement disponible sur GitHub et la procédure est décrite en détail dans le tutoriel . Pour illustrer, j'utiliser un exemple du tutoriel:

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)

entrer image description ici

Il est également possible d'ajouter des tailles de tache échantillon à l'aide des fonctions fournies par le paquet scléro. S'il vous plaît voir la section 2.5 dans le tutoriel.

Autres conseils

Il y a un outil pour la détection de bord écrit pour l'image J qui pourrait vous aider à trouver d'abord les trous et les lignes, et les clarifier. Vous le trouverez à

http://imagejdocu.tudor.lu/doku. php id = plug-in: filtre: edge_detection: commencer

Jouer avec les paramètres du seuillage et la boîte hystérésis aide afin d'obtenir les lignes et les trous trouvés. Il est difficile de dire si cela a beaucoup de chance de travailler sans voir vos images réelles, mais un de mes collègues avait de bons résultats à l'aide de cet outil sur les images FRAP. J'ai programmé un outil ImageJ qui permet de calculer les recouvrements dans l'analyse de FRAP en fonction de ces images. Vous pourriez avoir quelques idées pour vous-même en regardant le code (voir: http://imagejdocu.tudor.lu/doku.php?id=plugin:analysis:frap_normalization:start )

La seule façon que je sais que vous pouvez travailler avec des images, est à l'aide EBImage qui est contenu dans le système bioconductor. Le Rimage paquet est devenu orphelin, donc n'est plus maintenu.

Pour trouver la distance la plus courte: une fois que vous avez les coordonnées des lignes et des trous, vous pouvez opter pour l'approche de fusil de chasse: calculer les distances entre tous les points et la ligne, puis prendre le minimum. Une illustration à ce sujet dans 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
    )
  )
}

Alors:

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

Que vous pouvez vérifier mathématiquement en dérivant les équations du cercle et de la ligne. Cela va assez vite si vous n'avez pas des millions de points décrivant des milliers de lignes et des trous.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top