• Nenhum resultado encontrado

Equalização e modificação de histogramas

N/A
N/A
Protected

Academic year: 2021

Share "Equalização e modificação de histogramas"

Copied!
15
0
0

Texto

(1)

Equalização e modificação

de histogramas

Televisão Digital

2004/2005

Sérgio Ramos Pinho

030503028

(2)

Índice:

Índice

2

Introdução

3

Objectivos

3

Preliminares Teóricos

3

Procedimentos

4

Imagens a Preto e Branco

4

Equalização da Imagem 4

Ajuste de Contraste e Luminosidade 5

Imagens a Cores

7

Conversão de RGB para YCbCr 7

Eliminar Componente Y 8

Eliminar Componente Cb 9

Eliminar Componente Cr 9

Equalização YCbCr 10

Alteração dos niveis do histograma YCbCr 11

Modificação Histogramas YCbCr 11

Equalização RGB 12

Alteração dos niveis do histograma RGB 13

Modificação Histogramas RGB 13

(3)

Introdução:

Neste trabalho vai-se fazer a manipulação de imagens a preto e branco e a cores. A opção cores foi totalmente introduzida face à versão anterior do desenvolvimento deste trabalho, isto é, opções como equalização de histogramas a cores e alteração de contraste de imagens (RGB) são agora possiveis.

O intuito deste trabalho é portanto efectuar um ajuste da imagem para que seja mais agradável, e de certa forma mais cuidada do ponto de vista de quem a vê, e por outro familiarizarmo-nos com o processo de modificação e equalização de histogramas, utilizando as funcionalidades da “toolbox” do MATLAB.

Objectivos:

Os objectivos deste trabalho consistem em desenvolver um programa que obtenha o histograma de uma imagem e que peça ao utilizador os parâmetros para modificar o histograma.

O programa deverá apresentar no ecrân as imagens original e a correspondente ao histograma modificado.

Pretende-se efectuar a manipulação do constraste de imagens a preto-e-branco através da modificação do histograma da imagem, bem como manipular a côr de imagens. Para este segundo caso, devem ser obtidos 3 histogramas distintos para a luminância e para as duas componentes de côr. As imagens a utilizar apresentam-se nos formatos ".tif", ".bmp" ou ".jpg". Uma vez lidas essas imagens para o MatLab, deve efectuar uma mudança do espaço de cores (de RGB para YCbCr) e manipular separadamente os histogramas da luminância e de cada uma das componentes de côr.

Será possível também manipular directamente a imagem RGB, isto é sem a mudança do espaço de cores (de RGB para YCbCr), através da alteração de cada um dos histogramas de cada uma das cores R,G e B.

No fim deverá ser feita uma análise ao tipo de informação contida em cada um das componentes de côr, assim como uma comparação entre os dois casos em que a manipulação é efectuada directamente sobre a imagem RGB e o caso em que existe uma mudança do espaço de cores.

Preliminares teóricos:

Um histograma é um diagrama que representa a frequência de ocorrência dos brilhos de uma imagem, como podemos ver pela imagem. O limite esquerdo do gráfico corresponde ao preto e o lado direito ao branco.

Facilmente concluímos por este histograma, mesmo não sabendo qual a imagem de onde ele foi retirado, a imagem tem uma grande concentração de preto.

Na equalização do histograma, pretende-se que o histograma final da imagem seja o mais constante possível, distribuindo concentrações de

(4)

brilhos como acontece nos gráficos. Deve-se notar que a operação de equalização de histograma só conduziria a histogramas efectivamente constantes se a gama de brilhos fosse contínua e fosse infinito o número de pontos na imagem.

No caso das imagens digitais, a discretização do espaço e dos brilhos não permite que esse resultado seja conseguido, como podemos ver pelos dois histogramas, o inicial e o obtido após uma operação de equalização. Contudo, essa operação é muito usada com o objectivo de efectuar uma normalização da escala de brilhos, obtendo resultados muito satisfatórios.

Procedimentos:

Na tabela seguinte estão representadas todas as funções utilizadas para o desenvolvimento do programa.

Função Descrição da função

imread Permite ler os dados da imagem de um ficheiro imshow Apresenta qualquer imagem no ecrã

imadjust Ajusta os valores de intensidade dos brilhos da imagem histeq Faz a equalizacao do histograma para um número de níveis imhist Apresenta o histograma no ecra

rgb2ycbcr Converte a imagem de RGB para o espaço de cores YCbCr ycbcr2rgb Converte a imagem de YCbCr para RGB

stretchlim Devolve os limites para o ajuste de uma imagem subplot Mostra várias imagens na janela

Imagens a Preto e branco

Equalização do Histograma

Para a equalização do Histograma foi utilizado o seguinte código:

original=imread('einstein.bmp'); equalizada=histeq(original,N_niveis); subplot(2,2,1) imshow(original) title('Imagem Original') subplot(2,2,2) imshow(equalizada) title('Imagem Equalizada') subplot(2,2,3) imhist(original) subplot(2,2,4) imhist(equalizada)

(5)

Como se pode observar a imagem equalizada apresenta um melhor contraste, isso deve-se à equalização do histograma que fez com que ocorresse um espalhamento do histograma ao longo de toda a gama de valores (0 a 255), ficando este mais uniforme. Ajuste de Contraste e Luminosidade

Para ajuste de contraste e luminosidade recorreu-se ao seguinte código:

original=imread('einstein.tif');

modificada=imadjust(original, ,[low_in high_in],[low_out high_out]); subplot(2,2,1) imshow(original) title('Imagem Original') subplot(2,2,2) imshow(modificada) title('Imagem Alterada') subplot(2,2,3) imhist(original) subplot(2,2,4) imhist(modificada)

(6)
(7)

Com a ajuda da função imadjust(Imagem,[low_in high_in],[low_out high_out]) podemos modificar o contraste e a luminosidade alterando os valores de [low_in high_in] e [low_out high_out] na função.

Esses valores têm de ser entre 0 e 1 tanto para a luminosidade como para o contraste. Para o caso da luminosidade aumentamos a mesma se o intervalo de valores for cada vez mais perto de 1 e diminuímos se o intervalo de valores for cada vez mais perto de 0.

Quanto ao contraste verificou-se que se o intervalo de valores tender para valores perto de 1 teremos um aumento de níveis de preto tornando a imagem mais contrastada, se o intervalo de valores tender para valores perto de 0 teremos um aumento de níveis de branco deminuindo o contraste. Para um bom contraste verificou-se que os valores 0.3 e 0.7 eram bons, uma vez que introduzem uma boa uniformidade de valores de preto e branco como podemos ver na imagem seguinte .

Imagens a Cores

Conversão de RGB para YCbCr

Utilizando o seguinte código efectuamos a separação das varias componentes de RGB e de YCbCr e efectuamos a conversão se um espaço de cores para o outro obtendo as seguintes imagens.

rgb_img=imread('unicornio.jpg'); ycbcr_img = rgb2ycbcr(rgb_img); subplot(3,2,2)

imshow(ycbcr_img), title('RBG -> YCbCr') subplot(3,4,6)

(8)

imshow(rgb_img(:,:,1)); title('Componente R') subplot(3,4,7) imshow(rgb_img(:,:,2)); title('Componente G') subplot(3,4,8) imshow(rgb_img(:,:,3)); title('Componente B') subplot(3,4,10) imshow(ycbcr_img(:,:,1)); title('Componente Y') subplot(3,4,11) imshow(ycbcr_img(:,:,2)); title('Componente Cb') subplot(3,4,12) imshow(ycbcr_img(:,:,3)); title('Componente Cr')

A nossa aplicação permite ainda eliminar as varias componentes de YCbCr alterando assim a imagem e convertendo-a para o espaço RGB verificando assim os seus efeitos na imagem.

Eliminando a componente de luminancia Y

Podemos verificar a Luminância assume especial importância na imagem eque neste caso contem a maior parte da informação relevante.

Pode-se também observar que a componente Luminância está distribuída pelas três componentes RGB uma vez que todas elas são afectadas negativamente pela remoção de Y. O olho humano é mais sensível às altas-frequências de luminância, do que às altas-frequências de cor, logo a componente Y assume um papel dominante.

(9)

Eliminando a componente de Cb

Eliminando a componente Cb verifica-se que a imagem em YCbCr fica avermelhada uma vez que eliminamos a componente azul da imagem que é uma das cores importantes nesta imagem. Convertendo-a para RGB obtemos uma imagem amarelada uma vez que só temos informação de cor da componente vermelha e verde.

Eliminando a componente de Cr

Eliminando a componente Cr verifica-se que a imagem em RGB fica esverdiada uma vez que eliminamos a componente vermelha da imagem e que também é importante nesta imagem. Verifica-se que esta imagem tem bastante informação de cor tanto de componente azul como vermelha

(10)

Equalização YCbCr

A equalização YCbCr foi efectuada utilizando o seguinte código:

rgb_img = imread(get(handles.listbox1,'userdata')); ycbcr_img = rgb2ycbcr(rgb_img); igualiza1=histeq(ycbcr_img(:,:,1)); igualiza2=histeq(ycbcr_img(:,:,2)); igualiza3=histeq(ycbcr_img(:,:,3)); subplot(3,4,6) imhist(ycbcr_img(:,:,1));

title('Histograma componente Y') subplot(3,4,7) imhist(ycbcr_img(:,:,2)); title('Histograma componente Cb') subplot(3,4,8) imhist(ycbcr_img(:,:,3)); title('Histograma componente Cr') subplot(3,4,10) imhist(igualiza1);

title('Histograma componente Y eq') subplot(3,4,11)

imhist(igualiza2);

title('Histograma componente Cb eq') subplot(3,4,12)

imhist(igualiza3);

title('Histograma componente Cr eq') ycbcr_img(:,:,1)=igualiza1;

ycbcr_img(:,:,2)=igualiza2; ycbcr_img(:,:,3)=igualiza3; subplot(3,4,3)

imshow(ycbcr_img);

title('Imagem Equalizada YCbCr') rgb_img = ycbcr2rgb(ycbcr_img); subplot(3,4,4)

imshow(rgb_img);

title('Imagem Equalizada RGB')

Para efectuarmos a equalização YCbCr foi necessário separar as varias componentes e depois utilizar a função histeq() para equalizar essas componentes.

Depois voltamos a juntar as varias componentes para obter a imagem em YCbCr de seguida convertemos a mesma para RGB.

(11)

Como podemos ver pelos histogramas equalizados obtivemos um espalhamento, dos níveis de cada componente, mais uniforme, obtendo assim uma imagem com uma maior diversidade de cores e mais intensas do que a original. Alteração dos níveis do histograma YCbCr

A nossa aplicação permite também com a ajuda da função de Matlab histeq(Imagem(:,:,i),Níveis) (com i=1,2,3) alterar o número de níveis de todos os histogramas ou de apenas um, de cada componente para melhor verificar as alterações provocadas na imagem. Para o caso em que não insere o numero de niveis na função histeq() o numero de niveis por default é de 64.

Modificar Histogramas YCbCr Conseguimos ainda introduzir na aplicação uma opção para modificar o histograma colocando os níveis dos histogramas numa determinada zona da gama de valores de 0 a 255 das respectivas componentes.

Isto foi possível usando a função imadjust() e inserindo nessa mesma função dois valores entre 0 e 1 (low_out e high_out), sendo o primeiro mais pequeno que o segundo.

Com esta funcionalidade pretendeu-se verificar que alterando o intervalo de valores dos histogramas de cada componente iríamos obter uma imagem com as cores dessa determinada gama.

(12)

obtivemos histogramas parecidos para as componentes de cor mas diferente para a componente de luminancia, o que da origem a uma imagem parecida com a original mas com um aumento grande da luminancia.

Esse aumento deve-se á concentração dos níveis de luminancia na pequena gama escolhida, que é diferente do histograma da imagem original, sendo esse muito mais uniforme.

Equalização RGB

Para efectuar a equalização RGB foi feita tal como em YCbCr a separação das varias componentes, e depois com a função histeq() do Matlab equalizou-se essas varias componentes.

O código utilizado foi:

rgb_img = imread(‘Imagem’); igualiza1=histeq(rgb_img(:,:,1)); igualiza2=histeq(rgb_img(:,:,2)); igualiza3=histeq(rgb_img(:,:,3)); subplot(3,4,6) imhist(rgb_img(:,:,1)); title('Histograma R Original') subplot(3,4,7) imhist(rgb_img(:,:,2)); title('Histograma G Original') subplot(3,4,8) imhist(rgb_img(:,:,3)); title('Histograma B Original') subplot(3,4,10); imhist(igualiza1); title('Histograma R eq') subplot(3,4,11) imhist(igualiza2); title('Histograma G eq') subplot(3,4,12) imhist(igualiza3); title('Histograma B eq ') rgb_img(:,:,1)=igualiza1; rgb_img(:,:,2)=igualiza2; rgb_img(:,:,3)=igualiza3; subplot(3,2,2) imshow(rgb_img); title('Imagem Equalizada') ;

Como a imagem ‘Unicornio1.jpg’ já tem os histogramas das várias componentes bastante uniformes a imagem que obtemos é bastante parecida com a original, porem na

(13)

imagem vamos obter uma outra com um maior espalhamento espectral dos níveis em cada componente, como podemos ver nas imagens seguintes.

Alteração dos níveis dos Histogramas RGB

Tal como em YCbCr a nossa aplicação também permite a alteração do número de níveis dos histogramas das várias componentes de RGB.

Modificação dos Histogramas RGB

Esta funcionalidade permite alterar luminosidade e o contraste de uma imagem a cores no espaço de cores RGB.

Isto foi possível utilizando a função imadjust(original, ,[low_in high_in],[low_out high_out]), e modificando as variáveis low_in, high_in e low_out ,high_out com valores dentro do intervalo de 0 a 1.

Com isto verificou-se que alterando os valores de low_in, high_in modificamos o contraste e modificando os valores de low_out ,high_out modificamos a luminosidade.

Verificou-se também que alterando os valores da luminosidade vamos limitar a gama de valores possíveis no histograma, e que se essa gama de valores for deslocada para a direita a luminosidade aumenta e diminui em caso contrario.

Em relação ao contraste verificou-se que se os valores de low_out ,high_out tenderem para 1 a imagem fica menos contrastada, se os valores de low_out ,high_out

(14)

tenderem para zero a imagem ficara mais contrastada. Como podemos ver nas imagens seguintes.

Luminosidade:

(15)

Conclusões:

A modificação dos histogramas das imagens a preto e branco permite alterações ao nivel do contraste e da luminosidade. Quando alteramos o histograma, distribuindo o número de níveis por apenas dois valores, observamos que o histograma divide-se virtualmente em dois e tudo o que está acima do valor médio é definido como branco e abaixo como preto. Seguindo este principio podemos concluir que para um número significativo de niveis do histograma conseguimos equaliza-lo, isto é, a todo a gama de cores entre o preto e o branco vai estar presente em números aproximadamente iguais na imagem.

Esta análise pode ser feita da mesma forma para imagens a cores.

A modificação da luminosidade numa imagem pode ser explicado pelo facto da informação do histograma ser concentrada numa banda, com maior ou menor largura consoante a diferença de valores entre o low_out e o high_out. Para uma maior diferença teremos uma maior banda de informação no histograma. Para diminuirmos ou aumentarmos a luminosidade da imagem basta então deslocarmos essa banda no histograma entre o 0 e 255 respectivamente.

O contraste de uma imagem consiste no aumento da intensidade de informação que está presente em cada nível. Se os valores inseridos em low_in e high_in forem próximos de 0 então o contraste será menor, porque os dados do histograma para além de terem sido “amplificados” vão sofrer um deslocamento para esquerda, isto é, para a zona em que a imagem torna-se mais escura. Analisando para o caso em que low_in e high_in são valores próximos de 1, é óbvio que a imagem sofrerá um maior contraste, visto que os dados do histograma são agora deslocados para a direita.

Pode-se concluir a partir das análises feitas que a informação contida na luminância é muito mais relevante para a imagem que informação contida nas várias componentes de cor, quando existe conversão no espaço de cores de RGB para YCbCr, ou seja pequenas alterações nas componentes de cor podem não ser imediatamente perceptíveis como pequenas alterações na luminância o são.

Também se verifica que as alterações feitas no histograma de imagens a Preto e Branco têm uma alteração imediata na imagem resultado.

Ao passar uma imagem de RGB para YCbCr e seguidamente voltar a converte-la para RGB nota-se que existe perda embora muito pouco significativa, isso pode ser verificado fazendo a subtracção das matrizes RGB original com RGB final.

Verificamos então que com a ajuda do MatlLab é muito facil proceder á modificação das imagens utilizando a informação contida nos histogramas das mesmas.

Referências

Documentos relacionados

12 ALFREDO CARLOS TAVARES ABREU 27569 CEMG SANTO TIRSO 13 ANTONIO SILVA MARQUES TRAQUEIA 20793 BBPI MURTOSA 14 PEDRO ALEXANDRE RODRIGUES SILVA CARDOSO 37082 FCSFAC PORTO 15

•   O  material  a  seguir  consiste  de  adaptações  e  extensões  dos  originais  gentilmente  cedidos  pelo 

A Tabela 3 apresenta os resultados de resistência ao impacto Izod e as caracterizações térmicas apresentadas em função dos ensaios de HDT, temperatura Vicat e a taxa de queima do

Deste modo, o adequado zoneamento e sua observância são fundamentais para a conciliação da preservação ou conservação de espécies, hábitats e paisagens dentre outras e

"Esse é o proje- to mais complexo e desafiador que já desenvolvemos'; afir- mou Maurício Botelho, presidente da Embraer, quando da apresentação do modelo 170 à

O enfermeiro, como integrante da equipe multidisciplinar em saúde, possui respaldo ético legal e técnico cientifico para atuar junto ao paciente portador de feridas, da avaliação

O candidato e seu responsável legalmente investido (no caso de candidato menor de 18 (dezoito) anos não emancipado), são os ÚNICOS responsáveis pelo correto

Encha a garrafa até um pouco abaixo do nível desejado e feche o canal de drenagem girando a válvula de controle de fluxo no sentido horário até que ela pare.. CRAFTAP 3 | Breve