【youcans 的 OpenCV 例程200篇】160. 图像处理之OTSU 方法

欢迎关注 『youcans 的 OpenCV 例程 200 篇』 系列,持续更新中
OpenCV 例程200篇 总目录-202205更新


【youcans 的 OpenCV 例程200篇】160. 图像处理之OTSU 方法


3.3 全局阈值处理 Otsu 方法

阈值处理本质上是对像素进行分类的统计决策问题。

OTSU 方法又称大津算法,使用最大化类间方差(intra-class variance)作为评价准则,基于对图像直方图的计算,可以给出类间最优分离的最优阈值。

任取一个灰度值 T,可以将图像分割为两个集合 F 和 B,集合 F、B 的像素数的占比分别为 pF、pB,集合 F、B 的灰度值均值分别为 mF、mB,图像灰度值为 m,定义类间方差为:
ICV=pF∗(mF−m)2+pB∗(mB−m)2ICV = p_F * (m_F - m)^2 + p_B * (m_B - m)^2 ICV=pF(mFm)2+pB(mBm)2
使类间方差 ICV 最大化的灰度值 T 就是最优阈值。

因此,只要遍历所有的灰度值,就可以得到使 ICV 最大的最优阈值 T。

OpenCV 提供了函数 cv.threshold 可以对图像进行阈值处理,将参数 type 设为 cv.THRESH_OTSU,就可以使用使用 OTSU 算法进行最优阈值分割。


例程 11.17:OTSU 最优全局阈值处理

    # 11.17 OTSU 最优全局阈值处理img = cv2.imread("../images/Fig1039a.tif", flags=0)deltaT = 1  # 预定义值histCV = cv2.calcHist([img], [0], None, [256], [0, 256])  # 灰度直方图grayScale = range(256)  # 灰度级 [0,255]totalPixels = img.shape[0] * img.shape[1]  # 像素总数totalGray = np.dot(histCV[:,0], grayScale)  # 内积, 总和灰度值T = round(totalGray/totalPixels)  # 平均灰度while True:numC1, sumC1 = 0, 0for i in range(T): # 计算 C1: (0,T) 平均灰度numC1 += histCV[i,0]  # C1 像素数量sumC1 += histCV[i,0] * i  # C1 灰度值总和numC2, sumC2 = (totalPixels-numC1), (totalGray-sumC1)  # C2 像素数量, 灰度值总和T1 = round(sumC1/numC1)  # C1 平均灰度T2 = round(sumC2/numC2)  # C2 平均灰度Tnew = round((T1+T2)/2)  # 计算新的阈值print("T={}, m1={}, m2={}, Tnew={}".format(T, T1, T2, Tnew))if abs(T-Tnew) < deltaT:  # 等价于 T==Tnewbreakelse:T = Tnew# 阈值处理ret1, imgBin = cv2.threshold(img, T, 255, cv2.THRESH_BINARY)  # 阈值分割, thresh=Tret2, imgOtsu = cv2.threshold(img, T, 255, cv2.THRESH_OTSU)  # 阈值分割, thresh=Tprint(ret1, ret2)plt.figure(figsize=(7,7))plt.subplot(221), plt.axis('off'), plt.title("Origin"), plt.imshow(img, 'gray')plt.subplot(222, yticks=[]), plt.title("Gray Hist")  # 直方图histNP, bins = np.histogram(img.flatten(), bins=255, range=[0, 255], density=True)plt.bar(bins[:-1], histNP[:])plt.subplot(223), plt.title("global binary(T={})".format(T)), plt.axis('off')plt.imshow(imgBin, 'gray')plt.subplot(224), plt.title("OTSU binary(T={})".format(round(ret2))), plt.axis('off')plt.imshow(imgOtsu, 'gray')plt.tight_layout()plt.show()

在这里插入图片描述


(本节完)


版权声明:

youcans@xupt 原创作品,转载必须标注原文链接:(https://blog.csdn.net/youcans/article/details/124281210)

Copyright 2022 youcans, XUPT
Crated:2022-4-18


欢迎关注 『youcans 的 OpenCV 例程 200 篇』 系列,持续更新中
欢迎关注 『youcans 的 OpenCV学习课』 系列,持续更新中

【youcans 的 OpenCV 例程200篇】158. 阈值处理之固定阈值法
【youcans 的 OpenCV 例程200篇】159. 图像分割之全局阈值处理
【youcans 的 OpenCV 例程200篇】160. 图像处理之OTSU 方法
【youcans 的 OpenCV 例程200篇】161. OTSU 阈值处理算法的实现
【youcans 的 OpenCV 例程200篇】162. 全局阈值处理改进方法
【youcans 的 OpenCV 例程200篇】163. 基于边缘信息改进全局阈值处理
【youcans 的 OpenCV 例程200篇】164.使用 Laplace 边缘信息改进全局阈值处理
【youcans 的 OpenCV 例程200篇】165.多阈值 OTSU 处理方法
【youcans 的 OpenCV 例程200篇】166.自适应阈值处理
【youcans 的 OpenCV 例程200篇】167.基于移动平均的可变阈值处理
更多内容,请见:
【OpenCV 例程200篇 总目录-202206更新】

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

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

相关文章

【youcans 的 OpenCV 例程200篇】161. OTSU 阈值处理算法的实现

OpenCV 例程200篇 总目录-202205更新 欢迎关注 『youcans 的 OpenCV 例程 200 篇』 系列&#xff0c;持续更新中 【youcans 的 OpenCV 例程200篇】161. OTSU 阈值处理算法的实现 3.3 全局阈值处理 Otsu 方法 OTSU 方法又称大津算法&#xff0c;使用最大化类间方差&#xff08;…

近似值匹配

根据文本提示输入英文的星期一到星期日的任意一天的英文的首字母&#xff0c;程序会自动进行近似匹配并输出根据你输入的首字母匹配到的星期。 程序分析 1.大小写的转化 2.判断是否是星期几的英文首字母 3.如果是&#xff0c;输出星期几 4.如果不是给出相应的提示 结果演示 输…

mysql plsql cursor_Oracle--plsql游标创建和使用

游标(cursor)是Oracle系统在内存中开辟的一个工作区&#xff0c;在其中存放SELECT语句返回的查询结果。&#xff0c;PL/SQL隐式建立并自动管理这一游为什么要Oracle游标&#xff1a;先看这个&#xff1a;DECLAREv_empno emp.empno%type;v_ename emp.ename%type;BEGINSELECT emp…

【youcans 的 OpenCV 例程200篇】162. 全局阈值处理改进方法

欢迎关注 『youcans 的 OpenCV 例程 200 篇』 系列&#xff0c;持续更新中 OpenCV 例程200篇 总目录-202205更新 【youcans 的 OpenCV 例程200篇】162. 全局阈值处理改进方法 3.4 全局阈值处理改进方法 在实际的图像处理中&#xff0c;噪声严重影响阈值处理的结果&#xff0c;…

mysql优化 坑_mysql之我们终将踩过的坑(优化)

一、EXPLAIN做MySQL优化&#xff0c;我们要善用 EXPLAIN 查看SQL执行计划。下面来个简单的示例&#xff0c;标注(1,2,3,4,5)我们要重点关注的数据type列&#xff0c;连接类型。一个好的sql语句至少要达到range级别。杜绝出现all级别key列&#xff0c;使用到的索引名。如果没有选…

求1+2!+3!+......+20!的和

使用java算法求求12&#xff01;3&#xff01;…20!的和 结果演示 代码展示 package com.six;public class Qiudsh {public static void main(String[] args) {long sum 0; long temp 1;for(int i1;i<20;i){temp 1;for(int j1;j<i;j){temp temp * j;}sum sumtemp…

计算机设计大赛国奖作品_6. 测试报告

计算机设计大赛国奖作品_6. 测试报告 如果本文对你有帮助&#xff0c;欢迎点赞或在评论区留言&#xff0c;可以发送完整项目文档和源程序。 本系列是2021年中国大学生计算机设计大赛作品“环境监测无人机航线优化”的相关文档&#xff0c;获得2021年西北赛区一等奖&#xff0c…

【youcans 的 OpenCV 例程200篇】163. 基于边缘信息改进全局阈值处理

欢迎关注 『youcans 的 OpenCV 例程 200 篇』 系列&#xff0c;持续更新中 OpenCV 例程200篇 总目录-202205更新 【youcans 的 OpenCV 例程200篇】163. 基于边缘信息改进全局阈值处理 3.4 全局阈值处理改进方法 在实际的图像处理中&#xff0c;噪声严重影响阈值处理的结果&…

Java实现八大排序算法

我对java的八大排序算法进行了总结&#xff0c;以此文展示Java八大算法 常见排序算法如下&#xff1a; 1.直接插入排序 2.希尔排序 3.简单选择排序 4.堆排序 5.冒泡排序 6.快速排序 7.归并排序 8.基数排序 排序方法示例简介 直接插入排序 基本思想 通常人们整理桥牌的方法…

【youcans 的 OpenCV 例程200篇】164.使用 Laplace 边缘信息改进全局阈值处理

欢迎关注 『youcans 的 OpenCV 例程 200 篇』 系列&#xff0c;持续更新中 OpenCV 例程200篇 总目录-202205更新 【youcans 的 OpenCV 例程200篇】164.使用 Laplace 边缘信息改进全局阈值处理 3.4 全局阈值处理改进方法 在实际的图像处理中&#xff0c;噪声严重影响阈值处理的…

乘法口诀表

java程序之乘法口诀表的实现。 结果演示 代码演示 package com.seven;public class Cfb {public static void main(String[] args) {for(int i1;i<9;i){for(int j1;j<i;j){System.out.print(j"*"i""(j*i));}System.out.println("");}}…

mysql explain 派生表_MySQL的Explain命令

Explain命令是查看查询优化器如何决定执行查询的主要办法。调用 EXPLAIN要使用EXPLAIN&#xff0c;只需在查询中的SELECT关键字之前增加EXPLAIN。MySQL会在查询上设置一个标记。当执行查询时&#xff0c;这个标记会使其返回关于在执行计划中每一步的信息&#xff0c;而不是执行…

【youcans 的 OpenCV 例程200篇】165.多阈值 OTSU 处理方法

欢迎关注 『youcans 的 OpenCV 例程 200 篇』 系列&#xff0c;持续更新中 OpenCV 例程200篇 总目录-202205更新 【youcans 的 OpenCV 例程200篇】165.多阈值 OTSU 处理方法 3.5 多阈值处理方法 OTSU 方法使用最大化类间方差&#xff08;intra-class variance&#xff09;作为…

完全数

java程序实现完全数&#xff0c;那么什么是完全数的呢&#xff0c;完全数&#xff0c;又称完美数或完备数&#xff0c;是一些特殊的自然数。它所有的真因子&#xff08;即除了自身以外的约数&#xff09;的和&#xff08;即因子函数&#xff09;&#xff0c;恰好等于它本身。 …

【youcans 的 OpenCV 例程200篇】166.自适应阈值处理

欢迎关注 『youcans 的 OpenCV 例程 200 篇』 系列&#xff0c;持续更新中 OpenCV 例程200篇 总目录-202205更新 【youcans 的 OpenCV 例程200篇】166.自适应阈值处理 3.6 自适应阈值处理 噪声和非均匀光照等因素对阈值处理的影响很大&#xff0c;例如光照复杂时 Otsu 算法等全…

任一汉字在Unicode表中的顺序

查询任意一个汉字在Unicode表中的顺序并进行输出显示。 结果演示 代码演示 package com.seven; public class WeiZhi {public static void main(String[] args) {char A 我;System.out.println("汉字 我 在Unicode表中的顺序&#xff1a;"(int)A);}}了解更多关注…

【youcans 的 OpenCV 例程200篇】168.图像分割之区域生长

欢迎关注 『youcans 的 OpenCV 例程 200 篇』 系列&#xff0c;持续更新中 欢迎关注 『youcans 的 OpenCV学习课』 系列&#xff0c;持续更新中 【youcans 的 OpenCV 例程200篇】168.图像分割之区域生长 4. 区域分割的基本方法 4.1 区域生长 区域生长方法将具有相似性质的像素…

倒三角

Java实现一个倒立的三角形形状进行输出显示。根据文本提示输入一个整数&#xff0c;输入的整数是生成的倒三角形的行数&#xff0c;输入整数之后点击回车下面就会呈现出你想要得到的三角形。 结果演示 代码演示 package com.eight; import java.util.Scanner; public class …

mysql中文注入_SQL注入之Mysql报错注入

——志向和热爱是伟大行为的双翼。昨天偷懒了没学什么东西&#xff0c;先自我反省一下 - -。今天认真的学习了一下Mysql报错注入利用方法及原理&#xff0c;好久之前就像认真的学一下这个了&#xff0c;是在上海市大学生网络安全大赛中遇到的web100。当时懵逼状态&#xff0c;被…

计算字符位置

根据已有的字符串找到自己想要的字符位置&#xff0c;程序会帮助你找到你想要的任意字符的位置&#xff0c;包括一共有几个这样的字符&#xff0c;第一次在哪里出现&#xff0c;最后一次在哪里出现等。 结果演示 代码演示 package com.eight; public class FangFa {public s…