|
||||||||
|
|
www.fabriciobreve.com
|
|||||||
|
|
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 1Có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. |
|
||||||
|
Webdesigner:
Fabricio Breve 1997 - 2011 |
||||||||