Halcon代码实现最大类间方差(OTSU)算法

手把手HALCON代码解析OTSU算法

gen_image_const (Image, 'byte', 50, 10)
get_image_size (Image, Width, Height)
for i := 0 to Height - 1 by 1
    for j := 0 to Width - 1 by 1
        set_grayval (Image, i, j, rand(1)*255)
    endfor
endfor
moments_gray_plane (Image, Image, MRow, MCol, Alpha, Beta, Mean)
gray_histo (Image, Image, AbsoluteHisto, RelativeHisto)
* 计算零阶累积矩(累加直方图)和一阶累积矩
zeroMoment := []
oneMoment := []
for k := 0 to 255 by 1
    if(k == 0)
        zeroMoment := [zeroMoment,RelativeHisto[k]]
        oneMoment := [oneMoment, k*RelativeHisto[k]]
    else
        zeroMoment := [zeroMoment,zeroMoment[k-1]+RelativeHisto[k]]
        oneMoment := [oneMoment, oneMoment[k-1]+k*RelativeHisto[k]]
    endif
endfor
* 总平均值
all_mean := oneMoment[255]
* 计算类间方差
variance := []
for x := 0 to 254 by 1
    if(zeroMoment[x] == 0 or zeroMoment[x] == 1)
        variance := [variance,0]
    else
        cofficient := zeroMoment[x] * (1-zeroMoment[x])
        temp := pow(zeroMoment[x] * all_mean - oneMoment[x], 2)
        variance := [variance,temp / cofficient]
    endif
endfor
tuple_find (variance, max(variance), Indices)
stop ()
dev_set_color ('red')
threshold (Image, Region, max(Indices), 255)
dev_set_color ('green')
binary_threshold (Image, Region1, 'max_separability', 'light', UsedThreshold)

原图:
随机生成灰度图
手写OTSU代码后的阈值图片效果:
手写OTSU阈值效果图

使用HALCON自带最大类间方差阈值图片效果:
HALCON自带最大类间方差效果

参考书籍《OpenCV算法精解:基于Python与C》

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值