Bem, isso pode mostrar que eu não participei da aula de processamento de imagens.
Eu tenho este modelo para corresponder a um objeto em imagens. Mas o objeto real nas imagens, por exemplo, não se parece com isso, mas a segunda imagem. Quais operações eu preciso executar para que imagens como a segunda estejam prontas para a correspondência de modelos? Para sua informação, a terceira imagem mostra uma correspondência ideal.
Em outra ideia, encaixei o modelo na imagem. Ou seja, dou quatro coordenadas de canto na imagem para coincidir com as do modelo. Em seguida, ele calculará uma maneira de ajustar o modelo à área.
ATUALIZAÇÃO: Problema resolvido. Graças à resposta que selecionei abaixo. Consegui aplicar meu modelo na imagem com sucesso. A última imagem mostra o resultado.
fonte
Respostas:
A imagem de amostra que você postou tem uma perspectiva relativamente forte (não é gerada diretamente da direção da superfície normal), o que pode causar problemas com as técnicas de correspondência de modelos que usam o processamento de blocos. Suponho que você precise capturar a imagem com forte perspectiva; portanto, a primeira coisa que queremos fazer é estimar a transformação da imagem, que removerá a projeção em perspectiva e resultará na imagem retificada ("imagem direta").
Corrigindo a projeção em perspectiva quando a forma é conhecida
O objetivo final do pré-processamento é encontrar cantos desse retângulo cinza que é o plano de fundo da cartela de cores. Comecei simplesmente limitando com valor constante. A literatura / web tem muitas informações sobre como fazer limiares quando a imagem tem iluminação irregular, mas se você puder, tente corrigir a configuração da imagem de forma que a iluminação seja relativamente uniforme.
Eu assumi que a tabela de cores ocupa uma parte muito grande da tela, portanto é provavelmente a maior região contínua da imagem. Existem muitas funções de rotulagem em preto e branco (MATLABs bwlabel, IPPs LabelMarkers, OpenCV possui biblioteca externa cvblob) que fornecerão a cada região conectada distinta seu próprio índice. Após a identificação, você pode calcular as áreas dos componentes conectados usando um histograma e, em seguida, escolher o componente com a maior área.
Geralmente, é uma boa idéia preencher os componentes de forma que o componente não tenha furos, isso reduz o número de pixels da aresta.
Agora podemos usar operadores de localização de arestas (usei o método baseado em gradiente, mas você também pode rastrear a aresta seguindo os pixels brancos que estão conectados aos pixels pretos) para obter os pixels pertencentes ao pensionista.
Como o objeto que nos interessa é o retângulo, ajustei quatro linhas nos pixels da aresta usando um ajuste de linha robusto (RANSAC). Depois de encontrar uma nova linha, removi todos os pontos próximos à linha encontrada, o que força as operações de ajuste subsequentes a retornar outras arestas do objeto. Finalmente, quando todas as arestas foram encontradas, calculei todas as interseções possíveis entre o conjunto de linhas. Do conjunto de pontos resultantes, removi todos os pontos fora da imagem.
Essa matriz de transformação pode ser usada para transformar a imagem original, de modo que a cartela de cores seja gerada diretamente da direção da superfície normal.
Se ainda queremos fazer alguma correspondência de modelos, podemos usar qualquer método decente de correspondência de modelos. O método não precisa ser invariável em rotação / escala, pois a imagem já está retificada.
fonte
Comece com a detecção de borda. Em seguida, use a transformação Hough para detectar linhas retas. Então descubra quais linhas são paralelas e quais devem ser perpendiculares. Em seguida, estime a transformação projetiva para que as linhas que devem ser perpendiculares sejam perpendiculares.
fonte