Detectando trilhas em imagens da floresta


30

Alguém conhece alguma pesquisa / documentação / software para identificar uma trilha (como uma linha ou curva ponto a ponto) em uma imagem de uma cena da floresta (da perspectiva da câmera em algum lugar ao longo da trilha)?

Estou tentando encontrar um algoritmo que poderia ter uma imagem como:

texto alternativo

e produza uma máscara, identificando uma provável "trilha", como:

texto alternativo

Como você pode ver, a imagem original é um pouco embaçada, o que é proposital. A fonte da imagem não pode garantir o foco perfeito, por isso preciso ser capaz de lidar com uma quantidade razoável de ruído e embaçamento.

Meu primeiro pensamento foi aplicar um desfoque gaussiano e segmentar a imagem em blocos, comparando blocos adjacentes procurando diferenças nítidas de cores (indicando uma "borda" da trilha). No entanto, eu rapidamente percebi que sombras e outras mudanças na iluminação facilmente causam isso.

Eu estava pensando em extrair recursos SURF, mas só obtive sucesso com SURF / SIFT quando a imagem é perfeitamente clara e com iluminação consistente.

Também tentei dimensionar as imagens e as máscaras para tamanhos muito menores (por exemplo, 100x75), convertê-las em vetores 1xN e usá-las para treinar uma rede neural baseada na FANN (onde a imagem é a entrada e a máscara é a desejada) saída). Mesmo em um tamanho tão pequeno, com uma camada oculta com 75% do tamanho do vetor de entrada, levou 6 horas para treinar e ainda não conseguia prever nenhuma máscara no conjunto de testes.

Alguém pode sugerir outros métodos ou documentos sobre o assunto?


1
Você não mencionou nada sobre isso, mas controla a aquisição da câmera / imagem? As pessoas usam o índice de vegetação usando imagens de infravermelho próximo em situações semelhantes (considere calcular a cobertura florestal de um satélite). Se você tem infravermelho próximo, o problema é simples de resolver.
Carlosdc 18/10/11

Eu sim. Estou tirando fotos com uma câmera monocular barata (câmera para webcam / celular), mas acho que elas não armazenam infravermelho.
Cerin

Usando vários filtros de cor que podem diferenciar entre os espectros de vegetação e sujeira provavelmente seria útil
endolith

Estou curioso para saber se você tentou uma abordagem bayesiana para treinar e detectar. Eu tive uma resposta que escrevi alguns dias atrás, mas a excluí porque achei que você a havia descartado depois de tentar. Se você ainda não considerou essa opção, ficarei feliz em excluí-la.
Lorem Ipsum 25/10

@yoda, o que você quer dizer com abordagem bayesiana? Estou familiarizado apenas com o bayesiano quando aplicado a classificações discretas e redes lógicas. Não estou familiarizado com a aplicação ao CV. Não me lembro de ver nenhuma postagem sua.
Cerin

Respostas:


13

Pode não ser suficiente por si só, mas como um dos problemas está relacionado às variações de iluminação, uma etapa de pré-processamento da remoção de sombra pode ajudar. A técnica em que estou pensando é descrita no seguinte artigo:

"Na remoção de sombras de imagens", GD Finlayson, SD Hordley, C. Lu e MS Drew, Análise de padrões IEEE e inteligência de máquinas (PAMI), Vol.28, No.1, Jan, 2006, pp.59- 68 http://www.cs.sfu.ca/~mark/ftp/Pami06/pami06.pdf

A primeira parte do processo produz uma imagem invariante em escala de cinza da iluminação, que provavelmente é o que você deseja neste caso. Aqui está uma foto do exemplo que eles dão no artigo:

Remoção de Sombra
(fonte: datageist.com )

De fato, levar o processo um passo adiante para produzir uma imagem de "cromaticidade" pode ser o que você precisa para distinguir claramente entre as folhas vivas e as mortas. Mais uma vez, um exemplo do artigo:

Cromaticidade
(fonte: datageist.com )

O problema, porém, é que a câmera precisa ser calibrada primeiro. Supondo que isso seja possível, alguma combinação das representações que eles descrevem provavelmente tornará os outros métodos que você está usando mais eficazes.


12

Não acredito que você tenha informações suficientes na imagem de origem para produzir a imagem da máscara. Você pode começar segmentando por cores, ou seja, verde não é rastro, cinza / marrom é. No entanto, existem regiões cinza / marrom nas "bordas da trilha" que não são representadas na sua máscara. (Veja o quadrante inferior esquerdo da sua imagem de origem.)

A máscara fornecida implica restrições estruturais não evidentes na imagem de origem: por exemplo, talvez suas trilhas tenham largura fixa - você pode usar essas informações para restringir a máscara preliminar retornada pelo reconhecedor de padrões.

Continuando o tópico da estrutura: As trilhas se fundem com outras? As trilhas são delineadas com certas características do solo / cascalho? Como humano (que é razoavelmente bom no reconhecimento de padrões!), Sou desafiado pelos recursos mostrados no quadrante inferior esquerdo: vejo regiões cinza / marrom que não posso desconsiderar como "trilha". Talvez eu pudesse fazê-lo conclusivamente se tivesse mais informações: um mapa e uma localização grosseiramente conhecida, experiência pessoal nessa trilha ou talvez uma sequência de imagens que levem a esse ponto - talvez essa visão não seja tão ambígua se o reconhecedor "souber" "o que levou a essa cena.

Uma coleção de imagens é a abordagem mais interessante na minha opinião. Continuando essa linha de pensamento: uma imagem pode não fornecer dados suficientes, mas uma vista panorâmica pode desambiguar a cena.


Sim, as trilhas se fundem com outras. E sim, as trilhas são delineadas por características do solo / cascalho, pois essas características devem ser distintas das áreas que não são trilhas. Concordo que a imagem pode ser desafiadora em algumas seções, mas ainda acho que há informações suficientes para adivinhar bastante a localização da trilha. Mesmo que você não esteja familiarizado com essa trilha, parece que você não teve nenhum problema com ela (exceto na área inferior esquerda, o que é compreensível).

Na verdade, posso adivinhar bastante os limites da trilha. Mas receio estar contando com mais informações do que as apresentadas na imagem de origem. Eu "sei" o que é uma trilha - presumivelmente porque eu construí um modelo ou modelo dos recursos mais importantes que compreendem uma trilha: através da experiência direta ou vendo trilhas bem definidas nas fotos etc. Para resumir: ao reconhecer a trilha em a imagem de origem, estou usando muito mais do que observo na imagem de origem.

Existem algumas características da trilha que um sistema de visão pode explorar: presumivelmente, podemos assumir que a trilha representa um espaço livre e navegável. Assim, as características das árvores, arbustos e rochas podem ser classificadas como "não rastreiam". Talvez uma análise de textura possa ajudar a discernir isso? No entanto, não tenho certeza: o chão sob as árvores (do meio ao canto superior esquerdo) parece bastante semelhante à trilha.

Minha primeira idéia teria sido referir-se às transformações LU ou Eigen, que dão uma alta resposta quando a textura é muito áspera. No entanto, aqui a principal característica distintiva entre trilha / não trilha parece ser a cor. Então, talvez convertê-lo no espaço de cores HSV e criar uma máscara a partir dos pixels que possuem matiz 'terrestre' - marrom ou ocre - daria uma estimativa aproximada.
AruniRC

12

Não existe um algoritmo único que detecte magicamente trilhas em uma imagem aleatória. Você precisará implementar uma rotina baseada no aprendizado de máquina e "treiná-la" para detectar trilhas. Sem entrar em muitos detalhes, aqui está um esboço do que você faria em uma abordagem de aprendizado supervisionado.

  1. Você precisará de um conjunto de "exemplos de treinamento", com os quais quero dizer várias fotos de trilhas em diferentes ambientes, nas quais você (o supervisor) rotulou o que conta como "trilha" e qual é o fundo "floresta". Você divide as imagens em seções menores (normalmente 8x8) e as transforma em um "espaço de recurso", obtendo o DCT (transformação discreta de cosseno) dos blocos. O DCT de cada bloco neste caso fornece um "vetor de característica" de 64 pontos.
  2. XxYy1=traily2=forest

    • as distribuições condicionais de classe
      • PX|Y(x|trail)trail
      • PX|Y(x|forest)forest
    • as probabilidades de classe ou o anterior
      • PY(trumaEueu)trumaEueu
      • PY(forest)forest
  3. Com isso, você testa sua imagem (novamente, dividindo-a em pedaços menores) e calcula a probabilidade posterior. Usando a teoria da decisão de Bayes, você definiria seus critérios de seleção binária (neste caso) algo como

    y~Eu(x)=argmaxyEuPX|Y(x|yEu) PY(yEu)

Observe que esta é uma visão geral muito simplificada da abordagem. Há várias coisas a serem consideradas e a mais importante delas é escolher o conjunto certo de recursos para o seu problema. Você também pode fazer coisas mais complicadas, como usar modelos de mistura e estimativas de densidade baseadas em kernel, mas tudo isso é muito detalhado e demorado para escrever em uma resposta.

Para motivar e confirmar que vale a pena tentar essa abordagem, aqui está um exemplo de algo que fiz há muito tempo como lição de casa do curso, que é muito semelhante ao que você está tentando alcançar. O objetivo era detectar o animal da vegetação de fundo (imagem à esquerda). A figura à direita mostra a máscara binária obtida após o "aprendizado" para distinguir entre o primeiro e o segundo plano.

insira a descrição da imagem aqui insira a descrição da imagem aqui

Para saber mais sobre o aprendizado de máquina, consulte alguns livros de texto. Um dos livros didáticos mais conhecidos e frequentemente recomendados no campo é:

T. Hastie, R. Tibshirani e J. Friedman, Os Elementos da Aprendizagem Estatística: Mineração de Dados, Inferência e Previsão. 2ª Ed., Springer-Verlag (2008)

que agora está disponível como PDF gratuito no link fornecido. Outro livro decente é:

RO Duda, PE Hart e DG Stork, Classificação de Padrão , 2ª Ed., John Wiley & Sons (2001)


1
Nessa nota, gostaria de destacar o ml-class.org, que é uma excelente introdução ao aprendizado de máquina.
bjoernz

Método interessante. No entanto, quando você diz que Py (trilha) e Py (floresta) são a "probabilidade de encontrar uma trilha na imagem inteira", você quer dizer probabilidade de encontrá-las em um bloco de 8x8 ou a imagem inteira? Se a imagem inteira, eu imagino que ambas seriam 100%, pois todas as imagens de treinamento terão as duas em algum lugar.
Cerin

@ Cerin: Desculpe, por Py (trilha), quero dizer probabilidade de encontrá-lo em um bloco. Portanto, esse seria o total de todos os blocos que possuem trilha pelo número total de blocos na imagem inteira. Eu o editei para corrigir isso #
Lorem Ipsum

Como você definiria o espaço de recurso X? Você usaria algo como o cluster K-Means para reduzir a dimensionalidade dos vetores de recurso de 64 pontos para algo como 10 recursos?
Cerin

@Cerin Sim, o K-means é uma das abordagens comuns para reduzir a dimensionalidade.
Lorem Ipsum


5

Parece um problema para a segmentação de texturas (não uma segmentação de cores). Existem muitos métodos,

eles costumam usar wavelets Gabor, como este http://note.sonots.com/SciSoftware/GaborTextureSegmentation.html

Segmentação baseada em superpixels http://ttic.uchicago.edu/~xren/research/superpixel/

e segmentação de corte de gráfico semelhante http://en.wikipedia.org/wiki/Graph_cuts_in_computer_vision

aqui está a visão geral da wiki http://en.wikipedia.org/wiki/Segmentation_(image_processing)


segmentações de textura gabor parece ser bom!
Nkint 19/06/12
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.