Imagem Digital Conceitos, Processamento e Análise

Post on 22-Jan-2016

47 views 2 download

description

Imagem Digital Conceitos, Processamento e Análise. Parte 1: Conceitos básicos. Imagem e funções Imagem digital: amostragem, quantização e codificação Re-amostragem de funções. 100%. 80%. 60%. Níveis de cinza. 40%. 20%. x. 0%. Posição ao longo da linha. L. L(u,v). v. u. Função. - PowerPoint PPT Presentation

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