最大类间方差法(OTSU)求阈值

参见论文原文(a threshold selection method from gray-level histograms)

最大类间方差的基本思想是使用一个阈值将整个数据分成两个类,假如两个类之间的方差最大,那么这个阈值就是最佳的阈值。

方差的定义


假设使用一个阈值T,将灰度级[1 L]分割成两个类[1 T-1]和[T L],那么有



  • 3
    点赞
  • 44
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
Micropython中实现最大类间方差法Otsu)的方法如下: ``` import utime import sensor import image def otsu_threshold(img): hist = img.get_histogram() total_pixels = img.width() * img.height() sum_total = 0 for i in range(256): sum_total += i * hist[i] sum_back = 0 w_back = 0 w_fore = 0 var_max = 0 threshold = 0 for i in range(256): w_back += hist[i] if w_back == 0: continue w_fore = total_pixels - w_back if w_fore == 0: break sum_back += i * hist[i] mean_back = sum_back / w_back mean_fore = (sum_total - sum_back) / w_fore var_between = w_back * w_fore * (mean_back - mean_fore) ** 2 if var_between > var_max: var_max = var_between threshold = i return threshold sensor.reset() sensor.set_pixformat(sensor.GRAYSCALE) sensor.set_framesize(sensor.QQVGA) sensor.skip_frames(time=2000) while True: img = sensor.snapshot() threshold_value = otsu_threshold(img) img.binary([threshold_value]) img.show() utime.sleep(100) ``` 这段代码实现了使用Otsu算法进行图像二值化。在`otsu_threshold`函数中,首先计算图像的直方图,然后根据直方图计算类间方差。通过遍历所有可能的阈值,找到最大的类间方差对应的阈值,作为最终的二值化阈值。在主循环中,读取图像并调用`otsu_threshold`函数得到阈值,然后使用该阈值对图像进行二值化并显示。 请注意,这段代码是基于MicroPython语言编写的,并假设您已经正确配置了摄像头和传感器。确保在运行之前进行适当的硬件和软件设置。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值