В обработке изображений , то сбалансированный метод гистограммы порогового значения (ВНТ), [1] является очень простым методом , используемым для автоматического изображения порогового . Как OTSU по методе [2] и выбор метод Итеративного Thresholding , [3] это гистограмма метод на основе порогового значения. Этот подход предполагает, что изображение разделено на два основных класса: фон и передний план . Метод BHT пытается найти оптимальный пороговый уровень, который разделяет гистограмму на два класса.
Этот метод взвешивает гистограмму, проверяет, какая из двух сторон тяжелее, и снимает вес с более тяжелой стороны, пока она не станет легче. Он повторяет ту же операцию, пока края весов не встретятся.
Учитывая его простоту, этот метод является хорошим выбором в качестве первого подхода при представлении объекта автоматического определения порогового значения изображения .
Алгоритм
Следующий листинг в обозначении C представляет собой упрощенную версию метода пороговой обработки сбалансированной гистограммы :
int BHThreshold ( int [] гистограмма ) { i_m = ( int ) (( i_s + i_e ) / 2.0f ); // центр весов I_m w_l = get_weight ( i_s , i_m + 1 , гистограмма ); // вес слева W_l w_r = get_weight ( i_m + 1 , i_e + 1 , гистограмма ); // вес справа W_r while ( i_s <= i_e ) { if ( w_r > w_l ) { // правая сторона тяжелее w_r - = гистограмма [ i_e - ]; если ((( i_s + i_e ) / 2 ) < i_m ) { w_r + = гистограмма [ i_m ]; w_l - = гистограмма [ i_m - ]; } } else if ( w_l > = w_r ) { // левая часть тяжелее w_l - = гистограмма [ i_s ++ ]; если ((( i_s + i_e ) / 2 ) > = i_m ) { w_l + = гистограмма [ i_m + 1 ]; w_r - = гистограмма [ i_m + 1 ]; i_m ++ ; } } } return i_m ; }
Ниже представлена возможная реализация на языке Python :
def bht ( hist , min_count : int = 5 ) -> int : "" "Сбалансированное пороговое значение гистограммы." "" n_bins = len ( hist ) # предполагает 1D гистограмму h_s = 0, а hist [ h_s ] < min_count : h_s + = 1 # игнорировать малые числа в начале h_e = n_bins - 1, в то время как hist [ h_e ] < min_count : h_e - = 1 # игнорировать маленькие числа в конце # использовать среднюю интенсивность гистограммы в качестве центра; альтернативно: (H_s + h_e) / 2) H_C = INT ( круглый ( нп . в среднем ( нп . LINSPACE ( 0 , 2 ** 8 - 1 , n_bins ), вес = истор ))) W_L = нп . sum ( hist [ h_s : h_c ]) # вес в левой части w_r = np . sum ( hist [ h_c : h_e + 1 ]) # вес в правой части while h_s < h_e : if w_l > w_r : # левая часть стала тяжелее w_l - = hist [ h_s ] h_s + = 1 else : # правая часть стала тяжелее w_r - = hist [ h_e ] h_e - = 1 new_c = int ( round ( ( h_e + h_s ) / 2 )) # повторно центрировать весы if new_c < h_c : # переместить корзину на другую сторону w_l - = hist [ h_c ] w_r + = hist [ h_c ] elif new_c > h_c : w_l + = hist [ h_c ] w_r - = hist [ h_c ] h_c = new_c вернуть h_c
Рекомендации
- ^ A. Анхос и H. Shahbazkia. Двухуровневое определение порога изображения - быстрый метод. БИОСИГНАЛЫ 2008. Том: 2. П: 70-76.
- ↑ Нобуюки Оцу (1979). «Метод выбора порога по гистограммам серого». IEEE Trans. Sys., Man., Cyber. 9: 62–66.
- ^ Ридлер Т.В., Калвард С. (1978) Определение пороговых значений изображения с использованием метода итеративного выбора, IEEE Trans. Система, человек и кибернетика, SMC-8: 630-632.