FFFF
Skip to content

Latest commit

 

History

39 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Implementação do problema Image Matching

Este repositório foi criado com o intuito de realizar uma nova implementação para resolver o problema do Image Matching, um problema NP-Completo. Abaixo é apresentado um breve resumo do que é o problema em si, para informações mais aprofundadas, verificar o docs/RelatorioParcial.pdf e docs/RelatorioFinal.pdf.

Sumário

Image Matching (IM)

O problema do IM ou Correspondência de Imagem tem sido abordado por diversos autores, a fim de buscar melhores técnicas para uma solução mais rápida e precisa. O problema consiste em analisar duas imagens A e B, onde B é uma transformação geométrica de A. O resultado desta análise deve ser o encontro de características semelhantes entre elas, de forma que, no final, estas correspondências sejam realçadas e apresentadas para facilitar uma determinada investigação. O IM é um componente chave para diversos processos de análise de imagens e é muito importante para inúmeras aplicações, como navegação, orientação, vigilância automática, fotogrametria e visão robótica. Na medicina, por exemplo, é de grande importância para encontrar relações entre diferenças no posicionamento do paciente, modalidades e aquisição de imagens variadas.

Getting Started

Versões

  • Python 3.6.12 (esta foi a versão utilizada, mas funciona para outras versões também)

Organização

Os principais arquivos encontram-se na pasta root. O main.py abre as imagens para dar como entrada ao algoritmo lr2Matching.py, que irá tentar encontrar correspondências entre as imagens. helpers.py contém diversas funções implementadas para serem utilizadas pelo algoritmo, o algoritmo SIFT está implementado no arquivo SIFT.py e o plotGraph.py é uma biblioteca usada para plotar o gráfico de comparação dos tempos em que cada algoritmo tomaram para resolver o problema. Na pasta assets, são organizadas todas as imagens que podem ser utilizadas como entrada do algoritmo. A pasta docs contém os relatórios com uma explicação melhor do problema em si e da proposta deste trabalho. A pasta graph contém o gráfico comparativo gerado pelo algoritmo depois de rodar a main.py. A pasta tests irá conter todos os resultados das correlações em imagens gerados pelos algoritmos para cada caso de teste.

assets/
    apple.jpg
    apple2.jpg
    ...
docs/
    RelatorioParcial.pdf
    RelatorioFinal.pdf
graph/
    comparison.png
tests/
    .gitkeep
    ...
main.py
lrMatching.py
SIFT.py
plotGraph.py
helpers.py

Dependências

Se você não tiver a biblioteca Pillow instalada, para instalar você pode utilizar os seguintes comandos:

$ pip install Pillow --user

Caso seu python3 não seja o padrão, pode ser que você precise usar pip3 ou pip3.6

$ pip3 install Pillow --user

Mais informações aqui na documentação da biblioteca.

SIFT

Para rodar o SIFT foi necessário utilizar algumas exatas versões de alguns pacotes.

$ pip3.6 install opencv-python==3.4.2.16
$ pip3.6 install opencv-contrib-python==3.4.2.16
$ sudo apt-get install python3.6-tk
$ pip3.6 install matplotlib

O código do algoritmo SIFT foi obtido através do site: https://www.analyticsvidhya.com/blog/2019/10/detailed-guide-powerful-sift-technique-image-matching-python/, aqui o funcionamento do algoritmo é explicado brevemente.

Executando os algoritmos

O arquivo principal é o main.py que, por sua vez, irá chamar o algoritmo lr2Matching.py. Para iniciar o primeiro teste, basta rodar o comando:

$ python main.py

ou

$ python3.6 main.py

Ao rodar o algoritmo, ele irá rodar as três implementações e gerar os resultados das correlações em imagens na pasta tests, também irá gerar um gráfico comparativo na pasta graph/ em relação ao tempo de execução que cada algoritmo levou para resolver o problema.

Incluindo suas próprias imagens

Para utilizar os algoritmos com outras imagens de teste, primeiramente você deve incluir as imagens na pasta assets. Depois é só abrir o arquivo main.py e incluir os nomes das imagens nas seguintes linhas:

[...]
srcImages = [
    ('mundi.jpg', 'mundi2.jpg'),
    ('cube.jpg', 'cube2.jpg'),
    ('many.jpg', 'many2.jpg'),
    ('apple.jpg', 'apple2.jpg'),
    ('appleCima.jpg', 'appleCima2.jpg'),
    ('novaImagem.jpg', 'novaImagem2.jpg'), #Novas imagens incluídas
    ]
[...]

Lembrando que as imagens precisam ser de mesmo tamanho e que devem ser quadradas para que todos os algoritmos rodem bem. Também a segunda imagem deve ser uma transformação geométrica da primeira, isto é, o mesmo objeto em um ângulo diferente ou deslocado na imagem. Depois só rodar o algoritmo com python3.6 main.py.

Autores

Conhecimentos

Livros

Artigos

About

Nova implementação do problema NP-Completo Image Matching com Python.

Topics

Resources

Stars

0 stars

Watchers

1 watching

Forks

Contributors

Languages

0