Pergunta

Estou esperando para obter alguma ajuda com a detecção de objetos 2D. Eu vou dar uma visão geral breve do contexto em que isso será implementado.

Haverá uma imagem tirada do teto. O tecto terá marcadores colocados sobre ela, para a orientação da câmara pode ser determinada. As imagens serão sempre tomadas para cima em linha reta. Meu objetivo é detectar um desses marcadores na imagem e determinar a sua rotação. Assim, a rotação e escamação (em menor escala) serão os dois factores primários utilizados na detecção de imagem. Eu estarei escrevendo o software em C # ou Matlab (não tenho certeza ainda).

Por exemplo, o marcador pode ser uma seta assim:

Arrow Referência

Uma imagem tomada do teto iria conter marcadores. As necessidades de software para detectar um único marcador e determinar que ele tenha sido rodado por 170 graus.

Arrows teto

Eu não tenho nenhuma experiência prévia com análise de imagem. Eu sei de processamento de imagem é um tema bastante amplo e estava esperando para obter alguns conselhos sobre qual direção devo tomar e quais as técnicas que seria melhor para a minha candidatura. Obrigado!

Foi útil?

Solução

Eu recomendo MATLAB ou se você estiver com a intenção sobre o uso de C #, Emgu CV é muito bom.

Hough transforma são uma grande idéia. Uma vez que você detectar as bordas em sua imagem, usando, digamos, um Canny detector borda , você recebe um imagem da borda (que é uma imagem binária com apenas 1 ou 0 para valores).

Então, o Hough linha reta transformar (essencialmente) gira uma linha sobre cada pixel branco na imagem de borda (a resolução da linha depende de você) usando uma função parametrizada para a linha e calcula o número total de branco (valorizado em 1) pixels ao longo de cada linha girou e armazena essas informações em um grande acumulador que armazena os dados indexados pelos parâmetros da linha.

alt texto http://upload.wikimedia.org/wikipedia /en/a/af/Hough_space_plot_example.png

No exemplo acima, a forma paramétrica para uma linha é:

rho = x*cos(theta) + y*sin(theta)

onde rho é a distância e theta é o ângulo

Então, como você pode ver a, se você olhar para o bin em uma orientação particular você pode descobrir quantas linhas são orientados nesse ângulo. Claro, você vai ter que fazer algum trabalho extra para descobrir quais linhas são orientados nesse ângulo desde que você tem outras 5 linhas por flecha, mas isso não deve ser muito difícil.

Outras dicas

Eu não estou diretamente neste campo, mas gostaria de dizer-lhe para começar por olhar para a detecção de bordas especificamente. Se você tem um fundo em matemática / engenharia dos materiais são bastante fáceis de entender:

Isso pareceu despertar algumas ideias: http://www.cfar.umd.edu/~fer/ cmsc426 / palestras / edge1.ppt

como sempre em visão computacional, o seu primeiro problema é a iluminação imagem e aquisição. Antes de prosseguir, estabelecer a forma como os seus marcadores serão impressos no teto, que sua forma será, o que a luz que será utilizado para vê-los, eo que configuração da câmera você escolheu olhar para os marcadores.

dado um material bom, uma boa luz e uma boa câmera, você pode ter nenhum problema em tudo para processar a imagem. por exemplo, você pode imprimir uma seta cheia em um material retro-refletivo, com uma cauda mais longa do que o seu exemplo, use uma luz colorida e um filtro correspondente na câmara. agora tudo que você tem em sua imagem é setas ... existem muitas outras maneiras de adquirir a imagem que irá ajudá-lo lá.

Uma vez que você tem setas simples, uma análise blob simples (que consistem em computação momentos estatísticos de objetos na imagem) vai lhe dar um monte de informações: cada seta devem ter valores quase iguais para os 7 hu momentos, que permite para filtrar objetos de forma eficiente, também a orientação calculado a partir dos momentos centrais lhe dará o ângulo da seta. análise blob sendo apenas estatística, é extremamente rápido.

Vários sistemas foram desenvolvidos para detectar marcadores e sua orientação robusta:

Se o seu objetivo principal não é para aprender, mas para fazer o trabalho de aplicação, eu sugiro que você use um desses. Não é uma tarefa trivial para um iniciante para robustamente detectar a posição e orientação de um marcador aleatória em uma imagem.

Por outro lado, se você estiver interessado em aprender viril , eu também direcioná-lo para ARToolKit e suas publicações (e suas referências) que explicam como implementar de forma robusta detecção do marcador.

Você vai precisar para explorar detecção de borda, assim que olhar para filtros Hough. Depois que você vai precisar de olhar para classificadores de padrões e extração de características.

Este artigo tem um algoritmo que parece funcionar sem detecção de bordas. Este trecho do livro é mais orientado para o tipo de detecção de símbolo que pretende, depois de ter feito a detecção de bordas.

Uma maneira rigorosa para determinar a orientação de um fotografada adquirido sob geometria projectiva (mais de câmaras) está a utilizar as fortes <> pontos de fuga e <> fortes linhas de fuga . Boa notícia para você: seu marcador pode ser usado para encontrar essa informação! Mais uma boa notícia, sua imagem pode ser retificado , então as colunas de imagem (o eixo y) corresponderá à direção de cima para baixo. Você vai encontrar mais sobre este material no capítulo 8 do livro de Hartley e Zisserman, Multiple Ver Geometria em Computer Vision .

Lembre-se também que, provavelmente, você vai precisar para trabalhar no edição distorção radial , a distorção causada pela lente da câmera. Os outros caras estão certos sobre o problema de detecção de seta: você tem que usar borda detecção e, depois disso, Hough transformar ou modelo de harmonização . Consulte Gonzalez e Woods' livro Digital Image Processing para mais detalhes.

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