Balanserad histogramtröskel

Inom bildbehandling är den balanserade histogramtröskelmetoden (BHT), en mycket enkel metod som används för automatisk bildtröskelvärde . Liksom Otsus metod och Iterative Selection Thresholding Method är detta en histogrambaserad tröskelmetod. Detta tillvägagångssätt förutsätter att bilden är uppdelad i två huvudklasser: bakgrunden och förgrunden . BHT - metoden försöker hitta den optimala tröskelnivån som delar histogrammet i två klasser.

Originalbild.
Tröskelbild.
Metodens utveckling.

Denna metod väger histogrammet, kontrollerar vilken av de två sidorna som är tyngre och tar bort vikten från den tyngre sidan tills den blir lättare. Den upprepar samma operation tills kanterna på vågen möts .

Med tanke på dess enkelhet är denna metod ett bra val som ett första tillvägagångssätt när man presenterar ämnet automatisk bildtröskel .

Algoritm

Följande listning, i C- notation, är en förenklad version av metoden Balanced Histogram Thresholding :

   
           
           
             
        
             
              
                    
                  
                  
            
               
               
                    
                    
                    
                
            
        
    
     
 int  BHT-tröskel  (  int  []  histogram  )  {  i_m  =  (  int  )((  i_s  +  i_e  )  /  2.0f  );  // mitten av vägningsskalan I_m  w_l  =  get_weight  (  i_s  ,  i_m  +  1  ,  histogram  );  // vikt till vänster W_l  w_r  =  get_weight  (  i_m  +  1  ,  i_e  +  1  ,  histogram  );  // vikt till höger 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  ;  } 

Följande är en möjlig implementering i Python -språket:

       
    
        
      0
       
            
        
       
            
    
      0       
        
            

       
             
              
              
          
              
              
                

             
              
              
           
              
              

          

      def  bht  (  hist  ,  min_count  :  int  =  5  )  ->  int  :  """Balanserad histogramtröskel."""  n_bins  =  len  (  hist  )  # antar 1D histogram  h_s  =  medan  hist  [  h_s  ]  <  min_count  :  h_s  +=  1  # ignorera små räkningar vid start  h_e  =  n_bins  -  1  medan  hist  [  h_e  ]  <  min_count  :  h_e  -=  1  # ignorera små räkningar i slutet  # använd histogrammets medelintensitet som centrum; alternativt: (h_s + h_e) / 2)   h_c  =  int  (  rund  (  np  .  medelvärde  (  np  .  linspace  (  ,  2  **  8  -  1  ,  n_bins  ),  vikter  =  hist  )))  w_l  =  np  .  summa  (  hist  [  h_s  :  h_c  ])  # vikt i den vänstra delen  w_r  =  np  .  summa  (  hist  [  h_c  :  h_e  +  1  ])  # vikt i höger del  medan  h_s  <  h_e  :  if  w_l  >  w_r  :  # vänster del blev tyngre  w_l  -=  hist  [  h_s  ]  h_s  +=  1  annat  :  # höger del blev tyngre  w_r  -=  hist  [  h_e  ]  h_e  -=  1  new_c  =  int  (  rund  ((  h_e  +  h_s  )  /  2  ))  # centrera om vågskålen  om  new_c  <  h_c  :  # flytta behållaren till andra sidan  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  return  h_c 

externa länkar