Fabricio Breve - Página Pessoal
Português Português   English English
www.fabriciobreve.com
         
Informações Gerais
Publicações
Currículo Lattes
Trabalhos Acadêmicos
Links
Links
Material de Aula - Análise de Sinais e Sistemas
Material de Aula - Teoria da Computação
Material de Aula - PHP
Banco de Dados I
Redes de Computadores
Laboratório de Programação
Laboratório de Redes de Computadores e Sistemas Operacionais
Sistemas Orientados a Objetos
Análise de Sistemas
Tópicos: Computação Avançada
Tópicos: Computação Avançada
 

Universidade Federal de São Carlos

Departamento de Computação

Programa de Pós Graduação em Ciência da Computação

Curso de Processamento Digital de Imagens

2º Semestre 2003

 

 

 

 

Lista de Práticas de Laboratório do MATLAB

 

 

 

 

 

 

Aluno: Fabricio Aparecido Breve

Prof.: Dr. Nelson D. A. Mascarenhas


Prática 1

 

Código Fonte:

 

[Y, mapa] = imread('canoe.tif');

Y = ind2gray(Y,mapa);

media = mean2(Y);

desvpadrao = std2(Y);

figure;

imhist(Y), title('Histograma da imagem');

 

figure;

imshow(Y,128), title('Imagem em tons de cinza');

 

Z = 0.5 * Y + 0.5;

figure;

imshow(Z,128), title('Z = 0.5 * Y + 0.5');

mediaZ = mean2(Z);

desvpadraoZ = std2(Z);

figure;

imhist(Z), title('Histograma');

 

R1 = imrotate(Y,45);

R2 = imrotate(Y,90,'bicubic');

R3 = imrotate(Y,135,'bilinear');

 

figure;

subplot(2,2,1), imshow(Y), title('Imagem Original');

subplot(2,2,2), imshow(R1), title('Rotacao Default (Nearest-Neighbor)');

subplot(2,2,3), imshow(R2), title('Rotacao Bicubica');

subplot(2,2,4), imshow(R3), title('Rotacao Bilinear');

 

RC = imrotate(Y,20,'bicubic','crop');

figure;

imshow(RC), title('Rotacao com Crop');

 

U = Y';

W = imrotate(U,90);

figure;

imshow(W), title('Flip na vertical');

 

figure;

[h w] = size(Y)

improfile(Y,[0 w],[round(h/2) round(h/2)])

 

Média:                                   0,27637

Desvio Padrão:                    0,12121

 

 

Média:                                   0,63818

Desvio Padrão:                    0,060604

 

A operação Y = 0.5 * Y + 0.5 aumentou o brilho da imagem, o histograma ficou mais comprimido e ocupando apenas a região mais clara. Por conseqüência a média aumentou e o desvio padrão diminuiu


Na rotação em 90º a interpolação é desnecessária, visto que os pixels apenas foram rearranjados, mas continuaram todos com o mesmo valor. Nas rotações de 45º e 135º a interpolação bilinear ajuda a diminuir o efeito de aliasing nas bordas da imagem.

 

Perfil Radiométrico


Prática 2

 

[Y, mapa] = imread('forest.tif');

Y = ind2gray(Y,mapa);

figure;

imhist(Y,128);

 

Imagem_Clara = imadjust(Y,[],[0.5 1]);

Imagem_Escura = imadjust(Y,[],[0 0.5]);

Imagem_Eq = histeq(Y,128);

 

figure;

subplot(2,2,1), imshow(Y), title('Imagem Original');

subplot(2,2,2), imshow(Imagem_Clara), title('Imagem Clara');

subplot(2,2,3), imshow(Imagem_Escura), title('Imagem Escura');

subplot(2,2,4), imshow(Imagem_Eq), title('Imagem Equalizada');

 

figure;

subplot(2,2,1), imhist(Y,128), title('Imagem Original');

subplot(2,2,2), imhist(Imagem_Clara,128), title('Imagem Clara');

subplot(2,2,3), imhist(Imagem_Escura,128), title('Imagem Escura');

subplot(2,2,4), imhist(Imagem_Eq,128), title('Imagem Equalizada');

 

[Y2, mapa] = imread('alumgrns.tif');

Y2cores = grayslice(Y2,4);

figure;imshow(Y2), title('Imagem Original');

figure;imshow(Y2cores,jet(4)),colorbar, title('Imagem em Pseudocores');

 

Y2exp = imadjust(Y2,[0.3 0.6],[])

figure;imshow(Y2exp),title('Inputcropping');

figure;imhist(Y2exp),title('Histograma de Inputcropping');

 

Y2cmp = imadjust(Y2,[],[0.7 1])

figure;imshow(Y2cmp),title('Outputcropping');

figure;imhist(Y2cmp),title('Histograma de Outputcropping');

 

A imagem original apresenta um histograma distribuído, mas com maior concentração de tons escuros.

A imagem clara comprime o histograma e o desloca para a parte mais clara.

A imagem escura também comprime o histograma, mas o desloca para  parte escura.

A imagem equalizada deixa uma distância muito grande entre os tons mais escuros, e conseqüentemente deixa o ruído mais evidente.

 


Expansão do histograma com valores 0.3 a 0.6 (inputcropping)


Expansão do histograma com valores 0.7 a 1.0 (outputcropping)

 


Prática 3

 

[Y, map] = imread('blood1.tif');

 

Ya = Filter2([1 1 1; 1 1 1; 1 1 1]/9,Y)

Yb = Filter2([0 -1 0; -1 4 -1; 0 -1 0],Y)

Yc = Filter2([-1 -1 -1; 2 2 2; -1 -1 -1],Y)

Yd = Filter2([-1 2 -1; -1 2 -1; -1 2 -1],Y)

Ye1 = Filter2([-1 -1 2; -1 2 -1; 2 -1 -1],Y)

Ye2 = Filter2([2 -1 -1; -1 2 -1; -1 -1 2],Y)

Yf1 = Filter2([-1 -2 -1; 0 0 0; 1 2 1]/4,Y)

Yf2 = Filter2([1 0 -1; 2 0 -2; 1 0 -1]/4,Y)

 

figure;imshow(Y,map),title('Imagem Original');

figure;imshow(Ya,map),title('Media (3X3)');

figure;imshow(Yb,map),title('Laplaciano');

figure;imshow(Yc,map),title('Deteccao de linhas horizontais');

figure;imshow(Yd,map),title('Deteccao de linhas verticais');

figure;imshow(Ye1,map),title('Deteccao de linhas em 45 graus');

figure;imshow(Ye2,map),title('Deteccao de linhas em -45 graus');

figure;imshow(Yf1,map),title('Deteccao de bordas horizontais utilizando Sobel');

figure;imshow(Yf2,map),title('Deteccao de bordas verticais utilizando Sobel');

 

[Y2, map2] = imread('saturn.tif');

 

Y2n1 = imnoise(Y2,'gaussian',0,0.08);

Y2n1f1 = imfilter(Y2n1,[1/9 1/9 1/9;1/9 1/9 1/9;1/9 1/9 1/9])

Y2n1f2 = MedFilt2(Y2n1);

 

figure;

subplot(1,3,1), imshow(Y2n1), title('Imagem com ruido');

subplot(1,3,2), imshow(Y2n1f1), title('Filtro Media');

subplot(1,3,3), imshow(Y2n1f2), title('Filtro Mediana');

 

Y2n2 = imnoise(Y2,'gaussian',0,0.08);

Y2n3 = imnoise(Y2,'gaussian',0,0.08);

 

Y2media = uint8(imdivide(imadd(imadd(uint16(Y2n1),uint16(Y2n2)),uint16(Y2n3)),3))

 

figure;

subplot(2,2,1), imshow(Y2n1), title('Imagem ruidosa 1');

subplot(2,2,2), imshow(Y2n2), title('Imagem ruidosa 2');

subplot(2,2,3), imshow(Y2n3), title('Imagem ruidosa 3');

subplot(2,2,4), imshow(Y2media), title('Media das imagens ruidosas');

 

        

A média das imagens ruidosas se mostrou um método eficiente para obter uma imagem mais próxima à original.


Prática 4

 

[Y, map] = imread('cameraman.tif');

imshow(Y,map);

 

F = fftshift(fft2(Y));

figure

colormap(jet(256)),imagesc(log(1 + abs(F))),title('FFT - Resultado 2D'), colorbar;

figure;

mesh(log(1 + abs(F))),title('FFT - Resultado 3D');

 

Yr = imrotate(Y,20);

Fr = fftshift(fft2(Yr));

 

figure;

subplot(1,2,1);imshow(Y),title('Imagem Original');

subplot(1,2,2);imshow(Yr),title('Imagem Rotacionada 20º');

 

figure;

subplot(1,2,1),colormap(jet(256)),imagesc(log(1 + abs(F))),title('Imagem Original - FFT - Resultado 2D'), colorbar;

subplot(1,2,2),colormap(jet(256)),imagesc(log(1 + abs(Fr))),title('Imagem Rotacionada 20º - FFT - Resultado 2D'), colorbar;

 

[Y2, map2] = imread('testpat1.tif');

Y2n = imnoise(Y2,'salt & pepper');

figure;

subplot(1,2,1),imshow(Y2,map2),title('Imagem Original');

subplot(1,2,2),imshow(Y2n,map2),title('Imagem com ruido Sal e Pimenta');

 

C2 = dct2(Y2);

F2 = fftshift(fft2(Y2));

C2n = dct2(Y2n);

F2n = fftshift(fft2(Y2n));

 

figure;

subplot(2,2,1),colormap(jet(256)),imagesc(log(1 + abs(C2))),title('Transf. Co-Seno da Imagem Original'), colorbar;;

subplot(2,2,2),colormap(jet(256)),imagesc(log(1 + abs(F2))),title('FFT da Imagem Original'), colorbar;;

subplot(2,2,3),colormap(jet(256)),imagesc(log(1 + abs(C2n))),title('Transf. Co-Seno Imagem c/ ruido Sal e Pimenta'), colorbar;;

subplot(2,2,4),colormap(jet(256)),imagesc(log(1 + abs(F2n))),title('FFT Imagem c/ ruido Sal e Pimenta'), colorbar;

 

Y2media = Filter2([1 1 1; 1 1 1; 1 1 1]/9,Y2n);

Y2mediana = MedFilt2(Y2n);

 

figure;

subplot(1,3,1), imshow(Y2n,map2), title('Imagem Ruidosa');

subplot(1,3,2), imshow(Y2media,map2), title('Filtro Media');

subplot(1,3,3), imshow(Y2mediana,map2), title('Filtro Mediana');

 

 

Comparando a FFT da imagem original com a FFT da imagem rotacionada em 20º percebemos que a FFT também apresenta um certo tipo de rotacionamento


 


 

 

O filtro média melhora um pouco a imagem, mas ela ainda apresenta um pouco de ruído. O filtro mediana apresentou um melhor desempenho, eliminando quase todo o ruído.

 
eXTReMe Tracker

Webdesigner: Fabricio Breve 1997 - 2011
[email protected] - Privacidade