binary_threshold阈值分割算法原理分析

Halcon的全局阈值分割算法(binary_threshold),其实就是otsu法(最大类间方差法,有时也称之为大津算法。

使用的是聚类的思想,把图像的灰度数按灰度级分成2个部分,使得两个部分之间的灰度值差异最大,每个部分之间的灰度差异最小,通过方差的计算来寻找一个合适的灰度级别 来划分。 所以可以在二值化的时候 采用otsu算法来自动选取阈值进行二值化。

详见:http://blog.csdn.net/xw20084898/article/details/17564957

代码实现如下:

 gray_histo (Region, Image, AbsoluteHisto, RelativeHisto)
 nAveragray:=0
 for Index := 0 to 255 by 1
     nAveragray:=nAveragray+RelativeHisto[Index]*Index 
 endfor
 wk:=0.0
 uk:=0.0
 MaxDiff:=0.0
 Diff:=0.0
 AutoThre:=0

 for Index := 0 to 255 by 1
     wk:=wk+RelativeHisto[Index]
     uk:=uk+RelativeHisto[Index]*Index
     if(wk<=0.0 or wk>=1.0)
          Diff:=0
     else
          Diff:=(nAveragray*wk-uk)*(nAveragray*wk-uk )/(wk*(1-wk))
     endif
     if(Diff>MaxDiff)
           MaxDiff:=Diff
           AutoThre:=Index
     endif
 endfor

猜你喜欢

转载自www.cnblogs.com/baiyy-daheng/p/8931931.html