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.
HH
x =HX
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.
H
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.