Processamento de Imagens Digitais Operações Geométricas com Imagens PARTE 3 Glaucius Décio Duarte Instituto Federal Sul-rio-grandense : Campus Pelotas Engenharia Elétrica Atualizado em 24mai2016 1 de 7
1. Transformações Geométricas com Imagens 1.3 Redimensionamento (Escala) Matriz de transformação: T = [ex 0 0; 0 ey 0; 0 0 1] onde ex e ey são os fatores de escala nas direções x e y. 1.3.1 Função: imresize imagemredimensionada = imresize(imagemrgb, fator); onde: fator: fator de redimensionamento pkg load image; clc; clf; rgb = imread ('resistor.jpg'); figure(1); imshow(rgb); rgb_redimensionada = imresize(rgb,0.5); imwrite(rgb_redimensionada,"resistor2.jpg"); 1.3.2 Zoom Digital 1.3.2.1 Capacidade de Resolução da Imagem Os sensores de imagens contêm uma teia (ou grade) de fotocélulas, cada uma delas representando um pixel na imagem final - assim a resolução de uma câmera digital é determinada pela quantidade de fotocélulas que existem na superfície de seu sensor. Por exemplo, uma câmera com um sensor no qual cabem 1600 (largura) x 1200 (altura) fotocélulas é capaz de gerar uma imagem de 1600 x 1200 pixels. Então, 2 de 7
para efeito de terminologia e definição da capacidade de uma câmera, dizemos simplesmente que ela tem uma resolução de 1600 x 1200 pixels, ou 1,92 megapixels. Atualmente as câmeras mais simples geram arquivos de 640 x 480 pixels, enquanto câmeras de capacidade média estão por volta de 1600 x 1200 pixels, e câmeras de ponta produzem imagens de 2.560 x 1.920 pixels (perto de 5 megapixels). Importante notar que isto se refere às câmeras amadoras, pois algumas profissionais já produzem mais de seis milhões de pixels. Quanto maior a capacidade de resolução, geralmente maior também o preço. Outro detalhe importante é que quanto maior a imagem em pixel, maior o tamanho do arquivo resultante. Por isso, normalmente as câmeras digitais possuem uma regulagem para o tamanho do arquivo, dando a opção para o fotógrafo de escolher o modo de resolução. Assim, se alguém vai capturar imagens para a WEB e possui uma câmera de 3.3 megapixels, pode regulá-la para gerar imagens de apenas 640 x 480 pixels, bem mais fáceis de armazenar e lidar. Por exemplo, uma câmera de alta resolução de 2048 x 1560 pixels, gera uma imagem média em arquivo JPEG (depende das tonalidades e intensidade de luz retratadas) de aproximadamente 1,2 MB (megabytes). Já na resolução de 640 x 480 pixels, no mesmo formato JPEG, gerará um arquivo de apenas 220 Kb (kilobytes), ou seja, menos de 1/5 do tamanho. Além da preocupação com espaço de armazenamento e rapidez em transmissão pela Internet, em termos práticos deve-se levar em conta o tamanho com o qual se pretende imprimir a imagem. Ainda seguindo os exemplos acima, a imagem de 2048 x 1560 pixels (3.3 MB) pode ser impressa, sem qualquer perda, em alta resolução (300 dpi), no tamanho de 17,34 x 13 cms, enquanto a imagem de 640 x 480 pixels permite apenas uma boa imagem impressa no tamanho 5,42 x 4,06 cms. Como se calcula o tamanho em termos de resolução é assunto que trataremos mais adiante neste curso, quando abordarmos a impressão. Apesar de quanto maior o número de fotocélulas num sensor melhores imagens serem produzidas, acrescentar simplesmente fotocélulas à um sensor nem sempre é fácil e pode resultar em problemas. Por exemplo, para se colocar mais fotocélulas num sensor de imagem, o sensor precisaria ser maior ou as fotocélulas menores. Chips maiores com mais fotocélulas aumentam as dificuldades de construção e os custos para o fabricante. Fotocélulas menores, por outro lado, serão menos sensíveis e irão capturar menos luz que as de um chip normal. Concluindo, colocar mais fotocélulas num sensor, além de sua complexidade e alto custo, acaba resultando em arquivos maiores, de difícil armazenamento. Por isso a constante corrida tecnológica entre os fabricantes na busca de sensores de maior resolução, com qualidade e preço competitivo. 3 de 7
1.3.2.2 Efeito visual de blocos, pixelização Quanto mais fotocélulas e consequentemente mais pixels, melhores serão os detalhes gravados, e mais nítidas serão as imagens. Se alguém ampliar e continuar ampliando qualquer imagem digital, simplesmente por replicação de pixels (Figura 1), chegará um momento em que os pixels vão começar a aparecerem multifacetados (Figuras 5 e 6). Esse efeito se chama pixelização. Portanto, quanto mais pixels existirem em uma imagem, mais ela aceitará ampliações com qualidade; quanto menos pixels, menor a ampliação possível. 1.3.2.3 Interpolação Bilinear (pela média) Aconselha-se este método para fatores de escala 2, 3 ou 4, pois acima disto, acentua-se o borramento. Algoritmo (válido para escala = 2) a) interpolação segundo as linhas f (0,0) = f(0,0) f (0,1) = 0.5(f(0,0)+f(0,1)) f (0,2) = f(0,1) f (0,3) = 0.5(f(0,1)+f(0,2)) b) interpolação segundo as colunas OBS: - f(x, y) <= f (x, y) - Assume-se f(x, y) = 0 for a de [0, M-1] e [0, N-1] Exemplo 1: Considere a seguinte imagem (representada pelas intensidades de cinza). M = [50 40 60; 20 30 20; 10 20 10] 4 de 7
Então, a imagem resultante, após a aplicação do método de zoom por interpolação bilinear, para um grau de ampliação igual a 2x: MR = [50 45 40 50 60; 35 35 35 38 40; 20 25 30 25 20; 15 20 25 20 15; 10 15 20 15 10] Exemplo 2: a = imread('imagem.jpg'); b = imresize(a,[480*2,640*2],'nearest'); imshow(b(240:720,320:960)) Exemplo 3: a = imread('imagem.jpg'); b = imresize(a,[240,320],'bilinear'); c = imresize(b,[120,160],'bilinear'); figure, imshow(a); figure, imshow(b); figure, imshow(c); 1.4 Deslizamento Matriz de transformação - deslizamento vertical: T = [1 0 0; dv 1 0; 0 0 1] Matriz de transformação - deslizamento horizontal: T = [1 dh 0; 0 1 0; 0 0 1] onde dv e dh são os fatores de deslizamento nas direções vertical e horizontal. 1.4.1 Função: imshear id = imshear(imagemgray, eixo, fator, modo); onde: 5 de 7
eixo: pode ser ("x" ou "y") fator: fator de deslizamento modo: pode ser ("loose", "crop" ou "wrap") rgb = imread ('resistor.jpg'); gray = rgb2gray(rgb); figure(1); clf; subplot(1,2,1); imshow(gray); gray_deslizado = imshear(gray,'x',0.1,'crop'); subplot(1,2,2); imshow(gray_deslizado); imwrite(gray_deslizado,'resistor_gray_deslizado.jpg'); title(' DESLIZAMENTO '); 1.5 Espelhamento Matriz de espelhamento em relação ao eixo x: T = [1 0 0; 0-1 0; 0 0 1] Matriz de espelhamento em relação ao eixo y: T = [-1 0 0; 0 1 0; 0 0 1] Matriz de espelhamento em relação à origem: T = [-1 0 0; 0-1 0; 0 0 1] 1.5.1 Função: flipud flipud(imagem) Realiza um espelhamento da imagem em relação ao eixo X. 6 de 7
flipud([1, 2; 3, 4]) 3 4 1 2 1.5.2 Função: fliplr fliplr(imagem) Realiza um espelhamento da imagem em relação ao eixo Y. fliplr([1, 2; 3, 4]) 2 1 4 3 7 de 7