Imagem Digital Conceitos, Processamento e Análise
description
Transcript of Imagem Digital Conceitos, Processamento e Análise
Imagem DigitalConceitos, Processamento e Análise
1. Imagem e funções
2. Imagem digital: amostragem, quantização e codificação
3. Re-amostragem de funções
Parte 1: Conceitos básicos
Imagem: Modelo Matemático: Função
u
v
L
L(u,v)
Função
0%
20%
40%
60%
80%
100%
Nív
eis
de c
inza
Posição ao longo da linhax
C 2,0,0: hwL
Lv
u
Imagem colorida
R
G
Bu
v
Imagem coloridas como 3 canais de cor
canal vermelho
canal verde
canal azul
Imagem Digital
Amostragem, quantização e codificação
Amostragem, quantização e codificação de f(x)
x
f(x)
amostra
partição do eixo x
codificação = (3, 4, 5, 5, 4, 2, 2, 3, 5, 5, 4, 2)
Amostragem, quantização e codificação de f(x)
0
1
2
3
4
5
6
x
f(x)
amostraquantizada
Anatomia das máquinas atuais
Câmeras atuais
Digitalização de Imagens
Discretização espacial (amostragem)
Processos básicos
Imagem de tons contínuos
64x54
Imagem amostrada
amostragem
64x54 - 16 cores
Imagem amostrada equantizada
quantização
55 55 55 55 55 55 55
55 20 22 23 45 55 55
55 55 10 09 11 55 55
55 55 43 42 70 55 55
55 55 28 76 22 55 55
55 55 55 55 55 55 55
codificação8*55, 1*20, 1*22, 1*23, ….
Imagem amostrada, quantizada e codificada
Imagem Digital: Histogramas
Uma outra maneira de ver a informação da imagem: probabilidade deocorrência de um determinado valor, uso do intervalo [0,255], contraste,...
Histogramas de Imagem Colorida
Propriedades básicas de uma Imagem Digital
(a) aumento de resolução
Problemas associados a re-amostragem de um sinal digital f(x)
x
f(x)
função reconstruídapelo vizinho mais próximo
função reconstruídapor interpolação linear
0
1
2
3
4
5
6 função original
Re-amostragem de f(x)
x
f(x)
função reconstruídapelo vizinho mais próximo
função reconstruídapor interpolação linear
função original
(b) redução de resolução
0
1
2
3
4
5
6
Freqüência de Amostragem
x
f(x)
x
f(x)
Parte 2 - Eliminação de ruídos e realce de arestas
Aplicações da Transformada de Fourier
Imagem DigitalConceitos, Processamento e Análise
Redução de ruídos
• Dada uma imagem I com um ruído n, reduza n o máximo que puder (preferencialmente elimine n completamente) sem alterar significativamente I.
),(),(),(ˆ jinjiIjiI
n
sSNR
n
sdBSNR
10log10
100n
s
20 dB significam
Dois tipos básicos de ruídos
• Ruído Gaussiano branco : processo estocástico de média zero, independente do tempo e dos espaço.
2
2
2
2
1)(
x
exG
0),( jin
),(~),( 00 jjiinjin é o mesmo processo estocástico que não varia no tempo.
),( jin é uma variável aleatória com a distribuição:
Dois tipos básicos de ruídos
• Ruído impulsivo: causado por erro de transmissão, CCDs defeituosos, etc... Também chamado de pico e de sal e pimenta.
lxiiyi
lxjinsp )(
0),(
minmaxmin
1,0, yx são v.a. uniformemente distribuídas
imin, imax, e l são parâmetos de controle da quantidade de ruídos.
Exemplo de ruído Gaussiano (=5) e Impulsivo ( =0.99)
Imagem com ruído impulsivo
223 204 204 204 204 204 204 204 204 204 204 204 204 223
171 120 120 120 18 120 50 120 120 120 120 120 120 171
171 120 120 120 116 120 120 120 120 120 120 120 120 171
138 120 120 120 120 120 50 120 97 120 120 120 120 171
171 120 120 120 120 120 120 120 120 120 187 120 120 242
172 120 120 120 120 120 120 120 120 120 120 120 120 171
171 120 120 120 120 120 179 120 120 120 120 167 120 171
171 120 120 120 120 120 120 235 120 120 120 120 120 171
171 120 120 120 120 120 120 235 120 76 175 120 120 171
171 120 120 120 120 120 120 120 120 120 120 120 120 171
171 120 120 120 120 120 120 120 123 120 120 214 120 114
171 120 120 120 120 120 120 120 120 120 120 120 143 171
171 120 120 120 232 120 120 198 120 120 120 120 120 171
203 171 171 171 171 171 171 171 171 205 171 171 171 203
Uso da mediana
Iij = mediana Ωij
Sinal com ruído
:= ( )f3 x 10 ( )cos 2 x 6 ( )sin 10 x .8 ( )cos 40 x
-20
-15
-10
-5
0
5
10
15
20
Suavização
f
h
4
2 11 iii
i
fffh
Filtragem Gaussiana
-20
-15
-10
-5
0
5
10
15
20
w1+w2+w3 filtro w1+w2
Mascara ou Filtro
4
2 11 iii
i
fffh
1
0)(
n
kiiki fgh
10
14/1
04/2
14/1
10
lse
lse
lse
lse
lse
gl
ou:
Convolução
t
t
dtxfxtgxh )()()(
1
0)(
n
kiiki fgh
duuxgufgfxh )()()(
Ilustação da convolução
t
t
dtxfxtgxh )()()(
Ilustração da convolução
t
t
dtxfxtgxh )()()(
Discretização da Gaussiana 1D
0.1
0.2
0.3
-4 -3 -2 -1 0 1 2 3 4
2
2
2
2
1)(
x
exG
1214
1 14641
16
1
161520156164
1
Discretização da Gaussiana 2D
2
22
2
2
1),(
yx
eyxG
121
242
121
16
1
14741
41626164
72641267
41626164
14741
273
1
Separabilidade do filtro gaussiano
207 247 38 131 38
62 90 129 234 231
211 175 44 1 26
236 58 75 128 112
210 141 125 168 58
121
242
121
16
1
130 117 129
125 90 88
129 93 92
1
2
1
4
1
1214
1
185 113 84
93 145 207
151 66 18
107 84 111
154 140 130
130 117 129
125 90 88
129 93 92
Imagem filtrada com um filtro passa baixa
Arestas e cantos
• Locais de mudanças significativas na intensidade da imagem
Edgedels = edge elements
Tipos de arestas
degrau(step) rampa(ramp)
cume(roof) impulso(spike)
Gráfico sem e com ruído
Derivadas e arestas
f(x) f(x)+n(x) | f'(x)+n'(x) | f"(x)+n"(x)
Série de Taylor
)()(2
)()()()()( 3"
2' xOxf
xxfxxfxxf
iiii ffff "'1 2
1
Com x=1, f(x)=fi e f(x+x)=fi+1
Com x=-1, f(x)=fi e f(x+x)=fi-1
iiii ffff "'1 2
1
(a)
(b)
Aproximações para derivadas
(a-b) 2/)( 11'
iii fff 2/)( 11'
iii fff
(a+b) )2( 11"
iiii ffff )2( 11"
iiii ffff
f(x)
x
fi-1
fi fi+1
i+1ii-1
Em 2D
y
fx
f
yxf ),(
Gradiente
Laplaciano
2
2
2
22 ),(
y
f
x
fyxf
x
yxfyxf
x
yxf mnmn
,,, 1
x
yxfyxf
y
yxf mnmn
,,, 1
11
1
1
Convolution Kernels
141
4204
141
Finite differences
11* II x
1
1*II y
IKhurram Hassan-Shafique
Classical Operators
Prewitt’s Operator
11
11
11
1
1
11
Smooth Differentiate
101
101
101
111
000
111
111
111
Khurram Hassan-Shafique
Classical Operators
Sobel’s Operator
11
22
11
1
1
11
SmoothDifferentiate
101
202
101
121
000
121
121
121
Khurram Hassan-Shafique
• Sobel Edge Detector
Detecting Edges in Image
Image I
101
202
101
121
000
121
*
*
Idx
d
Idy
d
22
Idy
dI
dx
d
ThresholdEdges
Khurram Hassan-Shafique
Sobel Edge Detector
Idx
d
Idy
d
I
Khurram Hassan-Shafique
Sobel Edge Detector
I
22
I
dy
dI
dx
d
100 ThresholdKhurram Hassan-Shafique
Filtros de realce de bordas
010
141
010Laplaciano
000
010
100
000
010
001
101
202
101
4
1
121
000
121
4
1
Vertical Horizontal
Roberts
Sobel
Gradiente
Imagem filtrada com um filtro passa alta
Filtragem LoG do Juiz Virtual
121
242
121
16
1
filtrogaussiano
010
141
010
filtro laplaciano
LL 255BGRL 11.059.030.0
Parte 3 - Processamentos apenas no espaço das cores
Imagem DigitalConceitos, Processamento e Análise
Correção gamaAjustes de contraste e iluminação
Correção gama
LL
Probabilidade
0 1 x
DF(x)
x0 x1
1
0
)( 10
x
x
dxxDFxxxP x
dxxDFxxPxCDF0
)(0)(
)()( xCDFdx
dxDF
Função de densidade de probabilidade
0 1 x
CDF(x)
1
x
Função de densidade acumulada de probabilidade
Mudança de variavel y = f (x)
)()( yCDFdy
dyDF
0 1 x
y=f(x)
1
0 1 y
1
)(1 yfx
)()( xCDFxf )(xDFdx
dy
1)(
)()(
xDF
xDFyDF
0 1 x
DF(y)1
Transformação monotônica e limitada ao intervalo [0,1]
dy
dxxCDF
dx
d)(
dy
dxxDF )(
Equalização de Histograma
L
j
j
n
nLfL
0
)('
0
0.2
0.4
0.6
0.8
1
1.2
1.4
1.6
1 2 3 4 5 6 7 8 9 10 11
n
n j
L
Equalização do histograma
Tons de cinza e negativo
Lx,y = 0.299Rx,y + 0.587Gx,y + 0.114Bx,y
tons de cinza
Lx,y = 255 - Lx,y
Outros exemplos com o PaintShopProtm
Quantização de cores
Quantização de 24 para 8 bits
A qualidade depende da imagem
Corte mediano
Corte mediano
HDRI (High Dynamic Range Image)
Resultado esperado da Q3 do T1
Parte 4 - Codificação e armazenamento de Imagens
compressão e formatos de arquivos
Imagem DigitalConceitos, Processamento e Análise
Organização de pixels num arrayno formato TGA (targa)
b g r ab g r a bb arg
0 1 …
...
arg
w-1x
y
unsigned char *bgra_vector;…offset=4*(w*y+x);blue = bgra_vector[offset];green = bgra_vector[offset+1];red = bgra_vector[offset+2];alpha = bgra_vector[offset+3];
0
12
h-1
3
Pixel (x,y)
Outra ordem no plano
Tipo Abstrato ImagemImage *imgCreate (int w, int h);
void imgDestroy (Image *image);
int imgGetWidth(Image * image);
int imgGetHeight(Image * image);
float * imgGetRGBData(Image * image);
void imgSetPixel3fv(Image *image, int x, int y, float * color);
void imgSetPixel3ubv(Image *image, int x, int y, unsigned char *color);
void imgGetPixel3fv(Image *image, int x, int y, float *color);
void imgGetPixel3ubv(Image *image, int x, int y, unsigned char *color);
Image * imgReadBMP(char *filename);
int imgWriteBMP(char *filename, Image * image);
Image * imgCopy(Image * image);
Image * imgGrey(Image * image);
Image * imgResize(Image * img0, int w1, int h1);
/*- implementação do tipo Imagem */
struct image_imp
int width; /* largura (width) em pixels */
int height; /* altura (height) em pixels */
float *buf; /* buffer RGB */
;
Arquivos Targa RGBA
Cabeçalho Pixels (bgra,bgra, …,bgra)
/* escreve o cabecalho */
putc(byteZero,filePtr); /* no. de caracteres no campo de id da imagem */
putc(byteZero,filePtr); /* imagem nao tem palheta de cores */
putc(imageType,filePtr); /* = 2 -> imagem "true color" (RGBA) */
putuint(shortZero,filePtr);/* info sobre a tabela de cores (inexistente) */
putuint(shortZero,filePtr); /* idem */
putc(byteZero,filePtr); /* idem */
putuint(shortZero,filePtr); /* =0 origem em x */
putuint(shortZero,filePtr); /* =0 origem em y */
putuint(img->width,filePtr); /* largura da imagem em pixels */
putuint(img->height,filePtr); /* altura da imagem em pixels */
putc(bitDepth,filePtr); /* numero de bits de um pixel */
putc(byteZero, filePtr); /* origem canto inf esquedo sem entrelacamento */
unsigned char imageType=2 /* RGB(A) sem compressão */
unsigned char bitDepth=32; /* 32 bits por pixel */
unsigned char byteZero=0; /* usado para escrever um byte zero no arquivo */
short int shortZero=0; /* usado para escrever um short int zero no arquivo */
Organização de pixels num arrayno formato PPM (o mais simples)
00 01 02 0807060503 04 1009 11
0 1 2
...
1312 14
w-1
15 16 17 18 ...
x
y Pixel (x,y)unsigned char *rgb_vector;…offset=3*(w*y+x);red = rgb_vector[offset];green = rgb_vector[offset+1];blue = rgb_vector[offset+2];
01
2
h-1
3
...
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
P6# Created by Paint Shop Pro358 539255=?:?A<AC>CE@EFAFGBGHCGHCGHB . . .
exemplo
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;
Leitura em PPMint ppm_read(int *p_w, int *p_h, unsigned char **p_rgb, char *file_name) FILE *fp; char line[80]; int rgb_size; int max;
fp = fopen(file_name, "rb"); if (fp == NULL) printf(”Error reading %s",file_name); return 0; fgets(line,80,fp); if(strcmp(line,"P6\n")) printf(”Wrong signature\n"); return 0;
while (fscanf( fp, " %d ", p_w ) != 1) fgets(line, 80, fp);
while (fscanf( fp, " %d ", p_h ) != 1)
fgets(line, 80, fp); while (fscanf( fp, " %d", &max ) != 1)
fgets(line, 80, fp); fgetc(fp); rgb_size=3*(*p_w)*(*p_h); (*p_rgb) = (unsigned char *) calloc(rgb_size, 1); if ((*p_rgb) != NULL) fread( (*p_rgb), rgb_size, 1, fp ); fclose(fp); return 1;
Programa Simplesvoid main(void) int w, h; // dimensões da imagem unsigned char *rgb; // bytes de rgb unsigned char r,g,b,grey; // componentes de cor int x,y; long int k;
if (ppm_read(&w,&h,&rgb,"test_in.ppm")==0) return; for (y = 0; y < h; y++) for (x = 0; x < w; x++) k = 3*(y*w+x); r = rgb[k]; g = rgb[k+1]; b = rgb[k+2]; grey = (unsigned char)(0.3*r+0.6*g+0.1*b); rgb[k] = grey; rgb[k+1] = grey; rgb[k+2] = grey; ppm_write(w, h, rgb, "test_out.ppm"); free(rgb);
Arquivo BMP
00 01 02 0807060503 04 1009 11
Pixel 0 Pixel 1 Pixel 2 Pixel 3
1312 14
Pixel 4
15
16 17 18 ...
colocado para garantir múltiplo de 4
colocado para garantir múltiplo de 4
Organização dos pixels de uma imagem RGB no arquivo BMP
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 Type; /* Image file type 4D42h (“BM”)*/
DWORD FileSize; /* File size (bytes) */
WORD Reserved1; /* Reserved (always 0) */
WORD Reserved2; /* Reserved (always 0) */
DWORD 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.
O armazenamento da imagem é sempre feito a partir do canto esquerdo inferior.
Esquemas de armazenamento de imagens
Verm.
Verde
Azul
Pixe
l 2
Plano de Cores
00 01 02 060503 04
07 08 09 . . .
Pixe
l 0
Pixe
l 5
Pixe
l 4
Pixe
l 3
Pixe
l 1
06
06
Organização dos pixels de uma imagem por planos de cores
Ban
cos
(Jav
a)
Informação é uma componente da cor
(Data Buffer – Java)
Codificação uniforme
Uniforme
tons # pixels código tam. # bits
0 1900 000 3 5700
1/7 2500 001 3 7500
2/7 2100 010 3 6300
3/7 1600 011 3 4800
4/7 800 100 3 2400
5/7 600 101 3 1800
6/7 300 110 3 900
1 200 111 3 600
TOTAL 30000
Podemos melhorar?
Construção da Árvore Huffman
1/7 2500
2/7 2100
0 1900
3/7 1600
4/7 800
5/7 600
6/7 300
1 200
1/7 2500
2/7 2100
0 1900
3/7 1600
4/7 800
5/7 600
n0 500
n0
6/7 1
Construção da Árvore Huffman
1/7 2500
2/7 2100
0 1900
3/7 1600
4/7 800
5/7 600
n0 500
n0
6/7 1
1/7 2500
2/7 2100
0 1900
3/7 1600
n1 1100
4/7 800
5/7
n1
Construção da Árvore Huffman
1/7 2500
2/7 2100
0 1900
3/7 1600
n1 1100
4/7 800
1/7 2500
2/7 2100
0 1900
n2 1900
3/7 1600
n0
6/7 1
5/7
n1 4/7
n2
Construção da Árvore Huffman
1/7 2500
2/7 2100
0 1900
n2 1900
3/7 1600
n3 3500
1/7 2500
2/7 2100
0 1900
n0
6/7 1
5/7
n1 4/7
n2 3/7
n3
Construção da Árvore Huffman
n3 3500
1/7 2500
2/7 2100
0 1900
n0
6/7 1
5/7
n1 4/7
n2 3/7
n3
n4 4000
n3 3500
1/7 2500n4
2/7 0
Construção da Árvore Huffman
n0
6/7 1
5/7
n1 4/7
n2 3/7
n3
n5 6000
n4 4000 n4
2/7 0
n4 4000
n3 3500
1/7 2500n5
1/7
n6
Construção da Árvore Huffman
1 0
11
10 01
00
111 110
1111 1110
1111
1 11110
1111
01
111100
000110
110
1110
11111
111100111101
n0
n1
n2
n3
n4n5
n6
6/7 1
5/7
4/7
3/7
0 2/71/7
Codificação de HuffmanUniforme Huffman
tons # pixels código tam. # bits código tam. # bits
0 1900 000 3 5700 00 2 3800
1/7 2500 001 3 7500 10 2 5000
2/7 2100 010 3 6300 01 2 4200
3/7 1600 011 3 4800 110 3 4800
4/7 800 100 3 2400 1110 4 3200
5/7 600 101 3 1800 11111 5 3000
6/7 300 110 3 900 111101 6 1800
1 200 111 3 600 111100 6 1200
TOTAL 30000 TOTAL 27000
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 0.19 000 3 0.57 11 2 0.38
1/7 0.25 001 3 0.75 01 2 0.502/7 0.21 010 3 0.63 10 2 0.423/7 0.16 011 3 0.48 001 3 0.484/7 0.08 100 3 0.24 0001 4 0.325/7 0.06 101 3 0.18 00001 5 0.306/7 0.03 110 3 0.09 000001 6 0.18
1 0.02 111 3 0.06 000000 6 0.12
1.00 Lavg= 3.00 2.70
rk = tons de cinza em uma imagem, k=0, 1, ...,
p(rk) = nk / n
onde nk = número de pixels com tom rk
n = número de pixels da imagem
Lavg=
kk
kavg rprlL
1
0
111001
001
0001
00001
000001000000
Resultado da Teoria da Informação
bitsdenúmerorp
rlk
kopt
1log2
r p(r) Code 1 l(r) l(r)p(r) Code 2 l(r) l(r)p(r) log(1/p) log(1/p)*p0 0.19 000 3 0.57 11 2 0.38 2.4 0.461/7 0.25 001 3 0.75 01 2 0.50 2.0 0.502/7 0.21 010 3 0.63 10 2 0.42 2.3 0.473/7 0.16 011 3 0.48 001 3 0.48 2.6 0.424/7 0.08 100 3 0.24 0001 4 0.32 3.6 0.295/7 0.06 101 3 0.18 00001 5 0.30 4.1 0.246/7 0.03 110 3 0.09 000001 6 0.18 5.1 0.151 0.02 111 3 0.06 000000 6 0.12 5.6 0.11
=1.00 Lavg = 3.00 2.70 Lopt = 2.65Lavg =
Compressão de imagens
Compressão deImagens
Compressão deImagens
Sem PerdaSem Perda Com PerdaCom Perda
• Preserva exatamente o conteúdo da imagem
• Taxas de compressão 3 : 1
• 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 daImagemOriginal
32, 45, 57, 68, 23, 100,98, ...
32, 45, 57, 68, 23, 100,98, ...
Imagem Comprimida
32, 45, 57, 68, 23, 100,98, ...
Dados daImagemOriginal
Compressãoda imagem
Imagem Comprimida
32, 45, 57, 68, 23, 100,98, ...
Transporte e/ouArmazenamento
Descompressãoda imagem
Fundamentos da Compressão de Imagens
•codificação
•entre pixels
•psico-visual
A compressão de uma imagem é obtida quando se elimina a redundância de:
Redundância entre pixels
640 colunas x 480 linhas x 1 byte/pixel = 300 KBytes
480*(1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0) = ~18 Kbytes
onde 1 = 32 bytes de preto e 0 = 32 bytes de branco
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.
Run-Length Encoding
76 76 76 76 76 78 79 79 79 79 80 80
76 | 5 78 | 1 79 | 4 80 | 2
imagem binária
0 0 0 0 0 0 0 1 1 1 1 0 0 0 0 0
7 4
1. . .
5
Compressão do jpeg
Aplicações são tecnologicamente complexas: exemplo: algoritmo do JPEG
FDCT
SourceImage
QuantizerEntropyEncoder
TableTable
Compressedimage data
DCT-based encoding
8x8 blocks
R
BG
Equations for JPEG DCT
• Forward DCT:
• Inverse DCT:
.1, otherwise ;0yfor x, 2
1 where
16
)12(cos
16
)12(cos),(
4
1),(
7
0
7
0
yxyx
x yyx
CCCC
yjxijiSpixelCCyxDCT
.1, otherwise ;0,for 2
1, where
)12(cos
16)12(
cos),(41
),(7
0
7
0
jiji
x yji
CCjiCC
iyjx
jiDCTCCyxpixel
Visualization of Basis Functions
Increasing frequency
Incr
easi
ng
freq
uen
cy
T1 Comparação de cores
int comparaCor(const void * p1, const void * p2) int *c1 = (int *) p1; /* aponta para o byte red da cor 1 */ int *c2 = (int *) p2; /* aponta para o byte red da cor 2 */
/* compara o canal vermelho */ if (*c1 < *c2) return -1; if (*c1 > *c2) return 1;
/* compara o canal verde, uma vez que o vermelho e' igual */ c1++; c2++; if (*c1 < *c2) return -1; if (*c1 > *c2) return 1;
/* compara o canal azul, uma vez que o vermelho e o azul sao iguais */ c1++; c2++; if (*c1 < *c2) return -1; if (*c1 > *c2) return 1;
/* sao iguais */ return 0;
p1 p2
T1 Median Cut
typedef struct int axis; float error; int k0; int k1; float red,green,blue; Cell;
k0 k1