本文的基础是OpenCV的函数threshold(),关于函数threshold()的详细介绍,大家可以参考下面这篇博文:
https://www.hhai.cc/thread-162-1-1.html

一、图像的OTSU阈值化
在阈值化处理中,OTSU是一种常用的算法,中文译为大津法或最大类间方差法。
它是1979年由日本学者大津展之提出的一种对图像进行二值化的高效算法,是在判别与最小二乘法原理的基础上推导出来的。
它的基本思路是把直方图在某一阈值处分割成两组,当被分成的两组间方差为最大时,这一阈值为“决定阈值”。

OTSU的算法步骤如下:
⑴统计灰度级中每个像素在整幅图像中的个数。
⑵计算每个像素在整幅图像的概率分布。
⑶对灰度级进行遍历搜索,计算当前灰度值下前景背景类间概率。
⑷通过目标函数计算出类内与类间方差下对应的阈值。
更具体的原理介绍大家可以参考下面这篇博文:
https://blog.csdn.net/weixin_44227356/article/details/116031602

图像的OTSU阈值化可以直接由函数threshold()实现,具体实现的代码我已经写在下面这篇博文中了:
https://www.hhai.cc/thread-162-1-1.html【打开页面后搜索“当type取值为THRESH_OTSU 、THRESH_TRIANGLE时的示例代码”】

在上面链接的博文中我已经说了,函数threshold()的Python版才会返回进行阈值化时所使用的阈值,C++版本则不会,所以在OpenCV-C++环境下,函数threshold()使用OTSU算法进行阈值化处理时用的阈值我们是不知道的。如果想知道OTSU算法的阈值是多少,只有自己根据OTSU算法的原理写出代码进行计算。
这里昊虹君根据OTSU算法的原理写了一个计算OTSU阈值计算的函数,
具体的代码请大家访问本博文的原文获取,
本博文原文链接如下:
https://www.hhai.cc/thread-165-1-1.html
运行结果如下:

上面的阈值与我们在Python-OpenCV环境下使用函数threshold()得到的OTSU阈值是一样的:

上面这张截图来源于下面这篇博文:
https://www.hhai.cc/thread-162-1-1.html

二、图像的双阈值化
有时候图像中有明显的双分界特征,我们考虑用双阈值法进行阈值化操作。
所谓双阈值化是指对于两个阈值thresh1<thresh2,将大于thresh1且小于thresh2的灰度值设定为maxval,其余的灰度值设为0。
其数学表达式如下:
d s t ( x , y ) = { m a x v a l t h r e s h 2 > s r c ( x , y ) > t h r e s h 1 0 其它 dst(x,y)=\left\{\begin{matrix} maxval & thresh2>src(x,y)>thresh1 \\0 & 其它 \end{matrix}\right. dst(x,y)={maxval0​thresh2>src(x,y)>thresh1其它​
可以用函数threshold()实现图像的双阈值化,其C++代码如下:

//出处:昊虹AI笔记网(hhai.cc)
//用心记录计算机视觉和AI技术//博主微信/QQ 2487872782
//QQ群 271891601
//欢迎技术交流与咨询//OpenCV版本 OpenCV3.0#include <opencv2/opencv.hpp>
#include <iostream>using namespace std;
using namespace cv;int main()
{cv::Mat A1 = (cv::Mat_<uchar>(2, 3) << 0, 10, 50,80, 150, 255);cout << "A1中的数据为:\n" << A1 << endl << endl;double low_threshold = 70;double high_threshold = 180;double maxval1 = 222;Mat B1, B2, B3, B4, B5;// 小阈值对图像或矩阵进行阈值化操作threshold(A1, B1, low_threshold, maxval1, THRESH_BINARY);cout << "B1中的数据为:\n" << B1 << endl << endl;// 大阈值对图像或矩阵进行阈值化操作threshold(A1, B2, high_threshold, maxval1, THRESH_BINARY_INV);cout << "B2中的数据为:\n" << B2 << endl << endl;// 矩阵与运算得到阈值化结果cv::bitwise_and(B1, B2, B3);cout << "B3中的数据为:\n" << B3 << endl << endl;return(0);
}

运行结果如下图所示:

从上面的运行结果我们可以看出,原矩阵中介于阈值70到180之间的灰度值被置为了222,其它灰度值被置为了0。

二、图像的半阈值化
如果图像中有明显的目标与背景的差异特征,那么进行阈值化操作时,可以使用半阈值化进行操作。
半阈值化操作时,大于thresh的灰度值不变,其余灰度值置为0。
半阈值化的数学表达式如下:

函数threshold(),当参数type取值为“THRESH_TOZERO”时,实际上就是作的图像的半阈值化操作。
示例代码之前在博文https://www.hhai.cc/thread-162-1-1.html中就已经给出了,这里就不再给了。

图像的OTSU阈值化、双阈值化、半阈值化的原理及OpenCV代码实现相关推荐

  1. html文档半结构化数据,什么是半结构化数据(semi-structured data)?

    半结构化数据的定义 我们在设计一个信息系统时必然涉及到数据的存储,而数据存储用得最多的就是关系数据库.通常我们会将数据按业务分类,并设计相应的表,然后将对应的信息保存到相应的表中.比如一个企业信息管理 ...

  2. html文档半结构化数据,什么是半结构化数据?

    要考虑半结构化数据是什么,让我们从类比开始 – 采访. 假设您正在进行半结构化访谈.顾名思义,这在介于结构化和非结构化的访谈之间. 对于上下文,结构化访谈是指您的人力资源团队预先确定所询问的问题以及询 ...

  3. 图像的线性变换的原理及OpenCV代码实现~

    图像处理开发需求.图像处理接私活挣零花钱,请加微信/QQ 2487872782 图像处理开发资料.图像处理技术交流请加QQ群,群号 271891601 图像的线性变换是图像处理的基本运算,通常应用在调 ...

  4. 图像的Gamma(伽玛)校正的原理及OpenCV代码实现

    图像处理开发需求.图像处理接私活挣零花钱,请加微信/QQ 2487872782 图像处理开发资料.图像处理技术交流请加QQ群,群号 271891601 Gamma校正的原理很简单,就一个很简单的表达式 ...

  5. 基于MaxCompute SQL 的半结构化数据处理实践

    简介: MaxCompute作为企业级数据仓库服务,集中存储和管理企业数据资产.面向数据应用处理和分析数据,将数据转换为业务洞察.通过与阿里云内.外部服务灵活组合,可构建丰富的数据应用.全托管的数据与 ...

  6. Azure 数据基础知识探究核心数据概念-半结构化数据和非结构化数据

    描述非关系数据的类型 非关系数据通常分为两类:半结构化和非结构化. 什么是半结构化数据? 半结构化数据是包含字段的数据. 每个实体中的字段不必相同. 只需基于每个实体依据来定义字段. 上一单元中介绍的 ...

  7. 图像特征检测描述(一):SIFT、SURF、ORB、HOG、LBP特征的原理概述及OpenCV代码实现

    图像处理开发需求.图像处理接私活挣零花钱,请加微信/QQ 2487872782 图像处理开发资料.图像处理技术交流请加QQ群,群号 271891601 什么叫特征检测?就是检测图像中目标的特征呗,所谓 ...

  8. C#,图像二值化(06)——全局阈值的大津算法(OTSU Thresholding)及其源代码

    1.大津算法OTSU ALGORITHM OTSU算法效果很一般. 最大类间方差法是1979年由日本学者大津(Nobuyuki Otsu)提出的,是一种自适应阈值确定的方法,又叫大津法,简称OTSU, ...

  9. C#,图像二值化(13)——全局阈值的双峰平均值算法(Bimodal Thresholding)与源程序

    1.图像二值化概述 图像二值化是将彩色图像转换为黑白图像.大多数计算机视觉应用程序将图片转换为二进制表示.图像越是未经处理,计算机就越容易解释其基本特征. 二值化过程 在计算机存储器中,所有文件通常以 ...

最新文章

  1. 挑战 Intel 和英伟达,高通发布 Cloud AI 100 边缘推理芯片
  2. 18、Java Swing JMenu和JPopupMenu:菜单和弹出式菜单
  3. Python中使用turtle绘制多个同心圆
  4. 左神算法:复制含有随机指针节点的链表 / 复杂链表的复制(Java版本)
  5. ASP.NET 学习笔记_06 Httphandler
  6. BNU10791:DOTA选人
  7. VC++如何计算一段代码的执行时间
  8. AM335X 3款核心板比较
  9. 神仙工具!百度网盘资源一键转存阿里云盘,YYDS
  10. python画图——雪花(科赫曲线)
  11. 电脑系统重装win7的教程,win7系统一键安装
  12. 学生学籍管理系统(c语言)
  13. TF学习——TF之TensorFlow Slim:TensorFlow Slim的简介、安装、使用方法之详细攻略
  14. 模糊数学 计算机智能,《常用算法之智能计算 (五) 》:模糊计算
  15. 什么是核心文件,它们什么时候有用
  16. 多视图聚类的算法总结
  17. win10怎么用计算机的搜索,win10搜索文件内容怎么操作_win10如何搜索文档内的内容...
  18. 2021-06-19 20点 程序外生活 - 中国A50指数 机器预测学习跟踪记录 - 日线可能有反弹机会可以参与,但是周月线在跌势,建议见好就收。
  19. 【git系列004】解决 git 未指定冲突处理方法的问题
  20. cad连筋字体怎么安装_CAD字体还有这么多学问?出现乱码怎么办?送你2800款字体盘它...

热门文章

  1. 【动手学深度学习】Softmax 回归 + 损失函数 + 图片分类数据集
  2. 虚拟机安装+Ubuntu安装+ROS安装
  3. php设置和获取Cookie
  4. COMP9315 课堂笔记 week3 lecture3
  5. css3滚动倾斜,CSS3实现倾斜和旋转动画效果
  6. 4T硬盘安装操作系统
  7. InstructGPT:Pooled testing to isolate infected individuals
  8. Double,double
  9. ddr3ddr4 lpddr4速率_LPDDR3并不一定DDR4快吗?
  10. 突然心有所感,记录一下每天的感受吧