灰度图像的自动阈值分割(Otsu 法)

灰度图像的自动阈值分割(Otsu 法)灰度图像的自动阈值分割 Otsu 法 机器视觉领域许多算法都要求先对图像进行二值化 这种二值化操作阈值的选取非常重要 阈值选取的不合适 可能得到的结果就毫无用处 今天就来讲讲一种自动计算阈值的方法 这种方法被称之为 Otsu 法 发明人是个日本人 叫做 NobuyukiOtsu 大津展之 简单的说 这种算法假设一副图像由前景色和背景色组成 通过统计学的方法来选取一个阈值 使得这个阈值可以将前景色

灰度图像的自动阈值分割(Otsu 法)

otsu算法中这个判据就是最大类间方差 (intra-class variance or the variance within the class)。下面就来详细说说什么是 intra-class variance。

我们知道一副灰度图像,可以计算它的颜色平均值,或者更进一步。可以计算出灰度直方图。

这个图片拍摄的是一个条形码。在这个图中,前景色就是黑色的条形码,背景色是其余部分的灰色。那么我们可以计算出这个图像的灰度直方图。

这里写图片描述
图中那个大的峰是背景色的部分,小的峰是前景色。

灰度值的均值是 122. 我们称这个均值为 M。

ICV=PA(MAM)2+PB(MBM)2

那么这个最佳的阈值 t 就是使得

ICV
最大的那个值。
对于上面的测试图像,我们可以遍历 t 的各种取值,计算 ICV。之后可以画出这样的ICV 曲线(绿色线条):
这里写图片描述




int otsu(const QImage &image) { double hist[256]; normalizedHistogram(image, hist); double omega[256]; double mu[256]; omega[0] = hist[0]; mu[0] = 0; for(int i = 1; i < 256; i++) { omega[i] = omega[i-1] + hist[i]; //累积分布函数 mu[i] = mu[i-1] + i * hist[i]; } double mean = mu[255];// 灰度平均值 double max = 0; int k_max = 0; for(int k = 1; k < 255; k++) { double PA = omega[k]; // A类所占的比例 double PB = 1 - omega[k]; //B类所占的比例 double value = 0; if( fabs(PA) > 0.001 && fabs(PB) > 0.001) { double MA = mu[k] / PA; //A 类的灰度均值 double MB = (mean - mu[k]) / PB;//B类灰度均值 value = PA * (MA - mean) * (MA - mean) + PB * (MB - mean) * (MB - mean);//类间方差 if (value > max) { max = value; k_max = k; } } //qDebug() < 
  

利用这个方法计算出的阈值做了二值化后得到图像如下:

这里写图片描述

可以看到效果很好。

Otsu 方法也不是万能的。当目标与背景的大小比例悬殊时,类间方差准则函数可能呈现双峰或多峰,此时效果不好。这时就要考虑其他的办法了。

ICV=PA(MAM)2+PB(MBM)2

这里面 PA 和 PB 相当于是个前景色和背景色部分做个加权。当前景色或背景色有一个区域很小时。比如 PA 非常的小。那么这时计算出来的 t 就会和 B 区域很接近,这时的分割效果就会比较差。我们可以对ICV的公式进行一点小小的改造。

ICV=PAα(MAM)2+PBα(MBM)2

这里的 α 可以取一个 0-1之间的值。比如上面的例子图片,如果我们取 α=0.8 计算出的效果会更好一些。当然这个 α 值就要全凭经验来定了。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/219034.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月17日 下午10:57
下一篇 2026年3月17日 下午10:57


相关推荐

  • 智谱发布 GLM-5:从“代码生成”迈向“工程构建”的 Agentic Ready 时代

    智谱发布 GLM-5:从“代码生成”迈向“工程构建”的 Agentic Ready 时代

    2026年3月12日
    3
  • java的英文文献综述_java英文参考文献.doc[通俗易懂]

    java的英文文献综述_java英文参考文献.doc[通俗易懂]java英文参考文献环境风水学论文参考文献(一)摘要:中国传统人居环境文化,俗称风水,是中国人居环境的艺术。中国传统人居环境文化历经千年而不衰,归功于其坚实的理论基础和强大的现实适用性。风水作为一种东方文化特有的思维方式,不仅体现在中国城市、庙宇、乡村、道路、住宅的选址和规划布局中,而且渗透、积淀为中国人心理层面上的审美文化取向,成为中国人的基因。丁文剑《现代建筑与古代风水》上海东华大学出版社…

    2026年4月19日
    5
  • windows安装设置_ffmpeg使用方法

    windows安装设置_ffmpeg使用方法windows下下载配置ffmpeg

    2025年11月7日
    6
  • duilib消息类型[终于解决]

    //定义所有消息类型//////////////////////////////////////////////////////////////////////////#defineDUI_MS

    2021年12月18日
    50
  • 打造持续学习型组织

    本文来源于我在InfoQ中文站翻译的文章,原文地址是:http://www.infoq.com/cn/news/2015/06/continuous-learning-organization软件开发通常被认为是知识密集型活动,因此各个组织都会寻求能够促进持续学习的手段与方式。MarcinFloryan认为“我们需要学习型组织,并且从个体学习开始”。不过,个体学习有时会很困难,大规模的个体学习变

    2022年4月13日
    40
  • Hadoop生态系统组件最全介绍

    Hadoop生态系统组件最全介绍开源改变世界,拥抱开源,拥抱未来Hadoop生态系统组件介绍,掌握吹x大法,走到哪里都不怕图片来自bing,跟视觉中国没关系,嗯,很严肃的声明 功能模块 产品名称 产品简述 关键技术 HDFS 分布式文件系统 MapReduce 数据处理编程:map(数据拆分),shuffle(数据排序分发),reduce(数据合并) YAR…

    2022年5月12日
    44

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号