Při zpracování obrazu se k binarizaci obrazu ve stupních šedi používá algoritmus vyváženého prahování histogramu [1] . Tento algoritmus předpokládá, že obrázek obsahuje pixely dvou tříd patřících do pozadí a popředí. Stejně jako metoda Otsu [2] a metoda iterativního prahování [3] je založena na iterativním hledání prahu, který rozdělí pixely do daných tříd. Při této metodě se váží dvě stejné části histogramu . Pokud jedna část převáží, pak se nejextrémnější sloupec odstraní z těžší části. Iterační postup končí, když v histogramu zůstane pouze jeden sloupec a jako prahová hodnota je vybrána odpovídající hodnota intenzity.
Vzhledem k jednoduchosti algoritmu jej lze doporučit jako první přístup při studiu algoritmů binarizace obrazu ve stupních šedi.
Následující program v jazyce C je zjednodušenou verzí algoritmu prahování vyváženého histogramu:
int BHThreshold ( int [] histogram ) { i_m = ( int )(( i_s + i_e ) / 2,0f ); // výpočet váhového středu I_m w_l = get_weight ( i_s , i_m + 1 , histogram ); // váha levé strany histogramu W_l w_r = get_weight ( i_m + 1 , i_e + 1 , histogram ); // váha pravé strany histogramu W_r while ( i_s <= i_e ) { if ( w_r > w_l ) { // pravá strana je těžší 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 ) { // levá strana je těžší 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 ++ ; } } } návrat i_m ; }Někdy může algoritmus poskytnout suboptimální výsledky při zpracování vysoce zašuměných obrázků, protože šum může vést k chybám při extrahování zlomků histogramu. Vliv šumu můžete výrazně snížit, pokud z uvažování vyloučíte nereprezentativní pruhy histogramu umístěné na jeho koncích [4] .