Uploaded by guilherme simoes

Amostragem, interpolação e quantização. Um estudo em Python

PROJETO 2 AMOSTRAGEM, INTERPOLAÇÃO E QUANTIZAÇÃO
Guilherme Simões Dias - 160123364
Engenharia Eletrônica, UnB-FGA, Brası́lia, Brasil
ABSTRACT
Este projeto busca explorar os conceitos de resolução espacial
e resolução em nı́veis de cinza e os diferentes métodos existentes de manipulação, como a interpolação e a quantização.
Index Terms— resolução, interpolação, quantização.
1. INTRODUÇÃO
Fig. 1. Banco de imagens. (a) Ponte, (b) Face, (c) Cameramen, (d) Rosa.
3. DESENVOLVIMENTO
3.1. Subamostragem
Este projeto busca introduzir conceitos sobre amostragem de
imagens, intensidade de quantização e interpolação. Demonstrando seus efeitos na resolução espacial e de intensidade das
imagens.
A resolução espacial, como descrita por [1] é a medida do
menor detalhe discernı́vel em uma imagem ou então como
o número de pontos (pixels) por unidade de distância. A
interpolação está atrelada a esta resolução, realizando tarefas como ampliação e redução de escala, rotação e correção
geométrica de imagens. No entanto, neste projeto abordaremos apenas a ampliação e redução das imagens, que são processos de amostragem e re-amostragem que fazem uso de dados existentes para estimar valores coordenadas desconhecidas.
Já a resolução de intensidade é descrita como o menor
detalhe discernı́vel na mudança do nı́vel de intensidade.
Sendo que os nı́veis de intensidade são os responsáveis pela
coloração da imagem em diferentes tons. O nı́vel de intensidade mais comum é de 8 bits, que representa 256 tons
diferentes, e que é o nı́vel das imagens usadas neste projeto.
O procedimento de subamostragem no processamento de imagens tem como objetivo reduzir o número de pixel de uma
imagem, o método desenvolvido para essa tarefe consiste em
descartar amostras igualmente espaçadas durante toda a imagem.
Para isso, a imagem original é percorrida em relação as
suas dimensões x, y e seus pixels de interesse são enviados
para uma nova imagem. A escolha desses pixels de interesse
vão de acordo com o grau de redução que se deseja obter, por
exemplo, se desejamos obter uma imagem com a metade do
tamanho da imagem original, durante a varredura será enviado o primeiro pixel na posição (0, 0) e será descartado o
próximo em (0, 1), sendo o próximo enviado o (0, 2) e o
descartado (0, 3), processo repetido para todas as linhas da
imagem. Portanto, se a imagem possuı́a 500 pixels inicialmente, após a subamostragem de grau 2 ela apresentará 250
pixels.
Para testar o precedimento, foi aplicado a subamostragem
na imagem da face, figura x, reduzindo sua resolução espacial
inicial de 512 x 512 pixels para 256 x 256 pixels, 128 x 128
pixels, 64 x 64 pixels e 32 x 32 pixels.
2. OBJETIVO
A partir das imagens fornecidas pelo banco de dados da disciplina, realizar processos de leitura e manipulação para redimensionar e quantizar imagens. Desenvolvendo programas
no GNU OCTAVE, MATLAB ou PYTHON 3 sem fazer uso
de funções já prontas.
Fig. 2. Efeitos da redução da resolução espacial.
3.2. Interpolação
A interpolação pode ser definida como um método para criar
dados com base nos dados já existentes. Método usado no
processamento de imagens para aumentar uma imagem, em
que por meio de diversas estratégias são criados novos pixels
com valores estimados para se obter uma imagem ampliada o
mais próximo da original.
caso, duplicando o valor para a direita e por fim duplicando
todos os valores da linha conhecida para a linha abaixo.
3.2.1. Interpolação de vizinho mais próximo
O primeiro tipo de interpolação a ser estudado é a interpolação
de vizinho mais próximo, que tem como fundamento designar o valor de um pixel conhecido para o pixel desconhecido
mais próximo.
Para exemplificar digamos que tenhamos uma imagem
de 4 x 4 pixel representada por uma tabela 2x2 e desejamos
amplifica-la por um fator 2.
Fig. 5. Processo de interpolação por vizinho mais próximo,
parte 3.
Este processo pode ser aplicado, por exemplo, nas imagens geradas pela subamostragem apresentadas na Fig,2 para
retorna-las ao seu tamanho original.
Fig. 3. Processo de interpolação por vizinho mais próximo,
parte 1.
A matriz resultado apresenta o dobro de pixels que a original, logo, é preciso traçar uma estratégia para preencher as
lacunas. Inicialmente podemos transferir cada uma das linhas
da imagem original para o nova com um espaçamento de um
pixel entre as amostras.
Fig. 4. Processo de interpolação por vizinho mais próximo,
parte 2.
Desta forma, temos dados conhecidos alocados nas proximidades de todas as lacunas e podemos então copiar os valores de cada posição para o seu vizinho mais próximo, neste
Fig. 6. Efeito da amplificação da resolução espacial pelo
método da interpolação por vizinhos mais próximos.
3.2.2. Interpolação bilinear
A interpolação bilinear, assim como seu nome sugere, faz uso
da interpolação linear em dois sentidos (vertical e horizontal).
Extraindo informações dos quatro vizinhos mais próximos
para criar um argumento de valor proporcional a influencia
exercida pelos vizinhos.
Para um melhor entendimento, vamos exemplificar como
funciona uma interpolação linear. Olhando para a Fig.7 podemos identificar dois pontos com valores conhecidos (0,0) e
(0,3) e queremos encontrar o valor de (0,1), para isso devemos
calcular o polinômio linear formado pelos valores multiplicados pelo peso (a influencia do argumento relativo a distância
até o novo ponto).
Q(0, 1) =
x − x1
x2 − x
× Q(0, 0) +
× Q(0, 3)
x2 − x1
x2 − x1
Q(0, 1) =
3−1
1−0
× 10 +
× 20
3−0
3−0
Q(0, 1) = 13
Fig. 7. Exemplo de interpolação linear entre dois pontos.
Este procedimento quando aplicado nas duas direções
(colunas e linas) é denominado de interpolação bilinear. Para
o melhor entendimento, nas figuras abaixo esta apresentado
o exemplo proposto por [2] em que é aplicado a interpolação
entre 4 pixels localizados em (0,0), (0,1), (1,0) e (1,1) para
encontrar o valor presente em (0.3, 0.4).
Fig. 8. Processo de interpolação bilinear, parte 1.
Fig. 10. Efeito da amplificação da resolução espacial pelo
método da interpolação bilinear.
3.3. Quantização
Uma imagem digital é formada por pixels com diferentes valores que determinam a sua cor. Para uma imagem em escala de cinza esses valores se limitam a 8-bit, ou seja um
valor 0 para um pixel pode ser expresso em sua forma binária
00000000, de mesma maneira, o maior valor que pode ser
expresso em binário 11111111 é o mesmo que 255.
Sabe-se que em um número binário o bit mais significativo é o que mais contribui para o range de valores que podem
ser formados, por exemplo número com 7 bits é apenas capaz
de expressar até 27 ou 127 valores diferentes. Portando os
bits menos significativos, de forma análoga, são os que menos
contribuem na formação da imagem.
Portanto, podemos realizar um procedimento de bit-plane
slicing para separar cada um dos bits da imagem e selecionar
apenas os bits de interesse para a formação de uma nova imagem como mostrado na figura abaixo.
O primeiro passo é refletir esse ponto para as fileira obtendo A:(0,0.4) e B:(1,0.4) para então realizar a interpolação
linear para cada um dos pontos em relação aos pixels na horizontal.
Fig. 9. Processo de interpolação bilinear, parte 2.
Para somente então realizar a segunda interpolação entre
A e B, obtendo assim o valor final para o pixel na posição
(0.3, 0.4).
Aplicando esse método nas imagens subamostradas da
Fig.2 podemos observar o efeito da amplificação em relação
a imagem original.
Fig. 11. Demonstração do procedimento de bit-plane slice.
Desta forma, a quantização busca diminuir o número de
bits usados na formação da imagem de forma a diminuir/comprimir
a imagem sem comprometer o seu entendimento. Para
demonstrar este procedimento a Fig.1(d) foi manipulada
tendo seus bits por pixel reduzidos de 8 para 7, 6, 5, 4, 3, 2 e
1, sempre descartando o bit menos significativo.
Em sequência, cada uma das quadro imagens geradas a
partir das figuras originais tiveram seu número de bits por
pixel reduzido de 8 para, respectivamente, 6, 5, 4, 3. Formando assim um total de 16 imagens por figura.
Fig. 12. Efeito da quantização na resolução em bits de uma
imagem.
3.3.1. Alteração simultânea da resolução espacial e da
resolução em bits
Com o conhecimento acumulado até este tópico, é possı́vel
realizar um experimento para avaliar o efeito da alteração
simultânea da resolução espacial e da resolução em bits de
uma imagem. Para isso, foram selecionadas três imagem com
nı́veis de detalhes diferentes sendo essas a Fig.1(a) (nı́vel
alto), Fig.1(c) (nı́vel moderado) e Fig.1(d) (nı́vel baixo).
Aplicando nelas os métodos de subamostragem e posteriormente quantização.
As três imagens selecionadas apresentam uma resolução
de 512 x 512 pixels e foram subamostradas para 256 x 256,
128 x 128, 64 x 64 e 32 x 32 pixels descartando amostras.
(a) Imagens com resolução de 6 bits por pixel.
(a) Imagem da ponte subamostrada.
(b) Imagens com resolução de 5 bits por pixel.
(b) Imagem do cameramen subamostrada.
(c) Imagens com resolução de 4 bits por pixel.
(c) Imagem da flor subamostrada.
(d) Imagens com resolução de 3 bits por pixel.
Fig. 13. Resultados obtidos a partir do processo de subamostragem com descarte de amostras para as resoluções 256
x 256, 128 x 128, 64 x 64 e 32 x 32 pixels respectivamente.
Fig. 14. Resultados obtidos a partir da redução de bits por
pixel das imagens subamostradas presentes na Fig.13(a).
(a) Imagens com resolução de 6 bits por pixel.
(a) Imagens com resolução de 6 bits por pixel.
(b) Imagens com resolução de 5 bits por pixel.
(b) Imagens com resolução de 5 bits por pixel.
(c) Imagens com resolução de 4 bits por pixel.
(c) Imagens com resolução de 4 bits por pixel.
(d) Imagens com resolução de 3 bits por pixel.
(d) Imagens com resolução de 3 bits por pixel.
Fig. 15. Resultados obtidos a partir da redução de bits por
pixel das imagens subamostradas presentes na Fig.13(b).
Fig. 16. Resultados obtidos a partir da redução de bits por
pixel das imagens subamostradas presentes na Fig.13(c).
4. DISCUSSÃO E CONCLUSÃO
A partir da visualização e da análise das imagens formadas
podemos compreender os efeitos de cada um dos métodos
aplicados.
Em relação ao processo de subamostragem com descarte
de amostras temos que a cada redução, informação é perdida. Como visto na Fig.13 temos que nas imagens com
maior número de detalhes essa redução acaba por dificultar a interpretação da imagem mas em figuras mais simples,
mesmo tendo seus pixels reduzidos em quase 90%, sua compreensão continua fácil.
A interpolação por vizinho mais próximo (nni) é um
método de rápida execução e com baixo custo operacional
devido a pouca necessidade de cálculos. No entanto, devido
ao fato deste metodo apenas replicar os pixels mais próximos,
a imagem resultante acaba se tornando ”pixelada” pois esta
operação apenas transforma os pixels presentes em blocos de
mesmo valor.
Em comparação com o método de nni, a interpolação bilinear gera imagens mais suaves pois o valor dos pixels criados é uma combinação dos pixels ao seu redor. Contudo,
esse processo demanda mais cálculos para ser executado e
tem como efeito negativo a formação de imagens com menos
contraste entre os contornos.
Apesar dos pontos negativos, a interpolação bilinear é
uma ótima escolha para ampliação de imagens como pode ser
visto na Fig.17 que apresenta a imagem da diferença entre
cada imagem interpolada em relação a original por meio da
função absolute difference da biblioteca Numpy.
Fig. 17. Diferença entre cada imagem interpolada de forma
bilinear em relação a original.
O resultado obtido da quantização das imagens nos mostra
que é possı́vel reconstruir, de forma quase idêntica, a imagem
original fazendo uso de menos bits. Isso ocorre pelo fato de
que os bits finais detêm a maior parte da informação da imagem, enquanto bits iniciais quase não produzem diferença.
Dessa forma, podemos fazer uso de menos bits para armazenar uma imagem, ocupando assim um menor espaço.
Portanto, este método possui uma boa aplicação no processo
de compressão de imagens.
5. REFERENCES
[1] Rafael C. Gonzales and Richard E. Woods, Processamento Digital de Imagens, Pearson, 4 edition, 2018.
[2] TheAILearner, “Image processing,” Janeiro 2019.