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

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


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


3.4 全局阈值处理改进方法

在实际的图像处理中,噪声严重影响阈值处理的结果,严重的噪声会把简单的阈值处理问题变为不能解决的问题。

例程 11.20:基于边缘信息改进全局阈值处理

对于大背景中的小目标,图像的直方图受到背景的大波峰控制,即由于背景内容太多而将目标在直方图中淹没了,使全局阈值处理容易失败。

如果只利用接近目标和背景之间的边缘的像素,忽略无效的背景区域像素对直方图的贡献,可以改善直方图的分布,从而便于通过阈值处理进行分割。

具体步骤如下:

(1)计算图像 f(x,y)f(x,y)f(x,y) 的梯度算子,得到梯度幅值图像;

(2)对梯度幅值图像进行二值处理,选取强边缘像素作为遮罩模板 gT(x,y)g_T(x,y)gT(x,y),以排除无效背景像素的影响;

(3)基于遮罩模板计算图像 f(x,y)f(x,y)f(x,y) 的直方图分布,即只对 gT(x,y)=1g_T(x,y)=1gT(x,y)=1 的像素进行统计计算;

(4)由基于遮罩模板的直方图找到适当的分割阈值,对图像 f(x,y)f(x,y)f(x,y) 进行全局阈值处理。

    # 11.20 基于边缘信息改进全局阈值处理img = cv2.imread("../images/Fig1041a.tif", flags=0)# # 全局阈值处理,作为参照比较histCV1 = cv2.calcHist([img], [0], None, [256], [0, 256])  # 灰度直方图totalPixels = img.shape[0] * img.shape[1]  # 像素总数totalGray = np.dot(histCV1[:,0], range(256))  # 内积, 总和灰度值meanGray = round(totalGray/totalPixels)  # 平均灰度ret, imgBin = cv2.threshold(img, meanGray, 255, cv2.THRESH_BINARY)  # thresh=meanGray# (1) 计算 Sobel 梯度算子SobelX = cv2.Sobel(img, cv2.CV_32F, 1, 0)  # 计算 x 轴方向SobelY = cv2.Sobel(img, cv2.CV_32F, 0, 1)  # 计算 y 轴方向grad = np.sqrt(SobelX**2 + SobelY**2)gradMax = np.int(np.max(grad))# (2) 设置阈值 T=0.3*gradMax,对梯度图像进行阈值处理,作为遮罩模板_, maskBW= cv2.threshold(np.uint8(grad), 0.3*gradMax, 255, cv2.THRESH_BINARY)# (3) 计算基于遮罩模板的直方图分布,以排除无效背景像素的影响histCV2 = cv2.calcHist([img], [0], maskBW, [256], [0, 256])histCV2[0] = 0# (4) 排除无效背景像素影响后,进行阈值处理Tmask = 120  # 观察直方图 histCV2,找到分割阈值_, imgBin2 = cv2.threshold(img, Tmask, 255, cv2.THRESH_BINARY)print(gradMax, meanGray)plt.figure(figsize=(9,6))plt.subplot(231), plt.axis('off'), plt.title("Origin"), plt.imshow(img, 'gray')plt.subplot(232,yticks=[]), plt.axis([0,255,0,np.max(histCV1)])plt.bar(range(256), histCV1[:,0]), plt.title("Gray Hist")plt.subplot(233), plt.axis('off'), plt.title("Binary"), plt.imshow(imgBin, 'gray')plt.subplot(234), plt.axis('off'), plt.title("Threshold of Sobel")plt.imshow(maskBW, cmap='gray')plt.subplot(235, yticks=[]), plt.title("Hist of boundries")  # 直方图plt.bar(range(256), histCV2[:,0])plt.subplot(236), plt.axis('off'), plt.title("Binary by edge improved")plt.imshow(imgBin2, 'gray')plt.tight_layout()plt.show()

在这里插入图片描述


(本节完)


版权声明:

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

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/565558.shtml

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

相关文章

Java实现八大排序算法

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

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

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

乘法口诀表

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…

【youcans 的 OpenCV 例程200篇】167.基于移动平均的可变阈值处理

欢迎关注 『youcans 的 OpenCV 例程 200 篇』 系列&#xff0c;持续更新中 欢迎关注 『youcans 的 OpenCV学习课』 系列&#xff0c;持续更新中 【youcans 的 OpenCV 例程200篇】167.基于移动平均的可变阈值处理 3.7 基于移动平均的可变阈值处理 移动平均法是一种简单高效的局…

【youcans 的 OpenCV 例程200篇】169.图像分割之区域分离

欢迎关注 『youcans 的 OpenCV 例程 200 篇』 系列&#xff0c;持续更新中 欢迎关注 『youcans 的 OpenCV学习课』 系列&#xff0c;持续更新中 【youcans 的 OpenCV 例程200篇】169.图像分割之区域分离 ### 4.2 区域分离与聚合 区域分裂合并算法的基本思想是将图像细分为一组…

多彩三角形

H5特效多才三角形&#xff0c;使用H5新特性canvas画布制作的四周阴影效果中部出现很多的各种颜色的三角形。 效果演示 代码演示 <!DOCTYPE HTML> <html><head><title>demo</title><style type"text/css">body {margin: 0;pa…

ado.net mysql 连接池_ADO.NET数据连接池

【IT168 技术文档】21世纪什么最贵&#xff1f;数据库连接。对于以数据库做数据存储基石的应用系统来说&#xff0c;数据库连接是整个系统中最珍贵的资源之一。数据库连接池是为了更有效地利用数据库连接的最重要措施。它对于一个大型的应用系统的性能至关重要&#xff0c;特别…

【youcans 的 OpenCV 例程200篇】170.图像分割之K均值聚类

【OpenCV 例程200篇】 系列&#xff0c;持续更新中… 【OpenCV 例程200篇 总目录-202205更新】 【youcans 的 OpenCV 例程200篇】170.图像分割之K均值聚类 5. 区域分割之聚类方法 5.1 基于 k 均值聚类的区域分割 聚类方法的思想是将样本集合按照其特征的相似性划分为若干类别…

计算名次和奖学金

使用Java的switch的判断计算学生的名次和对应的奖学金&#xff0c;根据文本提示输入你的名词&#xff0c;点击Enter之后会出现你应该获得的奖学金金额。 结果演示 代码演示 package com.eight; import java.util.Scanner; public class Mingci {public static void main(Str…

android反射开启通知_Android中反射的简单应用

自己对反射的理解和应用还处于比较浅显的阶段&#xff0c;写这篇文章更多在于整理总结&#xff0c;也就是帮助自己进一步的理解和学习反射机制。反射反射的概念是由Smith在1982年首次提出的&#xff0c;主要是指程序可以访问、检测和修改它本身状态或行为的一种能力。java中类反…

【OpenCV 例程200篇 目录-202205更新】

欢迎关注 『youcans 的 OpenCV 例程 200 篇』 系列&#xff0c;持续更新中 欢迎关注 『youcans 的 OpenCV学习课』 系列&#xff0c;持续更新中 【OpenCV 例程200篇 目录】 更新日期&#xff1a;2022-05-12 【youcans 的 OpenCV 例程200篇】01. 图像的读取&#xff08;cv2.im…