Skip to content

FlaviaMarcella/String_Code_Decoder

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

11 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

String Code Decoder (Decodificador de Código de Cadeia)

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 .ctn normalizado.
  • Decodificação: Reconstrói contornos 2D a partir do formato compactado .ctn, gerando uma imagem PBM de saída.

📚 Introdução Teórica

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).


📂 Arquitetura do Projeto

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.

🛠️ Compilação e Execução

O projeto inclui um Makefile configurado para ser totalmente multiplataforma (Windows/Linux/macOS).

Pré-requisitos

  • Compilador g++ (com suporte C++17).
  • Ferramenta make (ou mingw32-make no Windows).

1. Compilar o Projeto

Para gerar o executável decoder (ou decoder.exe no Windows) dentro da pasta build/:

  • Windows (MSYS2/MinGW): mingw32-make
  • Linux / macOS: make

2. Executar o Teste Padrão Automatizado

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

🚀 Como Utilizar (Interface de Comandos Simplificada)

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.

Decodificar (Converter .ctn para .pbm)

./build/decoder -d <caminho/arquivo.ctn>

Exemplo: ./build/decoder -d data/triangle.ctn -> Gera automaticamente o arquivo data/triangle_new.pbm

Codificar (Converter .pbm para .ctn)

./build/decoder -e <caminho/arquivo.pbm>

Exemplo: ./build/decoder -e data/square_new.pbm -> Gera automaticamente o arquivo data/square_new_new.ctn

📥 Formatos de Arquivo

O Arquivo .ctn (Código de Cadeia)

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

O Arquivo .pbm (Portable Bitmap)

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 
...

About

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.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors