Para Todos os exercícios abaixo, utilize o mesmo framework (que já
funciobou!!!) para manipulação de imagens em OpenGL utilizado na aula
anterior para conversão em tons de cinza e cálculo das bordas.
Existem alguma inagens com baixo contraste que podem ser baixadas na
página da disciplina
Exercício 1: Algoritmo de Segmentação Iterativa:
// Cálculo da Media Inicial
Soma = 0; Total = 0;
para cada pixel(x,y) faça
val = (r + g + b)/3;
Soma = Soma + val;
Total = Total + 1;
fimpara
MediaAtual = Soma/Total;
MadiaAnterior = 0; iterMax = 10; iter = 0;
Enquanto (abs( MediaAtual – MeadiAnterior ) > Limiar) OU (iter < iterMax)
{
soma1 = 0; total1 = 0; soma2 = 0; tatal2 = 0;
para cada pixel(x,y) faça
{
val = (r + g + b)/3;
se val < MediaAtual
soma1 = soma1 + val; total1 = total1 + 1;
senão
soma2 = soma2 + val; total2 = total2 + 1;
}
MediaAnterior = MediaAtual;
MediaAtual = ((soma1/total1) + (soma2/total2))/2;
iter = iter + 1;
}
// Segmentação binária
para cada pixel(x,y) faça
{
val = (r + g + b)/3;
se val < MediaAtual
pixel(x,y) = 0;
senão
pixel(x,y) = 255;
}
Desafio!!! Como poderia ser feita uma segmentação não-binária? com 4 ou
8 tons de cinza finais; ao invés de somente 255 ou 0?
Exercício 2: Melhoramento de Imagem (contraste)
// defina uma função de melhoramento com C constante entre 0 e 255, e y Real
G(x,y) = C * pixel(x,y)^y
para cada pixel(x,y) faça
val = (r + g + b)/3;
NovaImagem(x,y) = floor((C * val ^y) + 0.5);
fimpara
// Responda: o que acontece com a imagem se C = 1 e y é um valor próximo de
zero?
// Responda: o que acontece com a imagem se C = 1
maior que 1?
e y é um valor próximo
// Responda: o que acontece com a imagem se C = 1 e y = 1.0?
Exercício 2:
Histogrâmica
Melhoramento do Contraste
// cálculo do histograma
// defina um vetor para o histograma
float* H = new float[256];
// garante que o histograma não possui resíduos
para i=0 até 255 faça
H[i] = 0;
fim para
baseado em Equalização
total = 0;
para cada pixel(x,y) faça
val = (r + g + b)/3;
H[val] = H[val] + 1;
total = total + 1;
fimpara
// calcula as probabilidades de cada pixel
para i=0 até 255 faça
H[i] = H[i]/total;
fim para
Plote o histograma no Excel para observar seu comportamento
// calcula do histograma cumulativo
para i=1 até 255 faça
H[i] = H[i] + H[i-1];
fim para
// aplica a equalização na imagem utilizando o Histograma cumulativo
para cada pixel(x,y) faça
val = (r+g+b)/3;
NovaImagem(x,y) = floor( (H[val] * 255) + 0.5 );
fimpara
// cálculo de novo histograma
// garante que o histograma não possui resíduos
para i=0 até 255 faça
H[i] = 0;
fim para
total = 0;
para cada pixel(x,y) da NovaImagem faça
val = (r + g + b)/3;
H[val] = H[val] + 1;
total = total + 1;
fimpara
// calcula as probabilidades de cada pixel
para i=0 até 255 faça
H[i] = H[i]/total;
fim para
Plote no Exel o novo Histograma e tire suas próprias conclusões a respeito das
distribuições histogrâmicas e o constraste da imagem; por que melhorou o
contraste?
Download

Estrutura de um Programa OpenGL/GLUT