Halcon的全局阈值分割算法(binary_threshold),其实就是otsu法(最大类间方差法,有时也称之为大津算法。
使用的是聚类的思想,把图像的灰度数按灰度级分成2个部分,使得两个部分之间的灰度值差异最大,每个部分之间的灰度差异最小,通过方差的计算来寻找一个合适的灰度级别 来划分。 所以可以在二值化的时候 采用otsu算法来自动选取阈值进行二值化。
详见:http://blog.youkuaiyun.com/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