Transformações em Imagens Matriciais

Uma imagem bitmap pode ser utilizada para testar os algoritmos e códigos de exemplos fornecidos neste material:


Figura 1.Imagem Original.

Cor

A cor é composta de 3 componentes: o vermelho, o verde e o azul. É comum identificar a cor pelos elementos RGB (iniciais do inglês referentes às componentes de cor Red, Gree, Blue).

O código a seguir apresenta uma definição de classe referente a Cor, com seus três componentes básicos

class Cor {
	int vermelho;
	int verde;
	int azul;
}
Filtrando uma Única Cor

Em uma imagem matricial, podemos filtrar uma única cor do conjunto de cores RGB. Neste algoritmo de exemplo, estamos apenas pegando a cor vermelha da imagem.


Figura 2.Somente com a componente cor vermelha.

imagemOrigem
imagemDestino

Para y = 0; até imagemOrigem.altura fazer
	Para x = 0 até imagemOrigem.largura fazer
		cor = pegarPixel(imagemOrigem, x, y)
		cor.verde = 0
		cor.azul = 0
		pintarPixel(imagemDestino, x, y, cor)
	Fim para
Fim para

Você pode fazer o download do código em C referente ao algoritmo acima, assim como um código que separa as três cores, gerando três novas images filtradas.

Alterando o Tamanho de uma Imagem

Uma imagem pode ser redimensionada, gerando uma nova imagem de tamanho diferente da original. No exemplo a seguir, a imagem é reduzida para sua metade, tanto em largura como em sua altura.


Figura 3.A Metade do tamanho da imagem original.

imagemOrigem
imagemDestino
imagemDestino.tamanho(imagemOrigem.largura / 2, imagemOrigem.altura / 2)

Para y = 0; até imagemDestino.altura fazer
	Para x = 0 até imagemDestino.largura fazer
		cor = pegarPixel(imagemOrigem, x * 2, y * 2)
		pintarPixel(imagemDestino, x, y, cor)
	Fim para
Fim para

Aqui pode ser feito o download do código em C do redimensionamento da imagem, gerando uma nova imagem reduzida.

Line Art

Para criar o efeito de Line Art de uma imagem, devemos primeiramente transformar as cores da imagem em tons de cinza e, depois modificar suas cores. Neste exemplo, caso a cor resultante for menor que 127, então a cor se transformará em 0 (preto), senão ela se transformará em 255 (branco).


Figura 4.Line Art.

imagemOrigem
imagemDestino

Para y = 0; até imagemOrigem.altura fazer
	Para x = 0 até imagemOrigem.largura fazer
		cor = cinza(pegarPixel(imagemOrigem, x * 2, y * 2))
		Se cor < 127 então
			cor = 0
		senão
			cor = 255
		pintarPixel(imagemDestino, x, y, cor);
	Fim para
Fim para

Aqui você pode fazer o download do código em C do exemplo apresentado acima, para transformar a imagem em line art.

Detecção de Bordas

O algoritmo de filtro a seguir é proposto para detectar boradas em imagens, baseado no algoritmo de detecção de bordas de Saulo P. Zambiasi. Este algoritmo transforma a imagem em lineart e compara se seus pixeis (x,y) são diferentes dos pixeis (x+1, y+1).


Figura 5.Algoritmo de detecção de bordas.

imagemOrigem
imagemDestino

Para y = 0; até imagemOrigem.altura fazer
	Para x = 0 até imagemOrigem.largura fazer
		corA = lineart(pegarPixel(imagemOrigem, x, y);
		corA = lineart(pegarPixel(imagemOrigem, x+1, y+1);
		se corA = corB então
			cor = 255;
		senao
			cor = 0;
		pintarPixel(imagemDestino, x, y, cor);
	Fim para
Fim para

Aqui você pode fazer o download do código em C do exemplo apresentado acima, para detectar as bordas da imagem.

[voltar]