Faculdade de Engenharia da Universidade do Porto Licenciatura em Engenharia Electrotécnica e de Computadores 5º Ano, 1º Semestre Televisão Digital - 2002/2003 Redução de imagem no domínio espacial Armando Miguel Jesus Pereira Barbosa Sérgio André Loureiro Paiva Valente ee98095@fe.up.pt ee98011@fe.up.pt
Objectivos Desenvolver um algoritmo que produza uma imagem digital de dimensões a.n x a.m (a < 1) a partir de uma imagem de dimensões n x M. As duas imagens deverão mostrar o mesmo conteúdo. Utilizar a estratégia de sub-amostragem vertical e horizontal de um factor de a:1. Analisar a imagem resultante, identificando o efeito de aliasing. Aplicar um filtro simples para eliminar o efeito de aliasing. Introdução teórica As imagens sem redução ocupam muito espaço ao serem armazenadas, o que, no caso da Internet é necessário mais tempo para as ler. Em muitos casos a utilização de imagem reduzida é suficiente para mostrar o seu conteúdo. Se quisermos consultar um catalogo com muitas imagens, seria necessário muito tempo para as ler por completo, pelo que o uso de imagens reduzidas ("thumbnails") irá tornar a consulta mais rápida e eficiente. Geralmente os "thumbnails" dão uma boa perspectiva sobre o conteúdo da imagem original. Existem vários métodos para proceder à redução de uma imagem, que descritos a seguir: "Cropping" Esta é a maneira mais simples de reduzir uma imagem. Consiste em retirar uma parcela que contenha a informação mais interessante da imagem original. Este método só é viável para imagens em que têm apenas uma pequena área de interesse. Para nós é simples identificar qual a área de mais interesse, contudo para implementar uma algoritmo autónomo torna-se mais complexo. "Pixel Skipping" Para eliminar os problemas acima referidos, pode-se reduzir o tamanho de uma imagem retirando pixels "intercalados" ao longo de toda a imagem. Por exemplo, se quisermos reduzir o tamanho de uma imagem para metade temos de retirar um pixel em cada dois em ambas as dimensões (vertical e horizontal). Este método é de implementação fácil e de execução rápida, contudo podemo-nos deparar com problemas especialmente em imagens de cor. As imagens que recorrem ao "dithering" vão ser penalizadas, isto porque, utilizam duas cores Redução de imagem no domínio espacial 2
adjacentes para criar uma nova cor que não existe na paleta de cor. Se na redução uma dessas cores for retirada irá modificar notoriamente a imagem original. "Pixel Averaging" A fim de eliminar o problema relacionado com a cor, como descrito em cima, podemos calcular a média dos pixels adjacentes, em vez de simplesmente os retirar. Com este método consegue-se obter menores perdas de informação. Este algoritmo para além de mais complexo leva um maior tempo de execução. "Frequency Domain" Uma outra solução para a redução de imagem envolve a analise no domínio das frequências. Por exemplo, se uma imagem for composta inteiramente por frequências baixas, as altas frequências podem ser truncadas. Quando tornamos a passar a imagem para o domínio do espaço iremos ter a imagem reduzida. "Wavelet Decomposition" O método Discrete Wavelet Transform (DWT) dá-nos outra possibilidade para a redução de tamanho de uma imagem. Consiste numa decimação que produz uma imagem segmentada, em que os diferentes segmentos contêm os coeficientes que correspondem aos diferentes níveis de detalhe da imagem. Simulação Numa 1ª fase para obter resultados experimentais de redução de imagem utilizamos a ferramenta do MatLab "imresize". Esta ferramenta permite-nos alterar o tamanho da imagem (reduzir ou ampliar) utilizando vários métodos. Os parâmetros da função são os seguintes: B = imresize(a,m,method) A - Imagem original B - Imagem destino m - Factor de escala (0<m<1 - Reduz tamanho, m>1 - Aumenta tamanho ) method - Método de interpolação method: 'Nearest' - Utiliza o método de sub-amostragem vertical e horizontal. "Pixel Skipping" 'Bilinear' - Utiliza o método da media entre pixels. "Pixel Averaging" Redução de imagem no domínio espacial 3
Numa 2ª fase implementamos um algoritmo de redução de imagem utilizando a estratégia de sub-amostragem vertical e horizontal, idêntico ao método 'nearest' utilizado pela ferramenta "imresize". Este algoritmo foi concebido em MatLab ilustrado em seguida. Função reduce2.m function B = reduce2(a,m) razao_h=floor(length(a(1,:,1))*m); %Largura da imagem razao_v=floor(length(a(:,1,1))*m); %Altura da imagem for k=1:length(a(1,1,:)) for j=1:razao_h for i=1:razao_v %Linhas horizontais %Linhas verticais B(i,j,k)=A(round(i/m),round(j/m),k); end end end Os parâmetros desta função são os seguintes: B = reduce2(a,m) A - Imagem original B - Imagem destino m - Factor de redução de escala (0<m<1) A função reduce2.m tem como objectivo reduzir uma imagem de 2-D, produzindo então uma nova imagem "igual" à original em termos de conteúdo, embora o tamanho da mesma esteja compreendido entre 0% e 100% do tamanho da imagem original consoante o valor de m varia entre 0 e 1. Redução de imagem no domínio espacial 4
Resultados experimentais Começamos por utilizar uma imagem a cores (RGB) e aplicamo-la aos dois métodos da função "imresize" e à função "reduce". Obtivemos os seguintes resultados. Imagem Original Função "imresize.m": Imagem reduzida 2x com "Pixel Skipping" Função "reduce.m": Imagem reduzida 2x com "Pixel Averaging" com filtro Imagem reduzida 2x com "Pixel Skipping" Redução de imagem no domínio espacial 5
Imagem reduzida 2x com "Pixel Skipping" e filtro passa-baixo antes da redução Em seguida utilizamos uma imagem com paleta de cor cinza e submetemo-la aos mesmos ensaios. Imagem Original Função "imresize.m": "Close-Up" Imagem reduzida 2x com "Pixel Skipping" Redução de imagem no domínio espacial 6
"Close-Up" Imagem reduzida 2x com "Pixel Averaging" Função "reduce.m": "Close-Up" Imagem reduzida 2x com "Pixel Skipping" Redução de imagem no domínio espacial 7
Por ultimo submetemos a estes ensaios uma imagem a preto e branco com altas frequências, a fim de verificar o aliasing nos diferentes métodos. Função "imresize.m": Imagem Original Imagem reduzida 2x com "Pixel Skipping" Função "imresize.m": Imagem reduzida 2x com "Pixel Averaging" Imagem reduzida 2x com "Pixel Skipping" Redução de imagem no domínio espacial 8
Conclusão Após analise dos resultados obtidos no 1º ensaio concluímos que o melhor método a usar em imagens vulgares a cores é o "Pixel Averaging" com filtro passabaixo antes da redução, utilizado pela função "imresize" com "method = 'bilinear' ". Neste caso a imagem aparece-nos esbatida, ou seja, não se nota os pixels, isto deve-se ao filtro e ao facto de ser utilizado a média dos pixels adjacentes para criar o novo pixel. No outro método, "Pixel Skipping", os pixels são mais evidenciados, produzindo assim uma imagem com menor qualidade. Temos ainda o ultimo caso, em que o filtro antes da redução por "Pixel Skipping" dá uma melhoria significativa na qualidade da imagem. O filtro passa-baixo vai suavizar a imagem original, sendo assim deixa de haver transições bruscas de tonalidades (elimina as altas frequências), logo o "Pixel Skipping" funciona muito melhor. No 2º ensaio, à primeira vista os resultados são semelhantes. Contudo, ao analisarmos a imagem ao detalhe, verificamos como era esperado, que existem pequenas diferenças. Neste caso é difícil de dizer qual das reduções apresenta melhor qualidade, isto porque o "Pixel Skipping" apresenta maior detalhe enquanto que o "Pixel Averaging" apresenta uma imagem mais homogénea. Por ultimo, vem o ensaio em que utilizamos uma imagem produzida para o efeito, por forma a evidenciar as diferenças entre os métodos. Após a analise dos resultados constata-se que no "Pixel Skipping" desaparecem algumas linhas da matriz (há perda de informação), sendo esta situação inaceitável. Isto deve-se ao facto deste método eliminar linhas e colunas por completo. Para o método "Pixel Averaging" o facto anteriormente referido não se verifica (não há perda de informação), contudo verifica-se uma alteração na tonalidade da imagem (o preto passa a cinza), isto porque é calculado a média entre o preto e o branco (pixels adjacentes) obtendo-se o cinza. Ao longo dos ensaios com as varias imagens utilizamos a função "reduce" criada por nós, a fim de comparar os resultados entre a função "reduce" e a função "imresize" com "method = 'nearest' ". Concluímos que os resultados são totalmente idênticos em todos os ensaios. A única diferença encontrada entre as duas funções foi o tempo de execução em que a "imresize" é mais rápida. Redução de imagem no domínio espacial 9