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:
e produza uma máscara, identificando uma provável "trilha", como:
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?
Respostas:
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:
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:
(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:
(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.
fonte
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.
fonte
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.
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
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.
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 é:
que agora está disponível como PDF gratuito no link fornecido. Outro livro decente é:
fonte
Isso tem algum interesse?
Detecção de superfície atravessável em tempo real por fusão do espaço de cores e análise temporal
fonte
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)
fonte