c++opencv汉字分割_机器学习小白,还不快pick一下——【视觉与图像:阈值分割】...

前言:安利Python来开发OpenCV的原因其实细心的小伙伴早在?【视觉与图像】Python+OpenCV教程入门篇就找到了想要的答案(点蓝字即可打开)

今天周五了!

今天还不下雨!!

今天又可以更新了!!!

581a66ac880ca5196370ea8cbafdef84.gif

先前小天邀请老王和大家聊到Python+OpenCV的第5波:颜色空间转换(点蓝字即可打开),那么接下来老王给同学们带来的是Python+OpenCV第6篇章:阈值分割,还不快收藏?住!

文章交代:

  • 学习使用不同的阈值方法”二值化”图像

推荐人群:

  • 初级入门、机器学习小白、技术爱好者

【图片可到文末?本节源码下载。】

阈值分割

01目标
  • 使用固定阈值、自适应阈值和Otsu阈值法”二值化”图像

  • OpenCV函数:cv2.threshold(), cv2.adaptiveThreshold()

02固定阈值分割

固定阈值分割很直接,一句话说就是像素点值大于阈值变成一类值,小于阈值变成另一类值。

a09e357eb48d355ab78e604ed8110b8f.png

38e726da6f47c59e071678f64157628c.png

cv2.threshold()用来实现阈值分割,ret是return value缩写,代表当前的阈值,暂时不用理会。函数有4个参数:

  • 参数1:要处理的原图,*一般是灰度图

  • 参数2:设定的阈值

  • 参数3:最大阈值,一般为255

  • 参数4:阈值的方式,主要有5种,详情:http://t.cn/EfZhnbq

下面结合代码理解下这5种阈值方式:

bc5dcdc7251915bd422b2ab49ef064ff.png

2b0fb2465228f5ba8fc04bde08a3bcb5.png

Tips:很多人误以为阈值分割就是二值化。从上图中可以发现,两者并不等同,阈值分割结果是两类值,而不是两个值,所以教程开头我把二值化加了引号。

16dec91b848a4ae5aa869bd2726fcbc0.png

03自适应阈值

看得出来固定阈值是在整幅图片上应用一个阈值进行分割,它并不适用于明暗分布不均的图片。 cv2.adaptiveThreshold()自适应阈值会每次取图片的一小部分计算阈值,这样图片不同区域的阈值就不尽相同。它有5个参数,其实很好理解,先看下效果:

400053e51886094376ab6f324632e308.png

ca133b4c0e5c7ac07bf275f07e3ef80d.png

  • 参数1:要处理的原图

  • 参数2:最大阈值,一般为255

  • 参数3:小区域阈值的计算方式

  1. ADAPTIVE_THRESH_MEAN_C:小区域内取均值

  2. ADAPTIVE_THRESH_GAUSSIAN_C:小区域内加权求和,权重是个高斯核

  • 参数4:阈值方式(跟前面讲的那5种相同)

  • 参数5:小区域的面积,如11就是11*11的小块

  • 参数6:最终阈值等于小区域计算出的阈值再减去此值

如果你没看懂上面的参数也不要紧,暂时会用就行,当然我建议你调整下参数看看不同的结果。

04Otsu阈值

在前面固定阈值中,我们是随便选了一个阈值如127,那如何知道我们选的这个阈值效果好不好呢?答案是:不断尝试,所以这种方法在很多文献中都被称为经验阈值。Otsu阈值法就提供了一种自动高效的二值化方法,不过我们直方图还没学,这里暂时略过。

好吧,44adf7db93e1a6638058a021a86d4b9b.png我知道激起了你的兴趣~ o( ̄▽ ̄)o,有能力的童鞋可以看下继续往下看番外篇~

05小结

cv2.threshold()用来进行固定阈值分割。固定阈值不适用于光线不均匀的图片,所以用 cv2.adaptiveThreshold()进行自适应阈值分割。 二值化跟阈值分割并不等同。针对不同的图片,可以采用不同的阈值方法。

06练习

Otsu阈值是一种高效的二值化算法,请阅读(番外篇)?

引用

  • 本节源码 http://t.cn/EfZcSIJ

  • Image Thresholding http://t.cn/EfZcHyc

大部分图像处理任务都需要先进行二值化操作,阈值的选取很关键,Otsu阈值法会自动计算阈值。

Otsu阈值法(日本人大津展之提出的,也可称大津算法)非常适用于双峰图片,啥意思呢?

Otsu N. A threshold selection method from gray-level histograms[J]. IEEE transactions on systems, man, and cybernetics, 1979, 9(1): 62-66. (http://t.cn/EfZx2dl)

f8637b14ae202d8f49aefe6ee1835dac.png1.什么是双峰图片

双峰图片就是指图片的灰度直方图上有两个峰值,直方图就是每个值(0~255)的像素点个数统计,后面会详细介绍。

0aa26883edb56d3b14165c3c08388616.png

Otsu算法假设这副图片由前景色和背景色组成,通过统计学方法(最大类间方差)选取一个阈值,将前景和背景尽可能分开,我们先来看下代码,然后详细说明下算法原理。

f8637b14ae202d8f49aefe6ee1835dac.png2.代码示例

下面这段代码对比了使用固定阈值和Otsu阈值后的不同结果:

另外,对含噪点的图像,先进行滤波操作效果会更好。

111aeeb482b66dba19be10a213a2e60a.png

下面我们用Matplotlib把原图、直方图和阈值图都显示出来:

38da83cc79fb2b19c5ac9b390393c602.png

288996b475c788d811a39b4a21b392c0.png

可以看到,Otsu阈值明显优于固定阈值,省去了不断尝试阈值判断效果好坏的过程。其中,绘制直方图时,使用了numpy中的ravel()函数,它会将原矩阵压缩成一维数组,便于画直方图。

f8637b14ae202d8f49aefe6ee1835dac.pngOtsu算法详解

Otsu阈值法将整幅图分为前景(目标)和背景,以下是一些符号规定:

  • T:分割阈值

  • N0:前景像素点数

  • N1:背景像素点数

  • ω0:前景的像素点数占整幅图像的比例

  • ω1:背景的像素点数占整幅图像的比例

  • μ0:前景的平均像素值

  • μ1:背景的平均像素值

  • μ:整幅图的平均像素值

  • rows×cols:图像的行数和列数

结合下图会更容易理解一些,有一副大小为4×4的图片,假设阈值T为1,那么:

03c50f7bf222b1e328e2be0b677d3710.png

其实很好理解,N0+N1就是总的像素点个数,也就是行数乘列数:

d8103caa797dff7208568884a0f3a9cf.png

ω0和ω1是前/背景所占的比例,也就是:

5de3deae37a8c93558ac34bf6e365510.png

整幅图的平均像素值就是:

d1fa05a0d6523962b70f29da6984fdfc.png

‍‍此时,我们定义一个前景μ0与背景μ1" role="presentation" style="font-size: 15px; box-sizing: border-box; display: inline-table; line-height: 0; text-align: left; overflow-wrap: normal; float: none; direction: ltr; max-width: none; max-height: none; min-width: 0px; min-height: 0px; border-width: 0px; border-style: initial; border-color: initial; padding-top: 1px; padding-bottom: 1px; color: rgb(36, 41, 46); font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; background-color: rgb(255, 255, 255);">μ1μ1的方差g" role="presentation" style="font-size: 15px; box-sizing: border-box; display: inline-table; line-height: 0; text-align: left; overflow-wrap: normal; float: none; direction: ltr; max-width: none; max-height: none; min-width: 0px; min-height: 0px; border-width: 0px; border-style: initial; border-color: initial; padding-top: 1px; padding-bottom: 1px; color: rgb(36, 41, 46); font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; background-color: rgb(255, 255, 255);">gg:‍‍

bb23c2ed371fb9872f5909d83e973604.png

将前述的1/2/3公式整合在一起,便是:

283f47235ecf098e1eeb72ea1831a1b9.png

g" role="presentation" style="box-sizing: border-box; display: inline-table; line-height: 0; text-align: left; font-size: 18.08px; overflow-wrap: normal; float: none; direction: ltr; max-width: none; max-height: none; min-width: 0px; min-height: 0px; border-width: 0px; border-style: initial; border-color: initial; padding-top: 1px; padding-bottom: 1px; color: rgb(36, 41, 46); font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; background-color: rgb(255, 255, 255);">‍‍g就是前景与背景两类之间的方差,这个值越大,说明前景和背景的差别也就越大,效果越好。Otsu算法便是遍历阈值T,使得g最大,所以又称为最大类间方差法。基本上双峰图片的阈值T在两峰之间的谷底。‍‍

引用

  • 本节源码 http://t.cn/EfZcSIJ http://t.cn/EfZp5Vg

  • numpy.ravel http://t.cn/EfZpQL9

  • Otsu’s Method(wikipedia) http://t.cn/EfZpFlb

  • Image Thresholding http://t.cn/EfZcHyc

  • 一维OTSU法、最小交叉熵法、二维OTSU法及C++源码 http://t.cn/EfZ0gBq

  • Otsu N. A threshold selection method from gray-level histograms[J]. IEEE transactions on systems, man, and cybernetics, 1979, 9(1): 62-66. http://t.cn/EfZOfK3

0b4304ab631d0dbb98bb4f9cae6b58eb.png

如果你也有想分享的干货,可以登录天池实验室(notebook),包括赛题的理解、数据分析及可视化、算法模型的分析以及一些核心的思路等内容。

小天会根据你分享内容的数量以及程度,给予丰富的神秘天池大礼以及粮票奖励。分享成功后你也可以通过下方钉钉群?主动联系我们的社区运营同学(钉钉号:doqclsn 或 yiwen1991)

6a3dea374f526c38b5674b3321373a43.png

天池宝贝们有任何问题,可在戳“留言”评论或加入钉钉群留言,小天会认真倾听每一个你的建议!003c3dd697fe2ba85a8ba06d69d56583.png

4f480c3e79c717ca232ce05b20a44d50.gif

点击下方图片即可阅读

50fde545d0cfab83c7f40cb5601c0962.png

如何使用PAI深度学习TensorFlow读写OSS教程?

baa1e68ba422d70ad3c4c0f0807c8a21.png

如果你会模型融合!那么,我要和你做朋友

ce8723b86d3f764ee2da956df6651d68.png

《流浪地球》为何从不被看好到票房榜首,数据分析给你答案!

6e0ba8f349f2543937b5778ae642888e.png

除了奖金还送800万入驻权益,未来科技城——智能城市建设合伙人大赛正式启动啦!

92ed649f44637b8f1ffdde1fb53c2ac4.png     AI安全新探索,IJCAI-19阿里巴巴人工智能对抗算赛,约一波?

a65c53a27c43467fe739f38e53a3972e.gif563b9ea2ecdc36648a651be1108ab36d.png

听说戳了的人都?

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/409145.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mysql主键外键_MySQL主键和外键使用及说明

摘自网上一个经典的例子:大哥和小弟一、外键约束MySQL通过外键约束来保证表与表之间的数据的完整性和准确性。外键的使用条件:1.两个表必须是InnoDB表,MyISAM表暂时不支持外键(据说以后的版本有可能支持,但至少目前不支持)&#x…

mysql8.0.11 安装顺序_mysql 8.0.11 安装步骤详解

本文为大家分享了mysql 8.0.11 安装步骤,供大家参考,具体内容如下第一步:下载安装包MYSQL官方下载地址:官方下载这里第一项是在线安装,第二项是离线包安装,我选择的是第二项(不用管你电脑是多少位的操作系统…

HDU1258 DFS

题意&#xff1a;求n个数中的某些数的和等于t&#xff0c;并输出 dfs 记录下已经输出过的&#xff0c;然后每次比较一下&#xff0c;这样就能避免重复 View Code 1 #include<stdio.h>2 #include<string.h>3 #include<stdlib.h>4 #include<algorithm>5…

Python 问题--encode、decode及shell中文输出

最近在使用python的时候&#xff0c;涉及到中文输出的时候经常会出现乱码的问题&#xff0c;所以就上网搜索了下&#xff0c;参考了1.Python字符串的encode与decode研究心得乱码问题解决方法&#xff1b; 2.python 中编码的再次学习 此外&#xff0c;更多详细字符编码的可以看…

python 模块学习--Numpy

Numpy是Python的一个科学计算库&#xff0c;提供了矩阵运算的功能。安装方法可以直接使用pip install numpy命令&#xff0c;也可以在http://sourceforge.net/projects/numpy/files/NumPy/上下载与python相应版本的exe文件。 这里就记录下在学习和使用Numpy中所用过的一些函数…

mysql独有的函数_数据库之MySQL函数(一)

一、数学函数1、绝对值函数ABS(x) &#xff1a;返回 x 的绝对值mysql> select ABS(2),ABS(-2.3),ABS(-22);返回的结果如下&#xff1a;数学学得好的大佬应该知道(本人是个数学渣。。。。)&#xff0c;负数的绝对值是正数&#xff0c;正数的绝对值还是正数本身2、 返回圆周率…

teststand调用python模块_TestStand 基本知识[10]--在序列中调用代码模块之--LabVIEW

在TestStand调用外部代码模块时&#xff0c;使用频率最高的就是LabVIEW VI。下面调用TestStand Demo程序&#xff0c;可以看到如下图&#xff1a;1. 添加LabVIEW Action步骤,并创建或者加载VI。当添加LabVIEW步骤后&#xff0c;可以通过VI Path加载想要调用的VI(也可以创建模板…

C#事件机制(记住流程)

转自&#xff1a;http://jimmyloveforever.blog.163.com/blog/static/119775247200951303935836/ 1&#xff0c;C#事件机制是基于委托实现的&#xff0c;因此要首先定义一个委托EventHandler&#xff1a;public delegate void EventHandler(object from , myEventArgs e) Syste…

Android Studio 安装配置问题总结

之前一直都是使用Eclipse写Android的&#xff0c;但一直都有听说Android Studio是一个更好的用于开发Android的软件&#xff0c;之前其实也有保存过一些别人写的安装和配置Android Studio的一些教程&#xff0c;在这里也列出来&#xff1a;Android Studio 入门指南&#xff1b;…

说说mysql_说说MySQL权限 - andyqian的个人空间 - OSCHINA - 中文开源技术交流社区

本文首发于个人微信公众号《andyqian》,期待你的关注&#xff5e;前言今天继续MySQL系列文章&#xff0c;讲讲MySQL权限相关的内容。我们都知道&#xff0c;在写系统的时候&#xff0c;都会有权限相关的服务&#xff0c;以达到权限控制的目的。以最简单的权限菜单为例&#xff…