Pergunta

Tenho alguma experiência com R como plataforma de estatísticas, mas não tenho experiência em matemática baseada em imagens.Eu tenho uma série de fotografias (formato tiff, px / µm é conhecido) com buracos e curvas irregulares.Eu gostaria de medir a distância mais curta entre um buraco e a curva mais próxima para aquele buraco específico.Eu gostaria de fazer isso para cada furo em uma fotografia.Os furos também não são regulares, então talvez eu precise dizer ao programa o que são furos e o que são curvas (o ImageJ tem funções de ponto e linha segmentada).

Alguma ideia de como fazer isso?Qual pacote devo usar no R?Você recomendaria outro programa para esse tipo de tarefa?

Imagem de exemplo

Foi útil?

Solução

EDITAR: Fazer isso agora é possível usando o pacote sclero.O pacote está atualmente disponível em GitHub e o procedimento é descrito em detalhes em o tutorial .Apenas para ilustrar, uso um exemplo do 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)

insira a descrição da imagem aqui

Também é possível adicionar tamanhos de pontos de amostra usando as funções fornecidas pelo pacote sclero.Consulte a Seção 2.5 no tutorial.

Outras dicas

Há uma ferramenta para detecção de bordas escrita para a Imagem J que pode ajudá-lo a encontrar primeiro os buracos e as linhas e esclarecê-los. Você o encontra em

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

Brincar com as configurações de tresholding e histerese pode ajudar a encontrar as linhas e buracos. É difícil dizer se isso tem muita chance de funcionar sem ver suas fotos reais, mas um colega meu teve bons resultados usando essa ferramenta em imagens FRAP. Programei uma ferramenta ImageJ que pode calcular recuperações na análise FRAP com base nessas imagens. Você pode ter algumas idéias para si mesmo ao examinar o código (consulte: http://imagejdocu.tudor.lu/doku.php?id=plugin:analysis:frap_normalization:start )

A única maneira que sei que você pode trabalhar com imagens é usando EBImage que está contido no sistema biocondutor. O pacote Rimage é órfão, portanto não é mais mantido.

Para encontrar a distância mais curta: uma vez que você tenha as coordenadas das linhas e buracos, você pode ir para a abordagem de espingarda: calcule as distâncias entre todos os pontos e a linha, e depois pegue o mínimo. Uma ilustração sobre isso em 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
    )
  )
}

Então:

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

Que você pode verificar matematicamente derivando as equações do círculo e da linha. Isso acontece rápido o suficiente se você não tiver milhões de pontos descrevendo milhares de linhas e buracos.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top