# 📖 README - TRABALHO 1, PROG2 > Este projeto implementa um sistema para processamento de imagens usando o método Local Binary Patterns (LBP). O sistema é capaz de calcular histogramas LBP, comparar imagens e gerar imagens LBP a partir de imagens de entrada. Abaixo está a descrição da estrutura do programa e dos arquivos que o compõem. # 💻 1. Estrutura do Programa * ### LBP.c : Contém a função principal do programa e gerencia a lógica de execução. * ### leitura.c : Contém funções para leitura e escrita de arquivos de imagem no formato PGM e de arquivos LBP. * ### operações.c : Implementa funções relacionadas ao cálculo de LBP, histogramas e manipulação de imagens. * ### processamento.c : Contém a lógica de processamento de imagem, incluindo a geração de histogramas LBP. * ### LBP.h : Cabeçalho que declara as funções implementadas em LBP.c e outros arquivos. * ### Makefile : Script para compilar o programa. # 💻 2. Descrição dos Arquivos ## 2.1 LBP.c * ### Gerencia a execução com base nos argumentos fornecidos na linha de comando. Verifica se os argumentos estão corretos para encontrar a imagem mais similar ou para verificar a imagem de entrada. Dependendo da condição atendida, chama as funções achar_imagem_similar ou verificar_pgm. O programa termina com return 0, indicando uma execução bem-sucedida. ## 2.2 leitura.c ### Função ler_cabeçalho * ### A função ler_cabeçalho é responsável por ler o cabeçalho de uma imagem PGM. Ela recebe um ponteiro para o arquivo de entrada e variáveis para armazenar informações como o número mágico (tipo da imagem), largura, altura e valor máximo dos pixels. O processo é realizado da seguinte forma: ### Função ignorar_comentarios * ### A função ignorar_comentarios lê o arquivo de entrada e ignora linhas de comentários que começam com #. Quando encontra um caractere que não é #, usa ungetc para devolver o caractere ao fluxo, permitindo que a leitura continue normalmente. ### Função ler_p5 * ### A função ler_p5 lê os dados da imagem em formato P5 (imagem binária). Ela recebe o arquivo de entrada e um ponteiro para um array que armazena os dados da imagem. Utiliza fread para ler o número total de pixels. ### Função ler_p2 * ### A função ler_p2 lê os dados da imagem em formato P2 (imagem ASCII). Para cada pixel, lê um valor inteiro e o converte para unsigned char, armazenando-o no array correspondente. ### Função salvar_arquivo_lbp * ### A função salvar_arquivo_lbp salva o histograma LBP em um arquivo binário. Ela recebe o nome do arquivo e um ponteiro para o histograma LBP, utilizando fwrite para gravar os dados. Fecha o arquivo após a escrita. ### Função carregar_arquivo_lbp * ### A função carregar_arquivo_lbp carrega um histograma LBP a partir de um arquivo. Se o arquivo não puder ser aberto, retorna 0. Caso contrário, utiliza fread para ler os dados do histograma e retorna 1 se a leitura for bem-sucedida. ## 2.3 operação.c * ### Este conjunto de funções é responsável pela listagem de imagens no formato PGM em um diretório, verificação da existência de arquivos, extração do nome do arquivo a partir de um caminho, e busca de uma imagem similar com base no histograma LBP. ### Função listar_imagem_diretorio * ### A função listar_imagem_diretorio abre um diretório e lista todos os arquivos com a extensão .pgm. ### Função verificar_arquivo_existe * ### A função verificar_arquivo_existe utiliza stat para verificar se um arquivo existe no caminho fornecido. ### Função extrair_nome_arquivo * ### A função extrair_nome_arquivo utiliza strrchr para localizar a última ocorrência do caractere / em um caminho de arquivo. Se encontrado, retorna o nome do arquivo; caso contrário, retorna o caminho completo. ### Função achar_imagem_similar * ### A função achar_imagem_similar procura pela imagem mais similar a uma imagem de entrada em um diretório, utilizando a comparação de histogramas LBP. ### Função verificar_pgm * ### A função verificar_pgm valida se a imagem de entrada possui a extensão .pgm e, se a validação for bem-sucedida, chama a função para gerar a imagem LBP correspondente. ## 2.4 processamento.c * ### Este relatório descreve funções para calcular o LBP de uma imagem, gerar e salvar histogramas LBP, além de manipular arquivos de imagem no formato PGM. ### Função calcular_lbp * ### A função calcular_lbp determina o valor LBP de um pixel específico na imagem.Define um array de deslocamentos para os 8 vizinhos do pixel central. Comparação com o Pixel Central, para cada vizinho, verifica se ele está dentro dos limites da imagem. Se o valor do vizinho for maior ou igual ao do pixel central, acumula um valor que corresponde a uma potência de 2. ### Função calcular_histograma * ### A função calcular_histograma gera o histograma LBP para toda a imagem, Percorre cada pixel, calculando seu valor LBP usando a função calcular_lbp. Incrementa a contagem correspondente no histograma para cada valor LBP encontrado. Normalização: Divide cada entrada do histograma pelo total de pixels, normalizando os valores. ### Função distancia_euclidiana * ### A função distancia_euclidiana calcula a distância Euclidiana entre dois histogramas LBP: ### Função processar_imagem * ### A função processar_imagem carrega uma imagem, calcula e salva seu histograma LBP Tenta carregar o histograma LBP de um arquivo. Se o histograma não estiver disponível, lê o cabeçalho da imagem e os dados dos pixels. Chama calcular_histograma para gerar o histograma a partir dos dados da imagem. Salva o histograma em um arquivo para uso futuro. ### Função gerar_imagem_lbp * ### A função gerar_imagem_lbp cria uma nova imagem LBP a partir de uma imagem de entrada Lê a imagem de entrada e seus dados. Cálculo do LBP: Para cada pixel, calcula seu valor LBP e armazena na nova imagem. Salva a imagem LBP gerada no formato P5 ou P2, dependendo do formato da imagem de entrada. ### Funções salvar_imagem_p5 e salvar_imagem_p2 * ### Essas funções salvam os dados da imagem LBP em arquivos no formato P5 e P2, respectivamente. Elas escrevem o cabeçalho correto e os dados da imagem nos arquivos de saída.