Imagem Digital
•
•
•
•
•
•
Paradigma dos 4 Universos
Imagem no Universo Matemático
Imagem no Universo de Representação (Universo Discreto)
• Amostragem
• Quantização
Imagem no Universo de Codificação:
• Palette de cores
• RGBRGB
• RRGGBB
• Compressão
• formato PPM
• formato BMP
• Biblioteca IM
Processamento de Imagens
• Ampliar e Reduzir
• Realçar e Borrar
• Combinação de Imagens
• Mistura
• Transparência
• Adição e Subtração
• Morphing
Outros Assuntos
• Dithering
• Sprites
• Animações (?)
Paradigma dos 4 Universos
Exemplo:
VOZ HUMANA
Universo
Físico
Universo
Matemático
Universo de
Representação
Discretização
(Amostragem)
8
Universo de
Implementação
9
8
7
8
9
7
8
9
9
7
8
Representação
(Vetor)
8 9 8 7 8 9 7 8 9 9 7 8
Paradigma dos 4 Universos
COR
IMAGEM
Universo
Físico
Cores no
Universo Físico
Imagens no
Universo Físico
Universo
Matemático
Modelos
Matemáticos de
Cor (Espaço)
Funções
no Espaço de Cor
Universo de
Representação
Representação
de Cor
Amostragem e
Quantização
Universo de
Implementação
Especificação
de Cor
Codificação e
Formatos
Imagens como Funções
• Uma linha de uma imagem PB: Domínio 1D
• Uma imagem PB:
Domínio 2D
• Uma imagem Colorida: Domínio 3D (?)
Amostragem
• Discretização espacial
• Resolução (XxY pixels)
Quantização
• Discretização no espaço de cores (redução das cores usadas)
• Critérios para escolha das cores (exemplos em 256 cores):
• Quantização Uniforme (256 cores)
• Algoritmo de Populosidade (16 cores)
• Quantização por Aglumeração (16 cores)
Imagem Original (24 bits)
Digitalização de Imagens
quantização
64x53 – 256 cores
315x260 – 256 cores
15
15
15
15
15
15
15
15
10
12
13
5
15
15
15
15
10
09
11
15
15
15
15
13
12
10
15
15
15
15
08
06
12
15
15
15
15
15
15
15
15
15
amostragem
64x53 - 16 cores
codificação
Codificação
• Imagem no Universo de Codificação:
• Palette de cores
• RGBRGB
• RRGGBB
• Compressão
• formato PPM
• formato BMP
• Biblioteca IM
Obs: Imagens em formato raster (não vetorias)
Palette de Cores
• Geralmente com 256, 16 ou 4 cores
Red
Green
Blue
255
0
0
180
148
149
132
123
125
Os pixels da imagem
fazem referência aos
índices da Palette
202
99
143
15
15
15
15
15
15
15
198
71
163
88
43
45
15
10
12
13
5
15
15
8
8
175
15
15
10
09
11
15
15
105
109
105
15
15
13
12
10
15
15
124
124
116
15
15
08
06
12
15
15
179
173
159
214
193
165
15
15
15
15
15
15
15
231
214
198
247
231
222
198
148
132
65
36
31
206
206
206
Palette
RRGGBB
Plano de Cores
Azul
Verde
Verm.
06
Informação é uma
componente da
cor
06
07
08
09
...
00
01
02
03
04
05
06
Organização dos pixels de
uma imagem por planos
de cores
RRGGBB
• Declaração em C das matrizes R, G e B de uma imagem
colorida com resolução 200x300?
• Qual o tipo a ser usado?
• int, float, char, double ou void ?
• short ou long ?
• unsigned ?
unsigned char R[60000], G[60000], B[60000];
• Atenção! Normalmente são ponteiros cujo espaço são
alocados dinamicamente (malloc).
RGBRGB
0
0
1
2
3
...
h-1
1
2
00 01 02 03 04 05 06 07 08
...
w-1
09 10 11
12 13 14
15 16 17 18 ...
y
Pixel (x,y) de uma imagem WxH
offset=3*(w*y+x);
red
= rgb_vector[offset];
green = rgb_vector[offset+1];
blue = rgb_vector[offset+2];
x
Compressão de imagens
Compressão de
Imagens
Sem Perda


Preserva exatamente o
conteúdo da imagem
Taxas de compressão
3:1
Com Perda


Preserva de forma
controlada o nível de
qualidade da imagem
Taxas de compressão
que chegam a valores
de mais de 100 : 1
Métodos de compressão


Sem perdas
» Run length encoding (RLE) - repetição
» Huffman coding - histograma
» Predictive coding - diferenças
» Block coding (LZW) - dicionário
Com perdas
» Truncation coding - reduz a representação
» Predictive coding - descarta diferenças altas
» Block coding - dicionário aproximado
» Transform coding - descarta frequencias altas
Métodos compostos: JPEG, MPEG
Processo de compressão e
descompressão
Dados da
Imagem
Original
Dados da
Imagem
Original
32, 45, 57,
68, 23, 100,
98, ...
32, 45, 57,
68, 23, 100,
98, ...

Compressão
da imagem

Descompressão
da imagem
32, 45, 57,
68, 23, 100,
98, ...
Imagem Comprimida
Transporte e/ou
Armazenamento
32, 45, 57,
68, 23, 100,
98, ...
Imagem Comprimida
Compressão - RLE
Objetivo
Reduzir a quantidade de dados
redundantes.
Exemplo
AAAAAAxxx
6A3x
Caracterísiticas
Simples e rápido, porém a eficiência
depende da imagem a ser comprimida.
Codificação de Huffman
s
p
a2
0.4
a6
0.3
a1
0.1
a4
0.1
a3 0.06
a5 0.04
0.4
0.3
0.1
0.1
0.1
s
probabilidade
a2
0.4 1
0.4 1
a6
0.3 00
0.3 00
a1
0.1 011
0.1 011
a4
0.1 0100
0.1 0100
a3 0.06 01010
0.1 0101
a5 0.04 01011
0.4
0.3
0.2
0.1
0.4
0.3
0.3
0.4 1
0.3 00
0.2 010
0.1 011
0.6
0.4
0.4 1
0.3 00
0.3 01
0.6
0.4
0
1
Redundância de Codificação
r
p(r)
Code 1
l(r)
l(r)p(r)
Code 2
l(r)
l(r)p(r)
0
1/7
2/7
3/7
4/7
5/7
6/7
1
0.19
0.25
0.21
0.16
0.08
0.06
0.03
0.02
000
001
010
011
100
101
110
111
3
3
3
3
3
3
3
3
0.57
0.75
0.63
0.48
0.24
0.18
0.09
0.06
11
01
10
001
0001
00001
000001
000000
2
2
2
3
4
5
6
6
0.38
0.50
0.42
0.48
0.32
0.30
0.18
0.12
Lavg=
2.70
1.00
Lavg=
3.00
rk = tons de cinza em uma imagem, k=0, 1, ..., -1
p(rk) = nk / n
onde nk = número de pixels com tom rk
n = número de pixels da imagem
01 10 11
001
 -1
Lavg   l rk prk 
k 0
0001
00001
000000 000001
Formato PPM
• File_signature "P6".
• White_space (blanks, TABs, CRs, LFs).
• Width, w, (ASCII decimal characters).
• White_space (blanks, TABs, CRs, LFs).
• Height, h, (ASCII decimal characters).
• White_space (blanks, TABs, CRs, LFs).
• Max_color, max, (ASCII decimal characters).
• White_space (blanks, TABs, CRs, LFs).
• Pixels, (3*w*h bytes rgb components of pixels)
• Comments from # to the end of line
• lines  70 characters
Formato PPM
exemplo
P6
# Created by Paint Shop Pro
358 539
255
=?:?A<AC>CE@EFAFGBGHCGHCGHB . . .
Gravação em PPM
int ppm_write(int w, int h, unsigned char *rgb,
char *file_name)
{
FILE *fp;
fp = fopen(file_name, "wb");
if (fp == NULL)
return 0;
if (fprintf(fp, "P6\n%d %d\n255\n", w, h) <= 0)
{
fclose(fp);
return 0;
}
if (fwrite(rgb, 3*w*h, 1, fp) != 1)
{
fclose(fp);
return 0;
}
fclose(fp);
return 1;
}
Microsoft Windows
Bitmap - BMP
Características Principais
Mono, 4-bit, 8-bit, 24-bit
 Tipo de compressão: RLE / não comprimido
 Tamanho máximo: 64K x 64K pixels
 Seções (versão 3):

Header
Info. Header
Palette
Bitmap Data
BMP - Header
typedef struct _Win3xBitmapHeader
{
WORD
DWORD
WORD
WORD
DWORD
Type;
/* Image file type 4D42h (“BM”)*/
FileSize;
/* File size (bytes)
*/
Reserved1; /* Reserved (always 0) */
Reserved2; /* Reserved (always 0) */
Offset;
/* Offset to bitmap data in bytes */
} WIN3XHEAD;
BMP - Information Header
typedef struct _Win3xBitmapInfoHeader
{
DWORD Size;
/* Size of this Header (40) */
DWORD Width;
/* Image width (pixels) */
DWORD Height;
/* Image height (pixels) */
WORD Planes;
/* Number of Planes (always=1) */
WORD BitCount;
/* Bits per pixel (1/4/8 or 24)*/
DWORD Compression;
/* Compression (0/1/2) */
DWORD SizeImage;
/* Size of bitmap (bytes) */
DWORD XPelsPerMeter; /* Horz. resol.(pixels/m)
*/
DWORD YPelsPerMeter; /* Vert. resol.(pixels/m) */
DWORD ClrUsed;
/* Num of colors in the image */
DWORD ClrImportant;
/* Num of important colors */
} WIN3XINFOHEADER;
BMP - Palette
typedef struct _Win3xPalette
{
RGBQUAD Palette[ ]; /* 2, 16, or 256 elem.*/
} WIN3XPALETTE;
typedef struct _Win3xRgbQuad
{
BYTE
Blue;
/* 8-bit blue component
BYTE
Green; /* 8-bit green component
BYTE
Red;
/* 8-bit red component
BYTE
Reserved;
/* Reserved (= 0)
*/
} RGBQUAD;
*/
*/
*/
BMP - Image Data
Notas
Cada scan line em um arquivo BMP é sempre
um múltiplo de 4.
Imagens com1-, 4-, e 8-bits usam uma palheta
de cores.
Imagens com 24-bits guardam a cor diretamente,
na ordem azul, verde e vermelho (RGBRGB).
O armazenamento da imagem é sempre feito a
partir do canto esquerdo inferior.
Biblioteca IM

O objetivo desta biblioteca é ler e escrever imagens
bitmaps em formatos raster, tais como BMP, PCX, GIF,
TIF, etc...

Plataformas: Linux (PC), AIX (RISC), IRIX (Silicon
Graphics), SunOS (SUN) e Windows (PC)

Trabalho desenvolvido no TeCGraf, através do
convênio PETROBRAS/CENPES

Para receber uma cópia, vá em:
http://www.tecgraf.puc-rio.br/download

Manual está disponível em:
http://www.tecgraf.puc-rio.br/im

No Guia existem exemplos como imconvert e imview
Formatos no IM
Quadro Comparativo
PCX
BMP
TIF
SGI
RAS
GIF
JPG
TGA
LED
8 BPP
Not Compressed
Compressed
Read
Write
Read
Write
Ok
OkN
Ok
Ok
Ok
Ok
Ok
Ok
Ok
Ok
Ok
Ok
Ok
OkG
Ok
???
Ok
Ok
***
???
----Ok
Ok
----Ok
OkG
Ok
Ok
Ok
Ok
Ok
Ok
-----
24 BPP
Not Compressed
Compressed
Read
Write
Read
Write
Ok
OkN
Ok
Ok
Ok
Ok
----Ok
Ok
Ok
Ok
Ok
Ok
Ok
???
Ok
Ok
***
???
------------Ok
Ok
Ok
Ok
Ok
Ok
---------
Legenda:
Ok - Implementado e funcionando de acordo.
OkG - Somente como gray scale.
OkN - Não recomendado.
--- - Não aplicável.
??? - Não implementado pois não tem documentação.
*** - Implementado mas sem exemplos para testes.
Funções do IM

Cor

»
»
»
»
» imEncodeColor
» imDecodeColor

Informação
» imFileFormat
» imImageInfo


imLoadRGB
imSaveRGB
imLoadMap
imSaveMap
imRGB2Map
imMap2RGB
imRGB2Gray
imMap2Gray
Tamanho
» imResize
» imStretch
I/O
»
»
»
»
Conversão

Controle
» imVersion
» imRegisterCallback
Funções do IM
int imImageInfo(char *filename, int *width, int
*height, int *type, int *pal_size);

Retorna informações sobre a imagem em determinado
arquivo. Retorna IM_ERR_NONE, IM_ERR_OPEN,
IM_ERR_READ, IM_ERR_FORMAT, IM_ERR_TYPE ou
IM_ERR_COMP.

Image types:
» IM_RGB - 3 buffers separados (Red, Green and Blue)
» IM_MAP - 1 buffer e uma tabela de cores
Funções do IM
int imLoadRGB(char *filename,
unsigned char *red, unsigned char *green,
unsigned char *blue);

Lê uma imagem RGB de um determinado arquivo.

É necessário usar a função imImageInfo para poder
reservar memória para os ponteiros red, green e blue
antes de ler a imagem.
Funções do IM
int imSaveRGB(int width, int height, int format,
unsigned char *red, unsigned char *green, unsigned
char *blue, char *filename);

Salva uma imagem RGB em determinado arquivo e formato.

Para especificar o formato realize um "ou" binário entre o
identificador do formato e o identificador da compressão.
Ex: (IM_BMP | IM_COMPRESSED)

File Format:
» IM_BMP, IM_PCX, IM_RAS, IM_GIF, IM_SGI, IM_TIF, IM_JPG,
IM_LED, IM_TGA

Format Compression
» IM_NONE, IM_DEFAULT, IM_COMPRESSED
Funções do IM
int imLoadMap(char *filename, unsigned char *map,
long *colors);

Lê uma imagem indexada de um determinado arquivo.

É necessário usar a função imImageInfo para poder reservar
memória para os ponteiros map e color.
int imSaveMap(int width, int height, int format,
unsigned char *map, int pal_size, long *colors,
char * filename);

Salva uma imagem indexada em determinado arquivo e formato.
Funções do IM
long imEncodeColor(unsigned char red, unsigned char
green, unsigned char blue);

Converte uma cor no formato RGB para o formato interno da IM.
void imDecodeColor(unsigned char* red, unsigned
char* green, unsigned char* blue, long color);

Converte uma cor no formato interno da IM para o formato RGB.
Download

Imagem - Rodrigodetoledo.com