Limiarização por equilíbrio do histograma

Origem: Wikipédia, a enciclopédia livre.
Ir para: navegação, pesquisa

Em processamento de imagem, o método de limiarização por equilíbrio do histograma [1] , é um método muito simples utilizado para fazer a limiarização automática de uma imagem ou, por outras palavras, transformar uma imagem definida a níveis de cinza numa imagem definida a preto e branco (binária). Na mesma linha de métodos como o método de Otsu [2] e método de Seleção Iterativa [3] , este é um método baseado no processamento do histograma da imagem. O algoritmo assume que a imagem se divide em duas classes: o fundo e o objeto propriamente dito. O método procura encontrar o nível de limiarização óptimo que divide o histograma em duas classes.

Imagem original.
Imagem após limiarização.

Este método pesa o histograma, verifica qual dos dois lados é o mais pesado, e remove peso do lado mais pesado até que este se torne o mais leve. Repete a mesma o operação até que os dois extremos da balança se encontrem. Dada a sua simplicidade, este método é uma boa escolha como primeira abordagem ao se discutir a limiarização automática de imagens.

Algoritmo[editar | editar código-fonte]

A listagem abaixo, em notação C, é uma simplificação do algoritmo de Limiarização por Equilíbrio do Histograma:

   int BHThreshold(int[] histogram) {
       i_m = (int)((i_s + i_e) / 2.0f); // Base da balança I_m
       w_l = get_weight(i_s, i_m + 1, histogram); // peso na esquerda W_l
       w_r = get_weight(i_m + 1, i_e + 1, histogram); // peso na direita W_r
       while (i_s <= i_e) {
           if (w_r > w_l) { // mais peso à direita
               w_r -= histogram[i_e--];
               if (((i_s + i_e) / 2) < i_m) {
                   w_r += histogram[i_m];
                   w_l -= histogram[i_m--];
               }
           } else if (w_l >= w_r) { // mais peso à esquerda
               w_l -= histogram[i_s++]; 
               if (((i_s + i_e) / 2) > i_m) {
                   w_l += histogram[i_m + 1];
                   w_r -= histogram[i_m + 1];
                   i_m++;
               }
           }
       }
       return i_m;
   }
Evolução do algoritmo.

Este algoritmo poderá apresentar problemas em imagens com muito ruído, visto que os limites da balança poderão ser erroneamente definidos. Para minimizar este problema, pode ser definido um valor mínimo de representatividade para eliminar as barras, resultantes de ruído, antes do início e após o fim do histograma [4] .

Referências[editar | editar código-fonte]

  1. A. Anjos and H. Shahbazkia. Bi-Level Image Thresholding - A Fast Method. BIOSIGNALS 2008. Vol:2. P:70-76.
  2. Nobuyuki Otsu (1979). "A threshold selection method from gray-level histograms". IEEE Trans. Sys., Man., Cyber. 9: 62–66.
  3. Ridler TW, Calvard S. (1978) Picture thresholding using an iterative selection method, IEEE Trans. System, Man and Cybernetics, SMC-8: 630-632.
  4. A. Anjos, R. Leite, M. L. Cancela, H. Shahbazkia. MAQ – A Bioinformatics Tool for Automatic Macroarray Analysis. International Journal of Computer Applications. 2010. Number 7 - Article 1.

Links Externos[editar | editar código-fonte]

Plugin para ImageJ