Алгоритм сбалансированного порогового отсечения гистограммы

Материал из Википедии — свободной энциклопедии
Перейти к навигации Перейти к поиску

При обработке изображений, алгоритм сбалансированного порогового отсечения гистограммы[1], используется для бинаризации полутонового изображения. В этом алгоритме предполагается, что изображение содержит пиксели двух классов, принадлежащие фону и переднему плану. Как и метод Оцу[2] и метод итеративного выбора порога[3], он основан на итеративном нахождении порогового значения, которое разделяет пиксели на данные классы. В этом методе взвешиваются две равные доли гистограммы. Если одна часть перевешивает, то из более тяжелой части удаляется наиболее крайний столбик. Итеративная процедура заканчивается, когда в гистограмме остается только один столбик и соответствующее ему значение интенсивности выбирается в качестве порогового значения.

Учитывая простоту алгоритма, его можно рекомендовать в качестве первого подхода при изучении алгоритмов бинаризации полутоновых изображений.

Исходное изображение.
Бинаризированное изображение.

Алгоритм[править | править код]

Следующая программа на языке Си — это упрощенная версия алгоритма сбалансированного порогового отсечения гистограммы:

   int BHThreshold(int[] histogram) {
       i_m = (int)((i_s + i_e) / 2.0f);                   // расчет центра весов I_m
       w_l = get_weight(i_s, i_m + 1, histogram);         // вес левой части гистограммы W_l
       w_r = get_weight(i_m + 1, i_e + 1, histogram);     // вес правой части гистограммы W_r
       while (i_s <= i_e) {
           if (w_r > w_l) {                               // правая часть тяжелее
               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) {                       // левая часть тяжелее
               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;
   }
Иллюстрация пошаговой реализации метода.

Иногда алгоритм может давать неоптимальные результаты при обработке сильно зашумленных изображений, поскольку шум может привести к ошибкам при выделении долей гистограммы. Можно значительно ослабить влияние шума, если исключить из рассмотрения непрезентативные столбики гистограммы, расположенные на её концах[4].

Литература[править | править код]

  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.

Ссылки[править | править код]