Sistema de manipulação de imagens desenvolvido na cadeira de PDI
Uma imagem digital RGB é formada por três camadas de cor: vermelho (R), verde (G) e azul (B).
Cada pixel contém três valores inteiros (um por canal) no intervalo [0, 255].
- Cada canal tem 8 bits (256 níveis); juntos totalizam 24 bits/pixel.
- Exemplo de pixel:
(R=120, G=200, B=50). - Até 16,7 milhões de cores (256³).
A correlação 2D aplica uma máscara (kernel) sobre a imagem, combinando valores de vizinhança para cada pixel.
Fórmula (por canal):
y(i, j) = Σ(u=0..m-1) Σ(v=0..n-1) [ x(i+u, j+v) · h(u, v) ] + biasx(i, j): valor original do pixel.h(u, v): valor da máscara na posição(u, v).m × n: dimensões do kernel.bias: deslocamento inteiro entre-255e255(ajusta brilho).
- Identidade:
f(x) = x(mantém o valor calculado). - ReLU:
f(x) = max(0, x)(trunca valores negativos, útil para realçar bordas).
- Suaviza a imagem (reduz ruído) com borramento suave.
- Kernel aproxima uma distribuição Gaussiana bidimensional.
- Máscaras com valores iguais; realizam média na vizinhança.
Box 1×10: suavização horizontal;Box 10×1: vertical;Box 10×10: média em bloco grande (borramento forte).
- Detectam bordas (gradientes de intensidade).
- Sobel Horizontal realça mudanças verticais (bordas horizontais).
- Sobel Vertical realça mudanças horizontais (bordas verticais).
Sobel Vertical (Sx):
| -1 | 0 | 1 |
| -2 | 0 | 2 |
| -1 | 0 | 1 |
Sobel Horizontal (Sy):
| -1 | -2 | -1 |
| 0 | 0 | 0 |
| 1 | 2 | 1 |
- Aplicar valor absoluto à resposta (remove negativos).
- Aplicar expansão de histograma para
[0, 255](maximiza contraste das bordas).
Redistribui níveis de intensidade para melhorar o contraste. Baseia-se no histograma e na sua CDF (função de distribuição acumulada).
Passos:
- Calcular o histograma (contagem por intensidade).
- Calcular a CDF (soma acumulada do histograma).
- Aplicar transformação:
T(r) = round( ((L - 1) / RC) * Σ(k=0..r) n_k )L = 256(níveis de intensidade).RC= total de pixels (linhas × colunas).n_k= contagem de pixels com intensidadek.
Resultado: os níveis passam a ocupar melhor a faixa [0, 255].
Em imagens com iluminação desigual, a equalização global pode falhar. Dividir a imagem em blocos m × n e equalizar cada um separadamente adapta o contraste às diferentes regiões.
- Obter
r_miner_maxdo bloco equalizado. - Aplicar a expansão linear para todo o bloco:
s = ((r - r_min) / (r_max - r_min)) * 255
Isso distribui os níveis do bloco por toda a faixa [0, 255], garantindo contraste máximo local.
- Regiões escuras tornam-se mais claras.
- Regiões claras ganham contraste.
- Detalhes e bordas em áreas pouco iluminadas ficam mais visíveis.
- Abrir, exibir, manipular e salvar imagens RGB (24 bits/pixel, 8 bits por canal).
- Correlação 2D m × n com bias (−255 a 255) e ativação (Identidade ou ReLU).
- Leitura de filtros a partir de arquivo
.txt(máscara, bias, ativação). - Testes com: Gaussiano 5×5, Box 1×10, Box 10×1, Box 10×10, Sobel Horizontal, Sobel Vertical.
- Para Sobel: aplicar |valor| + expansão de histograma para [0,255].
- Equalização seguida de expansão de histograma local (janela m × n) em cada canal R, G e B.