二值化算法OTSU源码解析

概述:

本文中小编将会跟大家分享一下OpenCV3.1.0中图像二值化算法OTSU的基本原理与源代码解析,最终还通过几行代码演示了一下如何使用OTSU算法API实现图像二值化。

一:基本原理

该方法是图像二值化处理常见方法之一,在Matlab与OpenCV中均有实现。OTSU阈值方法是一种基于寻找合适阈值实现二值化的方法,其最重要的部分是寻找图像二值化阈值,然后根据阈值将图像分为前景(白色)或者背景(黑色)。假设有6x6的灰度图像,其像素数据及其对应的直方图如下图:

阈值寻找方法首先假设是为T=3,则背景像素的比重、均值、方差的计算结果如下:

然后使用上述计算结果,计算类内方差:

上述整个计算步骤与结果是假设阈值T=3时候的结果,同样计算假设阈值为T=0、T=1、T=2、T=4、T=5的类内方差,比较类内方差之间的值,最小类内方差使用的阈值T即为图像二值化的阈值。

上述是假设图像灰度值级别为0~5六个值,实际中图像灰度值取值范围为0~255之间,所以要循环计算使用每个灰度值作为阈值,得到类内方差,最终取最小类内方差对应的灰度值作为阈值实现图像二值化即可。

二:OpenCV实现源代码解析

OTSU的源代码可以参见-modules/imgproc/src/thresh.cpp源文件接口,下面对其中关键部分做出说明如下:

首先建立直方图的代码如下:

寻找内方差最小的阈值T的代码实现如下

上述代码主要功能是实现阈值寻找,多数人看到OpenCV源代码都会对OTSU的原理产生怀疑,明明是寻找最大值啊,原因是这样,最小的内方差值还等价于两类数据的最大方差,公式如下:

代码计算总像素个数实现如下

这样对照一下公式立刻就会读懂OpenCV中的源代码了。

三:使用

使用OTSU算法实现图像二值化,首先要把图像从彩色图像转换为灰度图像然后通过threshold函数指定二值化方法为THRESH_OTSU。具体的代码调用演示如下:

运行结果如下:

上图左边输入RGB图像,右边是基于OTSU产生的二值图像。从OpenCV图像二值化方法OTSU代码实现我们可以看出OpenCV在算法编码实现环节都是从简洁计算入手,考虑效率优先。非常值得我们学习。

关注【OpenCV学堂】

长按或者扫码下面二维码即可关注

学习《OpenCV图像处理视频课程》

http://edu.51cto.com/course/course_id-7521.html

原文发布于微信公众号 - OpenCV学堂(CVSCHOOL)

原文发表时间:2016-12-26

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏数据派THU

Python实例介绍正则化贪心森林算法(附代码)

作者:Ankit Chaoudhary 翻译:笪洁琼 校对:梁傅淇 通过本文与大家讨论一个被称为正则化的贪心森林算法。 引言 作为一名参与多个机器学习竞赛数据...

47060
来自专栏Python数据科学

【机器学习笔记】:逻辑回归实战练习(二)

前几篇介绍了逻辑回归在机器学习中的重要性:5个原因告诉你:为什么在成为数据科学家之前,“逻辑回归”是第一个需要学习的

15920
来自专栏大数据文摘

手把手丨我们在UCL找到了一个糖尿病数据集,用机器学习预测糖尿病

27430
来自专栏数说工作室

用SAS编一个回归软件 | 【SAS Says·扩展篇】IML:作业 | 数说·语言

上次Ansta留给自己的作业是: Sashelp逻辑库中有一个关于GNP的数据sashelp.gnp,要求用1961、1962、1963三年的数据建立回归模型...

38240
来自专栏IT派

用 Keras 编写你的第一个人工神经网络

创建一个新的文件,命名为 keras_first_network.py ,然后将教程的代码一步步复制进去。

14750
来自专栏marsggbo

贝叶斯优化(Bayesian Optimization)深入理解

我们都知道神经网络训练是由许多超参数决定的,例如网络深度,学习率,卷积核大小等等。所以为了找到一个最好的超参数组合,最直观的的想法就是Grid Search,其...

42240
来自专栏AI深度学习求索

python代码学习-数据处理图片加遮挡、噪声、模糊

- 高斯噪声(Gaussian noise)是指它的概率密度函数服从高斯分布的一类噪声。如果一个噪声,它的幅度分布服从高斯分布,而它的功率谱密度又是均匀分布的,...

2K30
来自专栏ArrayZoneYour的专栏

单单知道分类正确率是不够的,你可以使用更多的性能评估指标

当你为某个分类问题建立了一个模型时,一般来说你会关注该模型的所有预测结果中正确预测的占比情况。这个性能指标就是分类正确率。

42680
来自专栏杨熹的专栏

强化学习 9: 当 Action 的空间连续时

之前骑自行车的例子中,action 可以是向左或者向右,现在的话可能是一个实数值的区间。

15420
来自专栏AI深度学习求索

弱监督语义分割算法|AE-PSL算法对抗性擦除最具有判别性区域

这是一篇有趣的弱监督语义分割算法,最有趣的在什么地方呢?它通过将图片中最重要的、最具有判别性的部分擦除了,从而来得到次判别性区域,不明白他为什么会舍弃最好的而求...

27220

扫码关注云+社区

领取腾讯云代金券