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