https://github.com/julianazambon/programming2-imageprocessing
Use of advanced techniques for software development. Practices for medium and high complexity software development projects.
https://github.com/julianazambon/programming2-imageprocessing
comparacao-de-imagens lbp pgm processamento-de-imagens
Last synced: 9 months ago
JSON representation
Use of advanced techniques for software development. Practices for medium and high complexity software development projects.
- Host: GitHub
- URL: https://github.com/julianazambon/programming2-imageprocessing
- Owner: JulianaZambon
- Created: 2024-09-18T00:13:23.000Z (over 1 year ago)
- Default Branch: main
- Last Pushed: 2024-10-18T16:11:09.000Z (about 1 year ago)
- Last Synced: 2025-03-14T10:09:04.915Z (9 months ago)
- Topics: comparacao-de-imagens, lbp, pgm, processamento-de-imagens
- Language: C
- Homepage:
- Size: 20.5 MB
- Stars: 1
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# Programação II (CI1002) - Trabalho Prático 01: Estratégias de Comparação de Imagens
**Autora:** Juliana Zambon (jz22), GRR20224168
Este repositório contém o código desenvolvido para o Trabalho Prático 01 da disciplina **CI1002 - Programação II**,
oferecida pelo Departamento de Informática da Universidade Federal do Paraná (UFPR).
## Descrição
O objetivo deste trabalho é implementar um programa em C capaz de comparar uma imagem de teste com um conjunto de
imagens de referência e identificar a imagem mais similar utilizando a **Distância Euclidiana**.
Além disso, o programa gera uma imagem baseada na técnica **Local Binary Pattern (LBP)**.
## Funcionalidades
- **Comparação de Imagens:** O programa realiza a comparação entre a imagem de teste e todas as imagens da base de referência, identificando e retornando a imagem mais similar com base na menor distância Euclidiana. Para isso, utilizamos o histograma LBP (Local Binary Pattern), que é uma representação eficiente para descrever a textura de uma imagem. Como os histogramas podem ser representados por vetores, a comparação entre duas imagens se dá através do cálculo da distância entre esses vetores, sendo a distância Euclidiana uma das abordagens mais utilizadas pela sua simplicidade e precisão.
- **Geração de Imagem LBP:** Além da comparação, o programa também gera a imagem LBP correspondente à imagem de teste. A transformação LBP é aplicada pixel a pixel, destacando padrões locais de textura, o que facilita a análise e a comparação entre diferentes imagens.
## Estrutura
O código-fonte está estruturado em arquivos `.c` e `.h` que agrupam as funcionalidades, sendo `lbp.c` o arquivo principal de aplicação, `lib.c` o arquivo de implementação, e `lib.h` o arquivo de cabeçalho.
## Arquivo Cabeçalho (lib.h)
O arquivo `lib.h` contém as estruturas e protótipos de funções necessárias para o processamento de imagens no formato PGM e para o cálculo do histograma LBP. Ele define as funções responsáveis por ler, manipular e comparar as imagens, bem como gerar o vetor LBP e realizar as operações relacionadas à distância Euclidiana.
### Estruturas
- **`struct imagemPGM`**: Armazena as informações básicas de uma imagem PGM, incluindo largura, altura, valor máximo de cinza e a matriz de pixels.
```c
struct imagemPGM {
int largura;
int altura;
int maximo;
unsigned char **pixels;
char tipo[4];
};
- **`struct LBPHistograma`**: Armazena o histograma LBP, que contém a frequência de padrões LBP e o tamanho total da imagem.
```c
struct LBPHistograma {
int histograma[256];
double tamanho;
};
### Funções Principais
Manipulação de Imagens PGM
- **`struct imagemPGM *alocar_imagem()`**: Aloca memória para uma estrutura de imagem PGM.
- **`void alocar_pixels(struct imagemPGM *img)`**: Aloca a matriz de pixels de acordo com a largura e altura da imagem.
- **`void ignorar_comentarios(FILE *arquivo)`**: Ignora as linhas de comentário (começam com #) ao ler imagens PGM.
- **`struct imagemPGM *ler_imagem(FILE *arquivo, struct imagemPGM *img)`**: Lê uma imagem PGM (formatos P2 ou P5) de um arquivo.
- **`void liberar_imagem(struct imagemPGM *img)`**: Libera a memória alocada para uma imagem PGM.
Geração e Manipulação de LBP
- **`void gerar_lbp(struct imagemPGM *img, struct imagemPGM *nova)`**: Gera uma imagem LBP a partir da imagem original, removendo as bordas durante a convolução.
- **`void gerar_histograma(struct imagemPGM *nova, struct LBPHistograma *lbp_hist, char *arquivo_entrada)`**: Gera o histograma LBP de uma imagem e normaliza o resultado.
- **`double distancia_euclidiana(struct LBPHistograma *hist1, struct LBPHistograma *hist2)`**: Calcula a distância euclidiana entre dois histogramas LBP.
Comparação de Imagens
- **`void encontrar_imagem_similar(char *diretorio, struct LBPHistograma *histograma_teste, double *distancia, char menor_distancia[256])`**: Compara uma imagem de teste com todas as imagens da base de referência, exibindo a imagem mais similar e a distância euclidiana.
- **`void ler_diretorio(char *nome_diretorio)`**: Lê o conteúdo de um diretório e retorna uma lista de arquivos de imagem PGM.
Formato de Imagens Suportado
A biblioteca trabalha com imagens PGM nos formatos P2 (ASCII) e P5 (binário). A função **`gerar_imagem_saida`** permite gerar a imagem de saída no mesmo formato da imagem de entrada.