equalização e modificação de histogramas · title('histograma componente y')...

15
Equalização e modificação de histogramas Televisão Digital 2004/2005 Sérgio Ramos Pinho 030503028 Rui Manuel Ferreira do Couto 030503011

Upload: lethien

Post on 20-Oct-2018

221 views

Category:

Documents


0 download

TRANSCRIPT

Equalização e modificação de histogramas

Televisão Digital 2004/2005

Sérgio Ramos Pinho 030503028

Rui Manuel Ferreira do Couto 030503011

Equalização e Modificação de Histogramas

Televisão Digital – 2004/2005 Sérgio Pinho, Rui Couto

Pág.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

Conclusões 15

Equalização e Modificação de Histogramas

Televisão Digital – 2004/2005 Sérgio Pinho, Rui Couto

Pág.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

Equalização e Modificação de Histogramas

Televisão Digital – 2004/2005 Sérgio Pinho, Rui Couto

Pág.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)

Equalização e Modificação de Histogramas

Televisão Digital – 2004/2005 Sérgio Pinho, Rui Couto

Pág.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)

Equalização e Modificação de Histogramas

Televisão Digital – 2004/2005 Sérgio Pinho, Rui Couto

Pág.6

Equalização e Modificação de Histogramas

Televisão Digital – 2004/2005 Sérgio Pinho, Rui Couto

Pág.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)

Equalização e Modificação de Histogramas

Televisão Digital – 2004/2005 Sérgio Pinho, Rui Couto

Pág.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.

Equalização e Modificação de Histogramas

Televisão Digital – 2004/2005 Sérgio Pinho, Rui Couto

Pág.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

Equalização e Modificação de Histogramas

Televisão Digital – 2004/2005 Sérgio Pinho, Rui Couto

Pág.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. E assim obtemos as seguintes imagens e os respectivos histogramas.

Equalização e Modificação de Histogramas

Televisão Digital – 2004/2005 Sérgio Pinho, Rui Couto

Pág.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.

Inserindo os valores (0.4,0.6)

Equalização e Modificação de Histogramas

Televisão Digital – 2004/2005 Sérgio Pinho, Rui Couto

Pág.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 imagem ‘Berries.jpg’ como os histogramas G e B não são uniformes, o que equalizando a

Equalização e Modificação de Histogramas

Televisão Digital – 2004/2005 Sérgio Pinho, Rui Couto

Pág.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

Equalização e Modificação de Histogramas

Televisão Digital – 2004/2005 Sérgio Pinho, Rui Couto

Pág.14

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

Equalização e Modificação de Histogramas

Televisão Digital – 2004/2005 Sérgio Pinho, Rui Couto

Pág.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.