1
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 FUZZY BASEADA EM AGRUPAMENTOS FUZZY
ATRAVÉS DA ESTIMATIVA DE DENSIDADES NORMAIS
Resumo: O problema da limiarização é tratado neste artigo usando o algoritmo de agrupamentos fuzzy
através da estimativa de densidades normais para providenciar particionamentos ótimos.
Palavras-chave: Limiar, Fuzzy D-Normais, Densidades Normais, Objeto, Fundo, Distribuição Normal.
1. Introdução
Este trabalho foi realizado através do estudo do método de limiarização de imagens por estimativa de
densidades normais. Tal técnica consiste em encontrar o ponto ideal do histograma de uma imagem, para então
aplicar a limiarização assumindo a distribuição normal de cinza do objeto e do fundo.
Na seção 2 é comentada a teoria do algoritmo, a seção 3 descreve o algoritmo utilizado na
implementação, a seção 4 apresenta a fonte do programa implementado, a seção 5 descreve as referências do
estudo e a seção 6 conclui o trabalho.
2. Teoria do Algoritmo
Limiarização em níveis de cinza é o processo do particionamento de pixels numa imagem digital dentro
de duas regiões mutuamente exclusivas e exaustivas.
Seja ϑ=[Imn]MxN que denota a imagem com pixel em (m,n) assumindo um discreto valor de cinza Imn ∈
{0,1,..L-1} definido sobre o universo L=[0,L-1]. O problema da limiarização é aquele que identifica um limiar
ótimo T e segmenta o cenário em duas regiões principais – objeto (O) e fundo (B - background).
O = {Imn | Imn ≥ T }
B = {Imn | Imn < T}
As características geométricas e estatísticas do histograma impõem uma importante regra na identificação
do limiar. Limiarização é o método preferencial de segmentação quando objeto e fundo são distinguíveis
utilizando somente valores de cinza. Em cada cenário a perturbação dos valores de cinza ao redor dos valores
principais das distribuições de cinza do objeto e do fundo geram um histograma bimodal e o limiar T ∈ L é
considerado tanto como o ponto entre os dois modos quanto para minimizar a probabilidade de erro de
classificação.
O algoritmo de estimativa de densidades normais trabalha com a distribuição normal de cinza do objeto e
do fundo. Kittler e Illingworth [Kittler -- Illingworth (1986)] sugerem uma estratégia para a limiarização baseada
nesta suposição:
2
J (t ) =
t −1
j =0
+
L −1
j =t
pj
j − v1
2
j − v2
2
+ 2 log σ 1 − p j
σ1
pj
, (12)
+ 2 log σ 2 − p2
σ2
Considera-se que a mínima global de J minimiza a classificação de erro e melhora a limiarização
correspondente. Em experimentos com ajuda das suposições normais, o algoritmo rende excelentes resultados
ainda existindo a chance da identificação de uma falsa limiarização nos valores extremos de cinza em valores
estreitos.
O problema da seleção da limiarização na presença de regiões não balanceadas pode ser simplificado por
uma grande extensão se for possível alterar a geometria dos valores de cinza. Assim o limiar absoluto será
eqüidistante de ambas as regiões. Isto pode ser feito definindo uma medida de distância associada a cada uma
das classes.
Para tanto são definidas funções para pseudodistâncias:
1 j − vi
d ( j, vi ) =
2 σi
2
+ log σ i − log β i , (13)
onde σi e βi são dados por:
L −1
βi =
i =0
µ iT ( j )h j
L −1
µ T ( j )h j +
i =0 0
L −1
σi =
i =0
L −1
µ T ( j )h j
i =0 B
µ iT ( j )h j ( j − v i ) 2
L −1
µ T ( j )h j
i =0 i
, (14)
, (15)
Note-se que βi é sempre menor ou igual a 1 e βi relaciona-se com ρ no caso de uma partição difícil como
β i = 1/(ρ+1) , β2 = 1/(ρ+1). Com esta distância medida, um valor de cinza com igual densidade no objeto e no
fundo será mapeado como eqüidistante de ambas as metades da região.
3. Algoritmo
1.
Inicialize a descrição limiar µ0 e µb satisfazendo a equação (6):
µ i ( x j ) ∈ [0,1] (6a)
0<
n
j =1
c
i =1
2.
µ i ( x j ) = 1. 0 ( 6c )
ompute os valores medianos de ambas as regiões usando a equação (9):
L −1
vi =
3.
µ i ( x j ) < n (6b)
j =0
h j jµ i ( j ) T
L −1
h µ ( j)T
j =0 j i
, i = 1,2 , (9)
Compute βi e σi , i=1,2.. usando as equações (14) e (15).
3
4.
Melhore os membros usando a equação (10) cujo valor é um parâmetro da função, equação (13)
µ 0 ( j) =
5.
1
, (10a)
1 + [d ( j , v 0 ) / d ( j , v B )] 2 /(T −1)
µ B ( j ) = 1 − µ 0 ( j ) , (10b)
Repita os passos 2 a 5 até não mais haver alterações de µo para µb.
4 Conclusões
Percebe-se que o algoritmo de limiarização fuzzy através da estimativa das densidades normais melhora a
binarização da imagem de acordo com o coeficiente utilizado. Além disso o algoritmo é capaz de identificar
falsos limiares em imagens muito borradas.
Algumas dificuldades foram encontradas na implementação do algoritmo, principalmente durante o
cálculo das pseudo-distâncias, que dependem de beta e sigma-quadrado, que devem ser diferentes de zero.
5 Referências
C. V. Jawahar. P. K. Biswas and K. Ray, “Investigations On Fuzzy Thresholding Based On Fuzzy Clustering”,
Pattern Recognition, Vol. 30, No. 10, pp. 1605-1613, 1997.
4
IMPLEMENTAÇÃO:
// Algoritmo de Limiarizacao Fuzzy Densidades Normais
BOOL CLimiar::LimiarFuzzyDNormais()
{
const double Tal = GetTal_FuzzyDNormais();
long
j,g;
double
double
double
double
double
double
double
numb,denb,nusb,mb[256]; // Numerador, Denominador e MI (Background)
numo,deno,nuso,mo[256]; // Numerador, Denominador e MI (Object)
aux,expoente;
vb,vbaux,pdb;
vo,voaux,pdo;
sigmab,betab,logauxb,distb;
sigmao,betao,logauxo,disto;
long
BYTE
Iteracoes;
Limiar;
if ( !(VerifyConsistentIn() && VerifyConsistentOut()) )
return FALSE;
CopyImageInOut();
ClockStart();
Histograma();
// Zerando mb e mo
for(g=0;g<256;g++)
{
mb[g] = 0;
mo[g] = 0;
}
// calculo de mb
numb = 0;
denb = 0;
for (g=0;g<256;g++)
{
numb += g*m_Histo[g];
denb += m_Histo[g];
}
if (denb == 0)
mb[g] = 0;
else
mb[g] = numb / denb;
// calculo de mo
numo = 0;
deno = 0;
for (g=256-2;g>=0;g--)
{
numo += (g+1)*m_Histo[g+1];
deno += m_Histo[g+1];
if (deno == 0)
mo[g] = 0;
else
mo[g] = numo / deno;
5
}
// Manipulacao para mb(xj) pertenca [0,1] e mo(xj) pertenca [0,1]
for (j=0;j<256;j++)
{
aux = mb[j] + mo[j];
mb[j] = mb[j] / aux;
mo[j] = mo[j] / aux;
}
// Vale lembrar mb(xj) + mo(xj) para j de 0 ate L-1 deve ser igual a 1
// Esta condicao e valida porem existe uma margem de erro minima
// que deve ser desconsiderada
expoente = (2 / (Tal - 1) );
vb = 0;
vo = 0;
Iteracoes=0;
// loop entre equacoes 9 e 10
while(1)
{
Iteracoes++;
// Calculo de vb e vo
numb = 0; denb = 0;
numo = 0; deno = 0;
for(j=0;j<256;j++)
{
numb += m_Histo[j]*j*pow(mb[j],Tal);
denb += m_Histo[j] *pow(mb[j],Tal);
}
numo += m_Histo[j]*j*pow(mo[j],Tal);
deno += m_Histo[j] *pow(mo[j],Tal);
vbaux = numb / denb;
voaux = numo / deno;
Limiar = (BYTE) ((vbaux + voaux) / 2);
if ( (fabs(vbaux - vb) < .01)
&& (fabs(voaux - vo) < .01) )
break;
vb = vbaux;
vo = voaux;
// Calculo de beta e sigma_quadrado
nusb = 0;nuso = 0;
for(j=0;j<256;j++)
{
nusb += pow(m_Histo[(int)(fabs(j-vb))],2)*pow(mb[j],Tal);
nuso += pow(m_Histo[(int)(fabs(j-vo))],2)*pow(mo[j],Tal);
}
if ( (nusb
== 0) || (nuso
== 0) ||
(1000*nusb < nuso) || (1000*nuso < nusb) )
break;
betab = denb / (deno + denb);
betao = deno / (deno + denb);
6
sigmab = pow( nusb / denb, .5);
sigmao = pow( nuso / deno, .5);
// Variável auxiliar logaritmica
logauxb = log10(sigmab) - log10(betab);
logauxo = log10(sigmao) - log10(betao);
for(j=0;j<256;j++)
{
//d(j,vi) - pseudo-distâncias
distb = .5 * pow((j-vb)/sigmab,2) + logauxb;
disto = .5 * pow((j-vo)/sigmao,2) + logauxo;
pdb = pow( distb, expoente );
pdo = pow( disto, expoente );
}
}
mb[j] = pdo / (pdo + pdb);
mo[j] = pdb / (pdo + pdb);
SetIteracoes((DWORD)Iteracoes);
SetLimiar((BYTE)Limiar);
AplicarLimiar();
ClockFinish("Limiarizacao Fuzzy Densidades Normais");
}
return TRUE;
Download

Técnica Fuzzy por DNormais - Programa de Pós