CES11 LAB 03 Bitmap Quadtree Carlos Henrique Q
CES-11 LAB 03 Bitmap Quadtree Carlos Henrique Q. Forster – Instituto Tecnológico de Aeronáutica 2010
Bitmap • Um bitmap é uma matriz de bits que representa uma imagem Podemos definir 1=preto, 0=branco
Quadtree • Uma Quadtree é uma árvore quaternária e geralmente está associada à decomposição espacial em quadrantes
Compressão de Imagem • Compressão de imagem é uma forma de codificar uma imagem para reduzir o espaço que ocupa em memória ou disco. – Todo método de compressão assume uma característica dos dados para a qual a codificação toma um espaço pequeno – Se essa condição não é cumprida, pode ser que eventualmente o tamanho codificado seja maior que o tamanho original (muito raro)
Compressão com quadtree • A compressão com quadtree assume que há grande probabilidade de regiões vizinha terem a mesma cor • Assim, uma região que tem todos os pixels (elemento da imagem) com a mesma cor, é codificada com apenas 2 bits
Nós da quadtree • Há dois tipos de nós na quadtree: – Os nós que correspondem a regiões de uma única cor Esses nós são • Branco • Preto B folhas da árvore P – Nós que correspondem a regiões com as Esses nós são duas cores nós internos de grau 4 da árvore
Codificando o bitmap • O bitmap é particionado sempre que não for de uma só cor
Árvore final
Codificação em bits • Cada vez que for gerada uma folha, coloca-se o bit 0 e em seguida o bit correspondente à cor (0=branco 1=preto) • Cada vez que for gerada uma ramificação (nó interno), coloca-se o bit 1 e em seguida a codificação de cada subárvore em seqüência
Ou seja. . . 00 01 1. . . 1000000101010000 Codificação: 1000000101010000 00 01 101010000 01 00 00 Curiosamente, tomou o mesmo espaço (16 bits) que a codificação original
Para a imagem grande: Codificação: 1 1000000101010000 11000001000110100 1001000001010000 101101000000101000000 93 bits agora!! Maior que os 64 originais
E se eu guardar as dimensões da imagem? • Boa idéia: – Assim, posso representar imagens cujas dimensões não são potências de 2 (basta ignorar os pontos fora da região, considerando-os brancos ou pretos conforme a conveniência) – Posso também codificar as folhas no último nível com apenas 1 bit 0=branco 1=preto, já que é sabido que não haverá ramificações!!
Nova codificação: Se nível=max 00 01 0 1 1. . . 100000011100 Codificação: 100000011100 00 1 11100 1 Agora 12 bits, mas tive que guardar o tamanho 4 x 4 0 0
Novamente para a grande: Codificação: 1 100000011100100111110 100100110000 101111000 61 bits agora!! Ainda guardo o tamanho 16 x 16
Tarefa • Escrever um programa para: – Ler um arquivo BMP (matriz de bits) preto-e-branco para a memória. – Construir uma árvore quadtree a partir do bitmap. – Gerar um arquivo binário cujos bits representem a imagem codificada pela quadtree. • Escrever outro programa para: – Ler a quadtree de um arquivo salvo pelo seu programa. – Gerar um arquivo BMP com a imagem decodificada.
Material • É fornecido um código de programa que: – Lê um arquivo BMP preto e branco para uma estrutura em bytes na memória, – Escreve um arquivo BMP dada a estrutura da matriz de pixels, – Lê e escreve bit por bit em um arquivo binário aberto • Dica: pode ser mais fácil construir a árvore começando das folhas, através de chamadas recursivas.
Conclusões • Veja quanto de uma imagem é possível comprimir. • Teste com uma imagem maior, como o exemplo pagina. bmp e veja a razão entre o tamanho da imagem original e da quadtree. • Veja o quanto essa razão varia para imagens diferentes. • Explique características de uma imagem dificultam ou facilitam a compressão.
- Slides: 17