Encontrei contornos em duas imagens com o mesmo objeto e quero encontrar o deslocamento e a rotação desse objeto. Eu tentei com caixas delimitadoras giradas desses contornos e, em seguida, seus ângulos e pontos centrais, mas as rotações das caixas delimitadoras não informam corretamente a rotação do contorno, porque é o mesmo para os ângulos a + 0, a + 90, a + 180 etc. graus. Existe outra maneira boa de encontrar rotação e deslocamento de contornos? Talvez algum uso de casco convexo, defeitos de convexidade? Eu li no Learning OpenCv sobre correspondência de contornos, mas isso não ajudou. Alguém poderia dar um exemplo?
Exemplos:
Eu quero detectar, por exemplo, quadrado rosa e, no segundo caso, caneta. Outros exemplos podem ser quadrados com alguns buracos, estrelas etc. Como eu disse, quero fazer alguma coisa uniwersal. Todas as sugestões são apreciadas porque eu quero testar o maior número possível de métodos.
Respostas:
Você precisa se preocupar com a diferença de escala entre os contornos? Caso contrário, você pode simplesmente encontrar o centróide de cada contorno e calcular o deslocamento subtraindo um do outro. Depois, você pode calcular os eixos principais dos contornos e encontrar o ângulo de rotação entre eles.
Se a escala estiver envolvida, você poderá calcular o fator de escala utilizando a razão dos eixos principais correspondentes.
fonte
Se você não precisar se preocupar com escala ou códigos de cadeia de distorções projetivas, pode ajudar aqui. Se você tiver códigos de cadeia com aproximadamente a mesma forma e a mesma escala, poderá encontrar a tradução com correlação de fase FFT unidimensional http://en.wikipedia.org/wiki/Phase_correlation
Se você precisar levar em consideração a distorção projetiva, considere também a possibilidade de usar pontos de recurso (como cantos) em vez de contornos.
fonte
Na pergunta que você diz
mas receio que seja muito difícil encontrar uma solução "universal" para o problema.
Você pode comprar um software localizador de padrões comercial disponível e integrá-lo ao seu aplicativo, geralmente eles apresentam um desempenho muito bom para uma ampla variedade de aplicativos. Apenas para se ter uma ideia, este é o manual de referência para esse produto http://www.lmi3d.com/sites/default/files/support/4.2.0.70-hexsight_user_guide.pdf
Além disso, você pode desenvolver uma solução ad hoc para um caso específico (por exemplo, a caneta na sua imagem).
Caso contrário, você poderá estudar muito o problema, partindo dos fundamentos muito básicos enraizados na geometria computacional ( http://www.cs.sunysb.edu/~algorith/files/shape-similarity.shtml ), onde seus "contornos" são chamados "polígono", lendo coisas como:
M. de Berg, O. Devillers, M. Kreveld, O. Schwarzkopf e M. Teillaud. Calculando a sobreposição máxima de dois polígonos convexos em traduções. Teórico Computer Science, 31: 613-628, 1998.
e
H. Ahn, O. Cheong, C. Park, C. Shin e A. Vigneron. Maximizando a sobreposição de dois conjuntos convexos planares sob movimentos rígidos. Geometria Computacional: Teoria e Aplicações, 37: 3–15, 2007.
e terminando com "Reconhecimento hierárquico em tempo real de objetos compostos em imagens", de Markus Ulrich, que colabora com o MVTec , outra empresa de software que vende ferramentas de software de reconhecimento de objetos.
fonte