Baixe o app para aproveitar ainda mais
Prévia do material em texto
Processamento de Imagens 2020 CADERNO DE RESOLUÇÃO DA ATIVIDADE PRÁTICA RODRIGO RAMOS PEREIRA 1329431 Atividade Prática de Processamento de Imagens 1 Prof. Charles Way Hun Fung, MSc 1. Mostre o histograma de uma destas imagens, explique o formato do histograma, a respeito de níveis de cinza, quantidade de pixels e contraste. I) Apresentação do Código: rodrigo_img1 = imread('cameraman.tif'); [qtd,nvs] = imhist(rodrigo_img1); subplot (211) imshow(rodrigo_img1) subplot (212) plot2d3(qtd,nvs) II) Apresentação das Imagens Resultantes: III) Explicação: Ao lado temos a apresentação da imagem do cameraman escolhida para realizar a análise do histograma, este que vem logo abaixo dela. O histograma nos mostra que a imagem é bem equilibrada em relação aos níveis de cinza. As áreas onde existe uma concentração maior de traços escuros nos indica uma grande concentração de pixels claros na imagem como um todo, como podemos observar. Os espaços mais claros indica a parte escura da imagem, como o sobretudo do cameraman e o tripé da câmera. Figura 1: Cameraman e seu histograma Atividade Prática de Processamento de Imagens 2 Prof. Charles Way Hun Fung, MSc 2. Faça a plotagem das imagens com seus respectivos histogramas usando subplot, use 3 linhas e 2 colunas. Explique a diferença entre os histogramas. I) Apresentação do Código: rodrigo_img1 = imread('cameraman.tif'); rodrigo_img2 = imread('house.tif'); rodrigo_img3 = imread('lena_color_256.tif'); rodrigo_img3_gray = rgb2gray(rodrigo_img3); [qtd1,nvs1] = imhist(rodrigo_img1); [qtd2,nvs2] = imhist(rodrigo_img2); [qtd3,nvs3] = imhist(rodrigo_img3_gray); subplot(321) imshow(rodrigo_img1) subplot(322) plot2d3(qtd1,nvs1) subplot(323) imshow(rodrigo_img2) subplot(324) plot2d3(qtd2,nvs2) subplot(325) imshow(rodrigo_img3_gray) subplot(326) plot2d3(qtd3,nvs3) II) Apresentação das Imagens Resultantes: III) Explicação: Assim como no exercício anterior, para realizar a análise das imagens no Scilab, inserimos as respectivas variáveis, com uma atenção especial para a imagem da terceira linha denominada “lena_color_256.tif”. Para realizar o histograma dessa imagem foi necessário converte-la para níveis de cinzas e em seguida realizar os comandos do histograma. No histograma do cameraman vemos uma concentração de traços pretos no início do gráfico, mostrando a grande concentração de pixels de níveis mais claros ao fundo do cameraman. Na imagem 2 temos a casa e uma grande concentração de pixels claros apresentado no grande traço isolado ao final do gráfico. Na imagem 3 notamos um espalhamento no gráfico dos níveis de cinza, o que é fácil de notar na imagem. Figura 2: representação das três imagens com seus histogramas ao lado de cada uma. Atividade Prática de Processamento de Imagens 3 Prof. Charles Way Hun Fung, MSc 3. Realize a equalização na imagem cameraman.tif, faça uma comparação entre a imagem original e a equalizada. Mostre diferenças dos histogramas (original e equalizado) e explique o processamento realizado pela equalização. I) Apresentação do Código: rodrigo_img1 = imread('cameraman.tif'); rodrigo_img1_eq = imhistequal(rodrigo_img1); [qtd1,nvs1] = imhist(rodrigo_img1); [qtd1eq,nvs1eq] = imhist(rodrigo_img1_eq); subplot(221) imshow(rodrigo_img1) subplot(222) plot2d3(qtd1,nvs1) subplot(223) imshow(rodrigo_img1_eq) subplot(224) plot2d3(qtd1eq,nvs1eq) II) Apresentação das Imagens Resultantes: III) Explicação: Após realizar a equalização dos histograma notamos a redistribuir dos pixels nos níveis de cinza, observando os gráficos, de maneira que diminui o contraste da imagem e deixa-a mais uniforme. Nota-se até detalhes que não eram visto na imagem original como os bolsos do homem. Figura 3: Histogramas sem equalização e com equalização Atividade Prática de Processamento de Imagens 4 Prof. Charles Way Hun Fung, MSc 4. Em ambas imagens aplique um filtro para detecção de pontos isolados. Para isto procure uma máscara e utilize conv2 para aplicar o filtro na imagem. Explique o que aconteceu com a imagem resultante, quais detalhes foram enfatizados com este processamento? I) Apresentação do Código: rodrigo_img1 = imread('jetplane.tif'); rodrigo_img2 = imread('walkbridge.tif'); rodrigo_img1_real = double(rodrigo_img1); rodrigo_img2_real = double(rodrigo_img2); mascara = [1,1,1;1,-8,1;1,1,1] mascara = 1. 1. 1. 1. -8. 1. 1. 1. 1. result_img1=conv2(rodrigo_img1_real,mascara); result_img2=conv2(rodrigo_img2_real,mascara); subplot(221) imshow(rodrigo_img1) subplot(222) imshow(result_img1) subplot(223) imshow(rodrigo_img2) subplot(224) imshow(result_img2) II) Apresentação das Imagens Resultantes: III) Explicação: Para essa filtragem foi utilizada uma matriz 3x3 conhecida como mascara laplaciana, a qual nos permite a detecção de pontos isolados. Nos resultados vimos que ambas as imagens possuem muitos pontos claros com pouca variedade de cinza. Já em suas imagens resultantes da convolução notamos que os contornos do avião e da ponte estão se destacando mais, por conter maior número de pontos brancos em torno de ambos. Figura 4: A convolução para a detecção de pontos Atividade Prática de Processamento de Imagens 5 Prof. Charles Way Hun Fung, MSc 5. Em ambas imagens aplique os filtros para detecção de linha: horizontal, vertical, 45° e - 45°. Para isto procure uma máscara para cada filtro (tabela anterior) e utilize conv2 para aplicar o filtro na imagem. Plote o resultado e explique o que aconteceu com a imagem. I) Apresentação do Código: rodrigo_img1 = imread('jetplane.tif'); rodrigo_img2 = imread('walkbridge.tif'); rodrigo_img1_real = double(rodrigo_img1); rodrigo_img2_real = double(rodrigo_img2); mask_hor=[-1 -1 -1 ; 2 2 2 ; -1 -1 -1]; mask_45=[2 -1 -1 ; -1 2 -1 ; -1 -1 2]; mask_ver=[-1 2 -1 ; -1 2 -1 ; -1 2 -1]; mask_45neg=[-1 -1 2 ; -1 2 -1 ; 2 -1 -1]; res_hor_img1=conv2(mask_hor,rodrigo_img1_real); res_45_img1=conv2(mask_45,rodrigo_img1_real); res_ver_img1=conv2(mask_ver,rodrigo_img1_real); res_45neg_img1=conv2(mask_45neg,rodrigo_img1_real); res_hor_img2=conv2(mask_hor,rodrigo_img2_real); res_45_img2=conv2(mask_45,rodrigo_img2_real); res_ver_img2=conv2(mask_ver,rodrigo_img2_real); res_45neg_img2=conv2(mask_45neg,rodrigo_img2_real); subplot(241) imshow(res_hor_img1) subplot(242) imshow(res_45_img1) subplot(243) imshow(res_ver_img1) subplot(244) imshow(res_45neg_img1) subplot(245) imshow(res_hor_img2) subplot(246) imshow(res_45_img2) subplot(247) imshow(res_ver_img2) subplot(248) imshow(res_45neg_img2) II) Explicação: Nas imagens abaixo vemos o resultado da aplicação dos filtros para a detecção de linhas. Na primeira linha trazemos o trabalho feito na imagem do avião. Podemos perceber na primeira imagem leves linhas horizontais, pois a imagem contém muitos pontos brancos. Nas outras três imagens referente ao avião, notamos apenas na última imagem da primeira linha leves traços da calda do avião, pois esta tem linhas em 45º negativos. Na segunda linha temos os mesmos filtros aplicados a imagem da ponte. Nota-se que apenas a filtragem horizontal traz alguma lembrança do que é a imagem da ponte, devido os traços horizontais que existem nela. Já as outras imagens é difícil de distinguir qualquer traço. Atividade Prática de Processamento de Imagens 6 Prof. Charles Way Hun Fung, MSc III) Apresentação das Imagens Resultantes: Figura 5:Detecção de linhas Atividade Prática de Processamento de Imagens 7 Prof. Charles Way Hun Fung, MSc 6. Em ambas imagens aplique os filtros para detecção de borda: Roberts, Prewitt, Sobel. Para isto procure uma máscara para cada filtro e utilize conv2 para aplicar o filtro na imagem. Plote o resultadoe explique o que aconteceu com a imagem. I) Apresentação das Imagens Resultantes: II) Apresentação do Código: rodrigo_img1 = imread('jetplane.tif'); rodrigo_img2 = imread('walkbridge.tif'); rodrigo_img1_real = double(rodrigo_img1); rodrigo_img2_real = double(rodrigo_img2); mask_roberts1=[-1 0 ; 0 1]; mask_prewitt2=[-1 0 -1 ; -1 0 1 ; -1 0 1]; mask_sobel1=[-1 -2 -1 ; 0 0 0 ; 1 2 1]; res_roberts1_img1=conv2(mask_roberts1,rodrigo_img1_real); res_prewitt2_img1=conv2(mask_prewitt2,rodrigo_img1_real); res_sobel1_img1=conv2(mask_sobel1,rodrigo_img1_real); res_roberts1_img2=conv2(mask_roberts1,rodrigo_img2_real); res_prewitt2_img2=conv2(mask_prewitt2,rodrigo_img2_real); res_sobel1_img2=conv2(mask_sobel1,rodrigo_img2_real); subplot(241) imshow(rodrigo_img1) subplot(242) imshow(res_roberts1_img1) subplot(243) imshow(res_prewitt2_img1) subplot(244) imshow(res_sobel1_img1) subplot(245) imshow(rodrigo_img2) subplot(246) imshow(res_roberts1_img2) subplot(247) imshow(res_prewitt2_img2) subplot(248) imshow(res_sobel1_img2) III) Explicação: Como vimos, os operadores de Roberts são baseados na implementação de diferenças nas diagonais. As máscaras 2×2 são simples, e não são tão úteis para cálculos de direção da borda. Por isso conseguimos detectar poucas linhas, tanto na imagem do avião, onde vemos no primeiro filtro as linhas que são as bordas da neve na montanha, e na imagem da ponte vemos as linhas que indicam as laterais da ponte. As máscaras 3x3 consideram a natureza dos dados nas laterais opostas ao ponto central e, por isso, carregam mais informações em relação a direção de uma borda. O filtro de Prewitt aplicado no exercício realça os pontos das linhas horizontais das imagens. Como as máscaras de Sobel apresentarem melhor suavização de ruído, faz com que sejam preferíveis, pois a supressão do ruído é algo importante quando lidamos com derivadas. Como todos coeficientes somam zero, temos a resposta nula nos locais de intensidade constante. Figura 6: aplicação dos filtros Roberts 1, Prewitt 2 e Sobel1 em cada imagem. Atividade Prática de Processamento de Imagens 8 Prof. Charles Way Hun Fung, MSc 7. Procure na literatura por outro filtro de borda que não foi apresentado no material da disciplina, apresente sua máscara e explique seu funcionamento, características e a apresente a bibliografia da qual foi retirado este método. I) Apresentação do Código: rodrigo_img1 = imread('jetplane.tif'); rodrigo_img2 = imread('walkbridge.tif'); rodrigo_img1_real = double(rodrigo_img1); rodrigo_img2_real = double(rodrigo_img2); mask_laplaciano=[0 1 0 ; 1 -4 1 ; 0 1 0]; res_laplaciano_img1=conv2(mask_laplaciano,rodrigo_img1_real); res_laplaciano_img2=conv2(mask_laplaciano,rodrigo_img2_real); subplot(221) imshow(rodrigo_img1) subplot(222) imshow(res_laplaciano_img1) subplot(223) imshow(rodrigo_img2) subplot(224) imshow(res_laplaciano_img2) II) Apresentação das Imagens Resultantes: III) Explicação: Aplicamos uma máscara Laplaciano nas imagens. Ele é um operador isotrópico, ou seja, não diferencia direções. Como os demais ele é fácil de implementar pois basta uma máscara. Porem ele não dá informação sobre a direção da borda. E como vimos em algumas literaturas ele é mais sensível ao ruído pois deriva duas vezes. Figura 7: Aplicação do filtro Laplaciano Atividade Prática de Processamento de Imagens 9 Prof. Charles Way Hun Fung, MSc 8. Separe as componentes de cor R, G e B da imagem baboo_colorido.tif. Explique o que significa regiões mais claras nestas imagens. I) Apresentação do Código: rodrigo_img = imread('baboo_colorido.tif'); size (rodrigo_img); red = rodrigo_img(:,:,1); green = rodrigo_img(:,:,2); blue = rodrigo_img(:,:,3); subplot(221) imshow(rodrigo_img) subplot(222) imshow(red) subplot(223) imshow(green) subplot(224) imshow(blue) II) Apresentação das Imagens Resultantes: III) Explicação: Nas imagens que temos os destaques nas partes mais claras como o nariz e a região azul em torno do nariz, mostra que o Scilab, ao separar os pixels, levou dois deles a níveis de cinza e o pigmento escolhido foi levado a 1, como por exemplo na primeira imagem preto e branca ao lado da imagem colorida, referente a cor vermelha (red), vemos onde existia a cor vermelha toda branca. Figura 8: Separação RGB Atividade Prática de Processamento de Imagens 10 Prof. Charles Way Hun Fung, MSc 9. Converta a imagem lena_colorida.tif para o modelo CMY, separe suas componentes (C, M e Y). I) Apresentação do Código: rodrigo_img = imread('lena_colorida.tif'); size (rodrigo_img); CMY=imcomplement(rodrigo_img); cia = CMY (:,:,1); mag = CMY (:,:,2); yel = CMY (:,:,3); subplot(221) imshow(CMY) subplot(222) imshow(cia) subplot(223) imshow(mag) subplot(224) imshow(yel) II) Apresentação das Imagens Resultantes: III) Explicação: Vemos claramente a separação dos pigmentos ciano, que remete ao azul e o amarelo. Já não notamos quase a pigmentação magenta, por não conter tantos pontos deste na imagem. Figura 9: imagem CMY e suas componentes separadas Atividade Prática de Processamento de Imagens 11 Prof. Charles Way Hun Fung, MSc 10. Converta a imagem jupiter.tif para HSI, usando o comando rgb2hsv. Veja cada uma das componentes deste modelo: 1: Intensidade, 2: Saturação, 3: Matiz. O que cada uma destas componentes significa e qual o benefício de utilizar este modelo de cor? I) Apresentação do Código: rodrigo_img = imread('jupiter.tif'); size (rodrigo_img); HSI=rgb2hsv(rodrigo_img); hue = HSI(:,:,1); sat = HSI(:,:,2); inte = HSI(:,:,3); subplot(221) imshow(HSI) subplot(222) imshow(hue) subplot(223) imshow(sat) subplot(224) imshow(inte) II) Apresentação das Imagens Resultantes: III) Explicação: O sistema de cores HSV, ou HSI, define o espaço de cor utilizando seus três parâmetros, a começar por matiz (tonalidade) como vemos na segunda imagem ao lado. Este verifica o tipo de cor, tendo todas as tonalidades do espectro, desde o vermelho até o violeta junto com o magenta. A saturação vemos na primeira imagem da segunda linha, conhecida como "pureza", vemos que quanto menor esse valor, maior será o tom de cinza da imagem, ou seja, quanto maior seu valor, mais "pura" é a imagem. Já a intensidade define o valor do brilho da cor. Figura 10: Modelo HSI Atividade Prática de Processamento de Imagens 12 Prof. Charles Way Hun Fung, MSc 11. Separe inteiramente a componente de cor vermelha da imagem baboo_colorido.tif. Qual a diferença entre este processamento e aquele realizado no exercício 8? I) Apresentação do Código: rodrigo_img = imread('baboo_colorido.tif'); size (rodrigo_img); rodrigo_img_R = rodrigo_img; rodrigo_img_R(:,:,[2 3])=0; subplot(211) imshow(rodrigo_img) subplot(212) imshow(rodrigo_img_R) II) Apresentação das Imagens Resultantes: III) Explicação: No exercício 8 temos a representação da imagem separada em tonalidades de cinza. Aqui temos a representação do filtro vermelho com a real pigmentação, em vermelho, na imagem. Nota-se que as regiões em vermelho na imagem original se destaca com tons claros na imagem com filtro. Figura 11: Separação da componente vermelha Atividade Prática de Processamento de Imagens 13 Prof. Charles Way Hun Fung, MSc 12. Realize três mudanças de escala na imagem baboo.tif, usando imresize, com as imagens: 2, 0.5 e 0.1. Mostre as imagens resultantes, utilizando o comando size explique a diferença entre estas imagens. I) Apresentação do Código: rodrigo = imread('baboo.tif'); size(rodrigo); rodrigores_2 = imresize(rodrigo,2); rodrigores_05 = imresize(rodrigo,0.5); plot2d3(221) imshow(rodrigores_2) plot2d3(222)imshow(rodrigores_05) II) Apresentação das Imagens Resultantes: III) Explicação: Como mencionado nas intruções de execução da atividade pratica, a função “imresize” define a escala da imagem. Na primeira figura notamos as diferenças de escala da imagem aumentada 2 vezes e a imagem reduzida meia vez. Nas planilhas abaixo das imagens temos a escala das figuras, a original tendo um tamanho de 512x512, a segunda, aumentada 2x sendo 1024x1024 e a terceira com redução da metade com 256x256. A redução 0,1 não foi possível realizar devido a erro de execução do Scilab. Figura 12: imagens original, aumentada e reduzida Atividade Prática de Processamento de Imagens 14 Prof. Charles Way Hun Fung, MSc 13. Reduza pela metade a escala da imagem pimentas.tif (fator de escala = 0.5) pelo menos três vezes. A qualidade da imagem continua a mesma? I) Apresentação do Código: rodrigo = imread('pimentas.tif'); size(rodrigo); rodrigores105 = imresize(rodrigo,0.5); rodrigores205 = imresize(rodrigores105,0.5); rodrigores305 = imresize(rodrigores205,0.5); subplot(221) imshow(rodrigo) subplot(222) imshow(rodrigores105) subplot(223) imshow(rodrigores205) subplot(224) imshow(rodrigores305) II) Apresentação das Imagens Resultantes: III) Explicação: Como existe a redução da escala pela metade de forma exponencial negativa, notamos nas imagens abaixo que existe a redução da qualidade da imagem. Figura 13: Redução da escala em 0,5 em 3 vezes Atividade Prática de Processamento de Imagens 15 Prof. Charles Way Hun Fung, MSc 14. Use a imagem pimentas.tif para usar a função imrotate, a rotação em sentido horário acontece com valores positivos ou negativos, mostre exemplos desta rotação (Pelo menos 4 ângulos diferentes). I) Apresentação do Código: rodrigo = imread('pimentas.tif'); rodrigo45 = imrotate(rodrigo,45); rodrigo60 = imrotate(rodrigo,60); rodrigo120 = imrotate(rodrigo,120); rodrigo270 = imrotate(rodrigo,270); subplot(221) imshow(rodrigo45) subplot(222) imshow(rodrigo60) subplot(223) imshow(rodrigo120) subplot(224) imshow(rodrigo270) II) Apresentação das Imagens Resultantes: III) Explicação: Rotações da imagem “pimenta.tif”.Nota-se que a base da rotação é a lateral direita da imagem. Figura 14: Rotação da imagem em 45º, 60º, 120º e 270º Atividade Prática de Processamento de Imagens 16 Prof. Charles Way Hun Fung, MSc 15. Aplique as duas funções de corte em uma imagem a sua escolha. A imagem resultante da função imcrop será chamada de imagemA e a imagem resultante da função imcropm será chamada de imagemB. I) Apresentação do Código: rodrigo = imread('baboo.tif'); imagemA = imcrop(rodrigo,[10,20,200,300]); imagemB = imcropm(rodrigo); subplot(121) imshow(imagemA) subplot(122) imshow(imagemB) II) Apresentação das Imagens Resultantes: III) Explicação: Ampliação da imagem com “imcrop” apresentando as posições: x1=10 y1=20 x2=200 y2=300 E temos a ampliação da imagem com imcropm, focando nos olhos Figura 15: Imagens amplificadas com imcrop e imcropm Atividade Prática de Processamento de Imagens 17 Prof. Charles Way Hun Fung, MSc 16. Realize um espelhamento horizontal na imagemA e um espelhamento vertical na imagemB. I) Apresentação do Código: imagemAHor = imagemA(:,$:-1:1); imagemBVer = imagemB($:-1:1,:); subplot(121) imshow(imagemAHor) subplot(122) imshow(imagemBVer) II) Apresentação das Imagens Resultantes: III) Explicação: Resultado do espelhamento das imagens resultadas do exercício 15. Figura 16: Espelhamentos horizontal e vertical Atividade Prática de Processamento de Imagens 18 Prof. Charles Way Hun Fung, MSc 17. A imagem retangulo.tif deve resultar no mais próximo possível de um retângulo branco sem nenhum artefato dentro ou fora do mesmo. Utilize apenas operações para resolver este problema. I) Apresentação do Código: rodrigo = imread('retangulo.tif'); rodrigo(4:7,4:7)=1; ES=imcreatese('rect',100,100); corroido=imerode(rodrigo,ES); dilatado=imdilate(corroido,ES); imshow(dilatado) II) Apresentação das Imagens Resultantes: III) Explicação: A imagem com o menor número de interferências internas e externas foi esta, usando um elemento estruturante 100x100, corrosão e dilatação. Figura 17: limpeza de imagem utilizando erosão e dilatação Atividade Prática de Processamento de Imagens 19 Prof. Charles Way Hun Fung, MSc 18. Na imagem texto.tif deve-se obter o texto nítido. Para isto, utilize operações de dilatação e erosão. O critério para verificar a nitidez do texto é quando as falhas nas letras deixarem de existir. I) Apresentação do Código: rodrigo = imread('texto.tif'); rodrigo(4:7,4:7)=1; ES = imcreatese('rect',3,3); dilatado = imdilate(rodrigo,ES); corroido = imerode(dilatado,ES); imshow(corroido) II) Apresentação das Imagens Resultantes: III) Explicação: Vemos que é possível ler o texto perfeitamente. Figura 18: Melhoria do texto utilizando dilatação e erosão Atividade Prática de Processamento de Imagens 20 Prof. Charles Way Hun Fung, MSc 19. Encontre as bordas da imagem U.tif utilizando apenas operações morfológicas. I) Apresentação do Código: rodrigo = imread('U.tif'); ES = imcreatese('rect',5,5); dila = imdilate(rodrigo,ES); resp = dila - rodrigo; imshow(resp) II) Apresentação das Imagens Resultantes: III) Explicação: As bordas são facilmente identificadas, nota-se também que o código é de fácil escrita. Figura 19: Identificação de bordas com morfologia matemática Atividade Prática de Processamento de Imagens 21 Prof. Charles Way Hun Fung, MSc 20. A imagem digital.tif é de uma impressão digital com ruído, realize operações morfológicas para retirar o ruído e realçar os traços da digital nesta imagem. I) Apresentação do Código: rodrigo = imread('retangulo.tif'); rodrigo(4:7,4:7)=1; ES = imcreatese('rect',2,2); eros = imerode(rodrigo,ES); dil = imdilate(eros,ES); imshow(dil) II) Apresentação das Imagens Resultantes: III) Explicação: Após realizar testes com alguns elementos estruturantes, definiu-se um elemento 2x2 pois este é o que apresenta o melhor resultado. Figura 20: Digital melhorada através de morfologia matemática
Compartilhar