Limiarização por equilíbrio do histograma

Origem: Wikipédia, a enciclopédia livre.

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 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

  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.

Ligações externas[editar | editar código-fonte]