{"id":24461590,"url":"https://github.com/julianazambon/programming2-imageprocessing","last_synced_at":"2025-03-14T10:09:10.172Z","repository":{"id":257683265,"uuid":"859023822","full_name":"JulianaZambon/programming2-ImageProcessing","owner":"JulianaZambon","description":"Use of advanced techniques for software development. Practices for medium and high complexity software development projects.","archived":false,"fork":false,"pushed_at":"2024-10-18T16:11:09.000Z","size":21496,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-03-14T10:09:04.915Z","etag":null,"topics":["comparacao-de-imagens","lbp","pgm","processamento-de-imagens"],"latest_commit_sha":null,"homepage":"","language":"C","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/JulianaZambon.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-09-18T00:13:23.000Z","updated_at":"2024-10-31T21:18:55.000Z","dependencies_parsed_at":"2024-10-19T17:51:22.612Z","dependency_job_id":"56404d47-01a3-44af-b601-1dfd016c88f3","html_url":"https://github.com/JulianaZambon/programming2-ImageProcessing","commit_stats":null,"previous_names":["julianazambon/programming2","julianazambon/programming2-imageprocessing"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JulianaZambon%2Fprogramming2-ImageProcessing","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JulianaZambon%2Fprogramming2-ImageProcessing/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JulianaZambon%2Fprogramming2-ImageProcessing/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JulianaZambon%2Fprogramming2-ImageProcessing/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/JulianaZambon","download_url":"https://codeload.github.com/JulianaZambon/programming2-ImageProcessing/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":243558479,"owners_count":20310573,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["comparacao-de-imagens","lbp","pgm","processamento-de-imagens"],"created_at":"2025-01-21T04:20:18.786Z","updated_at":"2025-03-14T10:09:10.164Z","avatar_url":"https://github.com/JulianaZambon.png","language":"C","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Programação II (CI1002) - Trabalho Prático 01: Estratégias de Comparação de Imagens\n\n**Autora:** Juliana Zambon (jz22), GRR20224168\n\nEste repositório contém o código desenvolvido para o Trabalho Prático 01 da disciplina **CI1002 - Programação II**,\noferecida pelo Departamento de Informática da Universidade Federal do Paraná (UFPR).\n\n## Descrição\n\nO objetivo deste trabalho é implementar um programa em C capaz de comparar uma imagem de teste com um conjunto de\nimagens de referência e identificar a imagem mais similar utilizando a **Distância Euclidiana**.\nAlém disso, o programa gera uma imagem baseada na técnica **Local Binary Pattern (LBP)**.\n\n## Funcionalidades\n\n- **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.\n\n- **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.\n\n\n## Estrutura\n\nO 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.\n\n## Arquivo Cabeçalho (lib.h)\n\nO 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.\n\n### Estruturas\n\n- **`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.\n  \n  ```c\n  struct imagemPGM {\n      int largura;\n      int altura;\n      int maximo;\n      unsigned char **pixels;\n      char tipo[4];\n  };\n\n- **`struct LBPHistograma`**: Armazena o histograma LBP, que contém a frequência de padrões LBP e o tamanho total da imagem.\n\n    ```c\n    struct LBPHistograma {\n      int histograma[256];\n      double tamanho;\n    };\n\n\n### Funções Principais\nManipulação de Imagens PGM\n\n- **`struct imagemPGM *alocar_imagem()`**: Aloca memória para uma estrutura de imagem PGM.\n- **`void alocar_pixels(struct imagemPGM *img)`**: Aloca a matriz de pixels de acordo com a largura e altura da imagem.\n- **`void ignorar_comentarios(FILE *arquivo)`**: Ignora as linhas de comentário (começam com #) ao ler imagens PGM.\n- **`struct imagemPGM *ler_imagem(FILE *arquivo, struct imagemPGM *img)`**: Lê uma imagem PGM (formatos P2 ou P5) de um arquivo.\n- **`void liberar_imagem(struct imagemPGM *img)`**: Libera a memória alocada para uma imagem PGM.\n\nGeração e Manipulação de LBP\n\n- **`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.\n- **`void gerar_histograma(struct imagemPGM *nova, struct LBPHistograma *lbp_hist, char *arquivo_entrada)`**: Gera o histograma LBP de uma imagem e normaliza o resultado.\n- **`double distancia_euclidiana(struct LBPHistograma *hist1, struct LBPHistograma *hist2)`**: Calcula a distância euclidiana entre dois histogramas LBP.\n\nComparação de Imagens\n\n- **`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.\n- **`void ler_diretorio(char *nome_diretorio)`**: Lê o conteúdo de um diretório e retorna uma lista de arquivos de imagem PGM.\n\nFormato de Imagens Suportado\n\nA 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.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjulianazambon%2Fprogramming2-imageprocessing","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjulianazambon%2Fprogramming2-imageprocessing","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjulianazambon%2Fprogramming2-imageprocessing/lists"}