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

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

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

undefined
undefined

Алгоритм

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

   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;
   }
undefined

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

Литература

Ссылки