Você está na página 1de 4

PUCPR- Pontifcia Universidade Catlica Do Paran PPGIA- Programa de Ps-Graduao Em Informtica Aplicada

PROF. DR. JACQUES FACON

LIMIARIZAO POR ENTROPIA DE PUN Resumo: Este artigo descreve no s a teoria, mas tambm as ferramentas utilizadas para a implementao do algoritmo de Limiarizao por Entropia de Pun. Palavras Chave: Limiarizao, Entropia, Segmentao Global, algoritmo de Pun 1. Introduo A implementao das rotinas sero realizadas usando o software PdImagem. Esse software foi programado em Visual C ++ orientando a objeto. 2. Explicao da Teoria do Algoritmo Entropia uma medida de contedo de informao. Em condies de teoria de informao, assuma isso h n possveis smbolos x (por exemplo, cartas ou dgitos) e aquele smbolo i que vai aconteer com p (y de probabilidade.,). Ento a entropia que associada com a fonte de smbolos de X :

H(X ) =
onde entropia est medida em bits/smbolo.

n i =1

p ( x i ) log( p ( x i ))

Uma imagem pode ser pensada de como uma fonte de smbolos, ou nveis de cinza. A entropia associoada com os pixels preto tendo sido feito o threshold que usa treshold t, (Pun 1981):

H b=

t i =0

p i log p i

onde Pi a probabilidade de i niveis de cinza. Semelhantemente, a entropia de pixels branco :

H w=

255 i = t +1

p i log( p i )

para uma imagem com nveis 0-255, o algoritmo sugerido tenta achar o limiar t que maximiza H = Hb + Hw, a qual

Pun mostra ser o mesmo que maximar:

f (t ) =
onde:

Ht log P t H log(1 P t ) + 1 t H T log(max{ p 0 , p1 ,..., p t }) H T log(max{ p t +1 , p t + 2 ,... p 255 })

H t=
a entropia de pixels preto com limiar t,

255 i =0

p i log p i

H T=
a entropia total, e

255 i =0

p i log p i

Pt =

t i =0

pi

a probabilidade cumulativa at o nivel t de cinza, ou a probabilidade que um determinado pixel ter um valor menor ou iguala a t. Estes trs fatores podem ser computados do histograma de nveis de cinza, e a equao no depende de t. 4.. Referncias Pun T.,Entropic Thresholding, the new Approach, Computer Graphics and Image Processing, v.16, pp 210-239, 1981.

IMPLEMENTAO: // Algoritmo de Limiarizacao por Entropia de Pun BOOL CLimiar::LimiarEntropiaPun() { int l, t; double MaxProb1, MaxProb2, Aux1, Aux2, Aux3; double HT, Ht, Pt; double max; double ni[256],prob[256]; BYTE Limiar;

if ( !(VerifyConsistentIn() && VerifyConsistentOut()) ) return FALSE; CopyImageInOut(); ClockStart(); Histograma(); // Calculo das probabilidades do histograma for (l = 0; l < 256; l++) { prob[l] = (double)m_Histo[l]/m_TotalPixels; ni [l] = 0; } // Entropia Total HT = 0; for (l = 0; l < 256; l++) { if ( prob[l] != 0) HT += - prob[l] * log(prob[l]); } Pt = 0; Ht = 0; MaxProb1 = 0; for (t = 0; t < 256; t++) { if ( prob[t] != 0) { // Entropia de Pixels Pretos Pt += prob[t]; Ht += - prob[t] * log(prob[t]); Aux3 = Ht / HT; // Max da Probabilidade de 1 a t if (prob[t] > MaxProb1 ) MaxProb1 = prob[t]; // Auxiliar para o Log da Probabilidade Maxima if ( MaxProb1 != 0 ) Aux1 = ( Aux3) * (log( Pt) / log (MaxProb1));

else Aux1 = 0; // Max da probabilidade de t+1 a 255 MaxProb2 = 0; for (l=t+1; l<256; l++) { if (prob[l] > MaxProb2 ) MaxProb2 = prob[l]; } // Auxiliar para o Log da Probabilidade Maxima if ( MaxProb2 != 0 ) Aux2 = (1 - Aux3) * (log(1 - Pt) / log (MaxProb2) ); else Aux2 = 0; // Calculo Final ni[t] = Aux1 + Aux2;

max = 0; for (t = 0; t < 256; t++) { if (ni[t] > max) { max = ni[t]; Limiar = (BYTE)t; } } SetLimiar((BYTE)Limiar); AplicarLimiar(); ClockFinish("Limiarizacao por Entropia de Pun"); } return TRUE;

Você também pode gostar