Este projeto implementa um decodificador e codificador (normalizador) de Código de Cadeia (Chain Code) em C++. Ele permite converter entre imagens bidimensionais e representações compactadas canônicas.
- Codificação: Extrai o contorno de uma imagem binária PBM (Portable Bitmap) e gera um arquivo
.ctnnormalizado. - Decodificação: Reconstrói contornos 2D a partir do formato compactado
.ctn, gerando uma imagem PBM de saída.
Em Processamento Digital de Imagens (PDI), o Código de Cadeia é uma técnica clássica para representar fronteiras/contornos de objetos de forma extremamente compacta. Em vez de armazenar todas as coordenadas da fronteira, o algoritmo armazena uma coordenada inicial e uma sequência de direções de deslocamento para os pixels subsequentes.
Este decodificador utiliza a conectividade 8-direcional, cujo mapeamento padrão de direções a partir de um pixel central (x) é:
3 2 1
\ | /
4 - x - 0
/ | \
5 6 7
Cada número de 0 a 7 representa um deslocamento na matriz de pixel em relação à posição atual (onde a origem (0,0) está no canto superior esquerdo).
O código-fonte foi estruturado de forma modular e orientada a objetos na pasta src/:
Image.hpp / .cpp: Responsável pela alocação e manipulação da matriz de pixels e leitura segura de arquivos.pbm(com tratamento para quebras de linha no Windows/Linux).Encoder.hpp / .cpp: Lógica de localização do ponto inicial, rastreamento de contornos (chain generation) e normalização canônica para encontrar a menor sequência.Decoder.hpp / .cpp: Descompactação da cadeia hexadecimal para gerar o caminho de pixels ativo.Common.hpp: Estruturas compartilhadas (coordenadas bidimensionais e configuração da vizinhança de deslocamento).main.cpp: Ponto de entrada que disponibiliza uma Interface de Linha de Comandos (CLI) simplificada, gerando os nomes dos arquivos de saída automaticamente.
O projeto inclui um Makefile configurado para ser totalmente multiplataforma (Windows/Linux/macOS).
- Compilador
g++(com suporte C++17). - Ferramenta
make(oumingw32-makeno Windows).
Para gerar o executável decoder (ou decoder.exe no Windows) dentro da pasta build/:
- Windows (MSYS2/MinGW):
mingw32-make - Linux / macOS:
make
Compila (se necessário) e roda sequencialmente o decodificador e o codificador com os dados de exemplo da pasta data/:
- Windows:
mingw32-make run - Linux / macOS:
make run
O programa agora utiliza geração automática do arquivo de saída. O arquivo processado será salvo automaticamente no mesmo diretório do arquivo original, acrescentando o sufixo _new.
./build/decoder -d <caminho/arquivo.ctn>Exemplo: ./build/decoder -d data/triangle.ctn -> Gera automaticamente o arquivo data/triangle_new.pbm
./build/decoder -e <caminho/arquivo.pbm>Exemplo: ./build/decoder -e data/square_new.pbm -> Gera automaticamente o arquivo data/square_new_new.ctn
Contém sequencialmente: Dimensões (linhas, colunas), Ponto Inicial (linha, coluna), Quantidade de Pontos, e a Cadeia Hexadecimal de deslocamentos.
7 7
2 1
13
F700124648
Formato ASCII em que 1 representa o contorno ativo (preto) e 0 representa o fundo (branco).
P1
#contour decoding image
7 7
0 0 0 0 0 0 0
0 0 1 1 1 1 0
0 1 0 0 1 0 0
0 0 1 0 1 0 0
...