PUCPR- Pontifícia Universidade Católica Do Paraná
PPGIA- Programa de Pós-Graduação Em Informática Aplicada
PROF. DR. JACQUES FACON
LIMIARIZAÇÃO POR ENTROPIA DE RENYI
Resumo: Segmentação de imagem é um método importante e fundamental em muitos sistemas digitais de processamento de imagens. Segmentação de imagem por limiarização é a técnica mais simples e envolve a idéia básica de que os objetos e o fundo de uma imagem digital possuem distribuições distintas de níveis de cinza. Neste trabalho apresenta-se uma técnica geral de limiarização de imagens digitais baseado na entropia de Renyi. Nosso método inclui dois dos bens conhecidos métodos globais de limiarização.
Palavras-chave: Processamento de Imagens, Entropia de Renyi, Limiarização de imagem, Método da soma máxima de entropia, Método da correlação entrópica.
1. Introdução
Um dos métodos mais freqüentemente usados no processamento de imagens é o binarização. Este parâmetro distingue objetos do fundo em imagens. Além disso, é usado como uma ferramenta popular em uma grande variedade de aplicações do processamento de imagens, como aprimoramento de textos, análise de imagens biomédicas e localização de endereços e envelopes.
As técnicas de seleção por binarização podem ser divididas em dois grupos: binível e multinível. No modo binível, um valor de limiar para segmentar a imagem em um fundo e um objeto. Binarização no modo binível é usado em objetos distintos de seus fundos. Em uma imagem, se o objeto é distinto de seu fundo, então o histograma do nível de cinza será bimodal, e o valor de limiar pode ser escolhido para coincidir com a fronteira do nível de cinza do histograma. Cada pixel que tiver um valor de nível de cinza acima do valor de limiar será atribuído como um pixel do objeto ( fundo ) e cada pixel que tiver um valor de nível de cinza igual ou superior ao valor de binarização será atribuído ao fundo do objeto ( objeto ).
O modo multinível de binarização é usado quando uma imagem tem vários objetos, estes distintos do fundo. A presença de vários objetos distintos torna o histograma multimodal, e o valor de limiar é determinado localizando as fronteiras que separam os objetos. O modo multinível de binarização é determinado através de seu modo binível.
Este trabalho trata de um método de binarização automático e global usando a Entropia de Renyi. Este método estende dois métodos de binarização, que são os métodos de Kapur e Chang.
2. Binarização Usando a Entropia de Renyi
Esta técnica de binarização é similar às técnicas de Kapur e de Chang, e visa otimizar uma função critério. A binarização usando a Entropia de Renyi usa duas distribuições probabilísticas ( objeto e fundo do objeto ), derivadas da distribuição original dos níveis de cinza de uma imagem e inclui os métodos de da Soma de Entropia Máxima e da Correlação Entrópica.
Sejam p0, p1, p2, ..., p255 as probabilidades de distribuição dos níveis de cinza. Desta distribuição, duas distribuições de probabilidades, uma para a classe do objeto A1 e outra para a classe do fundo do objeto A2 são derivadas. As distribuições probabilísticas das classes do objeto e do fundo do objeto, A1 e A2 , são dadas por:
( ) ( )
1( )
1 1 1 0 1: , ,..., A p p A p p A p p A t( ) ( )
( )
2 255 2 2 2 1 2: , ,..., A p p A p p A p p A t+ t+ Onde:( )
( )
( ) ( )
+ = = = + = = 255 1 1 2 2 0 1 , , 1 t i i t i i A p A p p A p p A pO valor de t, que é o valor de binarização, pode ser escolhido, entre 0 e 255, como sendo um valor de um nível de cinza que separa o objeto do seu fundo. A entropia de Renyi de ordem α de uma imagem é definida como sendo: =
−
=
255 0,
)
(
ln
1
1
k k Tp
H
α αα
onde α, que deve ser diferente de 1, é um parâmetro positivo e real. A entropia de Renyi
H
Tα associada com as distribuições do objetos e do fundo do objeto são dadas por( )
α α α = − = t i i A p A p H 0 1 ln 1 1 1( )
α α α =+ − = 255 1 2 ln 1 1 2 t i i A p A p H respectivamente.A técnica de binarização usando a Entropia de Renyi consiste em buscar o valor de nível de cinza t*(α) que maximiza a expressão HαA1
( )
t +HαA2(t), definida por:( )
ArgMax{
H( )
t H( )
t}
t α Aα1 Aα2
* = +
É evidente que t*(α) é uma função de α. Do ponto de vista prática, a técnica de binarização usando a
Entropia de Renyi consiste em calcular 3 limiares t1* , t2*, t3* da seguinte maneira:
t*(α) = t
1* para 0 < α < 1,
t*(α) = t2* para α → 1,
t*(α) = t
3* para 1 < α < ∞.
Portanto t1* , t2*, t3* são valores de níveis de cinza que podem ser distintos ou até iguais. Em seguida, t1* ,
t2*, t3 são ordenados e serão denominados de t[1], t[2], t[3] .
O valor de limiar otimizado, tc*, é definido usando os três valores de níveis t[1], t[2], t[3] ordenados pela
seguinte fórmula: [ ]
( )
[ ] + + [ ] + [ ] −( )+
[ ] = 1 1 1 2 2 3 3 3 * 4 1 1 4 1 4 1ωβ t ωβ t pt ωβ t p t tc onde( )
= = t i i p t p 1( ) ( )
t[3] pt[1] p − = ω e( β1, β2, β3) = (1,2,1) se | t[1] – t[2]| ≤ 5 e | t[2] – t[3]| ≤ 5,
(1,2,1) se | t[1] – t[2]| > 5 e | t[2] – t[3]| > 5,
(0,1,3) se | t[1] – t[2]| ≤ 5 e | t[2] – t[3]| > 5,
(3,1,0) se | t[1] – t[2]| > 5 e | t[2] – t[3]| ≤ 5
O valor de limiar otimizado tc* está sempre entre os valores t[1] e t[3].
3. Conclusão
Foi apresentado uma técnica de limiarização de imagens digitais baseado na entropia de Renyi empregando o parâmetro α e baseado no cálculo de 3 possíveis limiares, t1* (para 0 < α < 1) , t2* (para α → 1)
e t3* (para 1 < α < ∞).
4. Referências
SAHOO, Prasanna; WILKINS, Carrye; YEAGER, Jerry. “Threshold Selection using Renyi’s Entropy.”, Pattern recognition Vol 30, No 1, pp 71-84, 1997
IMPLEMENTAÇÃO:
// Algoritmo de Limiarizacao por Entropia de Renyi BOOL CLimiar::LimiarEntropiaRenyi()
{
unsigned long t,i; double prob[256]; double ha1,ha2,Alfa; double soma1,soma2; double total1,total2; double ha,ham1,ham2,ham3; double w,p1,p3; double b1,b2,b3; BYTE Limiar1,Limiar2,Limiar3; BYTE Limiar,LimiarAux;
if ( !(VerifyConsistentIn() && VerifyConsistentOut()) ) return FALSE; CopyImageInOut(); ClockStart(); Histograma(); for(i=0;i<256;i++) prob[i] = (double)m_Histo[i]/m_TotalPixels; ham1=0; ham2=0; ham3=0; for(t=0;t<255;t++) { total1 = 0;
for (i= 0;i<= t;i++) total1 += prob[i];
total2 = 0;
for (i=t+1;i< 256;i++) total2 += prob[i];
if ( (total1 == 0) || (total2 == 0) ) continue;
// Calculo de t* para 0 < Alfa < 1 for(Alfa=0.1;Alfa<=0.9;Alfa+=0.1) {
soma1 = 0; for(i= 0;i<= t;i++)
soma1 += pow(prob[i]/total1,Alfa); ha1 = (1/(1 - Alfa))*log(soma1); soma2 = 0; for(i=t+1;i< 256; i++) soma2 += pow(prob[i]/total2,Alfa); ha2 = (1/(1 - Alfa))*log(soma2); ha = ha1 + ha2; if (ha > ham1) { ham1 = ha;
Limiar1 = (BYTE)t; }
}
// Calculo de t* para Alfa -> 1
for(Alfa=0.9995;Alfa<=1.0005;Alfa+=0.0002) {
soma1 = 0; for(i= 0;i<= t;i++)
soma1 += pow(prob[i]/total1,Alfa); ha1 = (1/(1 - Alfa))*log(soma1); soma2 = 0; for(i=t+1;i< 256; i++) soma2 += pow(prob[i]/total2,Alfa); ha2 = (1/(1 - Alfa))*log(soma2); ha = ha1 + ha2; if (ha > ham2) { ham2 = ha; Limiar2 = (BYTE)t; } }
// Calculo de t* para 1 < Alfa < oo for(Alfa=5;Alfa < 100;Alfa+=10) {
soma1 = 0; for(i= 0;i<= t;i++)
soma1 += pow(prob[i]/total1,Alfa); ha1 = (1/(1 - Alfa))*log(soma1); soma2 = 0; for(i=t+1;i< 256; i++) soma2 += pow(prob[i]/total2,Alfa); ha2 = (1/(1 - Alfa))*log(soma2); ha = ha1 + ha2; if (ha > ham3) { ham3 = ha; Limiar3 = (BYTE)t; } } }
// Ordenacao dos Limiares if ( (Limiar1 > Limiar2) ) { LimiarAux = Limiar2; Limiar2 = Limiar1; Limiar1 = LimiarAux; } if ( (Limiar1 > Limiar3) ) { LimiarAux = Limiar3;
Limiar3 = Limiar1; Limiar1 = LimiarAux; } if ( (Limiar2 > Limiar3) ) { LimiarAux = Limiar3; Limiar3 = Limiar2; Limiar2 = LimiarAux; }
// Calculo do Parametros para calcular tc p1=0; for(i=0;i<=Limiar1;i++) p1 += prob[i]; p3=0; for(i=0;i<=Limiar3;i++) p3 += prob[i]; w = p3 - p1;
if ( ((Limiar2-Limiar1) <= 5) && ((Limiar3-Limiar2) <= 5) ) {
b1=1;b2=2;b3=1; }
if ( ((Limiar2-Limiar1) > 5) && ((Limiar3-Limiar2) > 5) ) {
b1=1;b2=2;b3=1; }
if ( ((Limiar2-Limiar1) <= 5) && ((Limiar3-Limiar2) > 5) ) {
b1=0;b2=1;b3=3; }
if ( ((Limiar2-Limiar1) > 5) && ((Limiar3-Limiar2) <= 5) ) { b1=3;b2=1;b3=0; } // Calculo do Limiar tc Limiar = (BYTE) (Limiar1*(p1+(0.25*w*b1)) + (0.25*Limiar2*w*b2) + Limiar3*(1-p3+(0.25*w*b3))); SetLimiar((BYTE)Limiar); AplicarLimiar();
ClockFinish("Limiarizacao por Entropia de Renyi"); return TRUE;