Correlação Cruzada Normalizada - Onde Está o Wally?


Durante minha infância eu comprei uma coleção de revistas do "Onde Está o Wally". Era um jogo muito legal, onde a gente observava uma imagem confusa e tinha que descobrir onde ficava o personagem mostrado acima. Era uma tarefa difícil, existia muitas figuras semelhantes à ele e geralmente ele ficava escondido no lugar que você menos imaginava. 

Para nossa sorte, ou não, hoje existe a visão computacional que é capaz de encontrá-lo de forma automática. Para isso existem muitos métodos, mas o que eu gostaria de abordar é o método da Correlação Cruzada Normalizada, que se trata de uma relação de similaridade entre dois sinais em função de um atraso aplicado a um deles. Usamos isso quando temos que encontrar algo em uma imagem com algo que já temos. Observe a figura abaixo:


Temos uma imagem e um recorte da mesma ao lado. Utilizando o Matlab é possível encontrar o pedaço recortado através desse método matemático. Ao aplicar a função, esta retorna uma matriz com os coeficientes dessa correlação. Através de um histograma podemos ver o resultado dessa ação, como mostra a imagem abaixo. O valor de pico indica o local onde houve a maior similaridade da imagem, assim podemos encontrar a localização exata do pedaço da imagem recortada:


Voltando ao nosso caso "onde está o Wally?" tente encontrá-lo na figura abaixo e depois vamos utilziar a tecnologia da visão computacional para fazer a mesma tarefa:


O Wally, como vocês já sabem é este personagem abaixo:


Então? Quanto tempo você gastou? Acha que o computador pode fazer melhor? Vamos ao Matlab agora para verificar isso! Aplicando a função C = normxcorr2(template,img) temos uma matriz C que vai nos devolver uma outra matriz, onde a posição do seu maior valor corresponde a posição do Wally. Observe a figura abaixo e veja onde o ponto mais luminoso se encontra:



Esse ponto corresponde ao maior valor da matriz, logo, escrevendo um código para circular essa posição na figura original podemos encontrá-lo fácilmente em milésimos de segundos, como mostrado a seguir:


Para entender melhor o conceito de correlação cruzada normalizada é preciso um maior conhecimento na área de processamento de sinais. Para maiores informações não hesite em perguntar, acesse também os links na área de Fontes Utilizadas. :D

Fontes Utilizadas



  • OPENCV. 2018. Último acesso: 30 jul. 2018. Disponível em:<https://docs.opencv.org/2.4/doc/tutorials/imgproc/histograms/template_matching/template_matching.html>.
  • MATLAB. 2018. Último acesso: 30 jul. 2018. Disponível em: <https://www.mathworks.com/products/computer-vision.html>.
  • WIKIPÉDIA. 2018. Último acesso: 30 jul. 2018. Disponível em: <https://pt.wikipedia.org/wiki/Rela%C3%A7%C3%A3o_cruzada>.



  • Comments

    Post a Comment