Vid bildbehandling används den histogrambalanserade tröskelalgoritmen [1] för att binarisera en gråskalebild . Denna algoritm förutsätter att bilden innehåller pixlar av två klasser som hör till bakgrunden och förgrunden. Liksom Otsu-metoden [2] och den iterativa tröskelmetoden [3] bygger den på att iterativt hitta en tröskel som separerar pixlar i givna klasser. I denna metod viktas två lika delar av histogrammet . Om en del väger tyngre, tas den mest extrema kolonnen bort från den tyngre delen. Den iterativa proceduren avslutas när endast en stapel finns kvar i histogrammet och motsvarande intensitetsvärde väljs som tröskelvärde.
Med tanke på algoritmens enkelhet kan den rekommenderas som det första tillvägagångssättet när man studerar gråskalebildsbinariseringsalgoritmer.
Följande C-program är en förenklad version av den balanserade histogramtröskelalgoritmen:
int BHTthreshold ( int [] histogram ) { i_m = ( int )(( i_s + i_e ) / 2.0f ); // beräkning av viktcentrum I_m w_l = get_weight ( i_s , i_m + 1 , histogram ); // vikt på vänster sida av histogrammet W_l w_r = get_weight ( i_m + 1 , i_e + 1 , histogram ); // vikt på höger sida av histogrammet W_r while ( i_s <= i_e ) { if ( w_r > w_l ) { // höger sida är tyngre 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 ) { // vänster sida är tyngre 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 ++ ; } } } returnera i_m ; }Ibland kan algoritmen ge suboptimala resultat vid bearbetning av mycket brusiga bilder, eftersom brus kan leda till fel vid extrahering av histogramfraktioner. Du kan avsevärt minska påverkan av brus om du utesluter icke-representativa staplar i histogrammet som finns i dess ändar [4] .