图像处理与计算机视觉--第五章-图像分割-自适应阈值分割

news2024/11/23 19:34:30

文章目录

    • 1.自适应阈值分割介绍
    • 2.自适应阈值函数参数解析
    • 3.高斯概率函数介绍
    • 4.自适应阈值分割核心代码
    • 5.自适应阈值分割效果展示
    • 6.参考文章及致谢

1.自适应阈值分割介绍

  在图片处理过程中,针对铺前进行二值化等操作的时候,我们希望能够将图片相应区域内所有的信息提供保留。实验室环境下,相应的素材是模板化的,但是将实验室方法应用于现实环境中时,我们会发现光影环境对于效果的影响其实是很大的。在这种情况下进行处理,会使得结果不如人意:一块黑,一块白,且黑的区域的特征无法提取。这时候自适应阈值算法尤为重要。与全局阈值不同,它更加注重上下文关系,将原本图片分割成更小的区域进行判断,极大地降低了阴影对于图片本身的影响。
在这里插入图片描述

  自适应阈值用于二值化处理图像,具有比较好的处理效果,相比对全阈值处理方法,自适应阈值中的每一个像素点的阈值都不是固定相同的,而是由其领域中的图像像素点加权平均计算而得到的,这样的处理方法有如下好处:

1.每个像素位置处的二值化阈值不是固定不变的,而是由其周围邻域像素的分布来决定的。
2.亮度较高的图像区域的二值化阈值通常会较高,而亮度较低的图像区域的二值化阈值则会相适应地变小。
3.不同亮度、对比度、纹理的局部图像区域将会拥有相对应的局部二值化阈值,这样处理出的图像效果更加明显。

2.自适应阈值函数参数解析

  在Opencv库函数中,给出了自适应阈值分割的函数如下所示:

fig1 = cv2.adaptiveThreshold(src, maxValue, adaptiveMethod, thresholdType, blockSize, C, dst=None)

  接下来我将具体解释adaptiveThreshold()中各个参数的意义,如下所示:

"""
fig=cv2.adaptiveThreshold(src, maxValue, adaptiveMethod, thresholdType, blockSize, C, dst=None)
参数解释:
       1.src:原图像,就是你需要进行自适应阈值分割处理的图像
       2.maxValue:最大像素点,其含义表示如果某点的像素值大于对应的阈值,那么将像素值取为255.
       3.adaptiveMethod:计算阈值的方法,Opencv中包括了两种:1.cv.ADAPTIVE_THRESH_MEAN_C:计算出领域的平均值作为阈值。
                                                        2.DAPTIVE_THRESH_GAUSSIAN_C:计算出领域的高斯均值作为阈值。
       4.thresholdType:取值类型,只有两个取值:1.THRESH_BINARY   2.THRESH_BINARY_INV
       5.blockSize:计算单位是像素的邻域块大小选择,这是局部邻域大小,只能取奇数,如3/5/7/9/11等
       6.C:阈值偏移量,正负数都可以,所以阈值的大小=C+adaptiveMethod计算出的阈值值
"""

3.高斯概率函数介绍

高斯分布是人工智能方面很常见的一种概率分布函数,常见的一维高斯概率密度分布函数如下所示:
p ( x ) = 1 σ 2 π e − ( x − μ ) 2 2 σ 2 p(x)=\frac1{\sigma\sqrt{2\pi}}e^{-\frac{(x-\mu)^2}{2\sigma^2}} p(x)=σ2π 1e2σ2(xμ)2

在高斯分布函数中,我们可以随意调节标准差 σ \sigma σ μ \mu μ的值,来进行高斯分布的变换,如下所示:
在这里插入图片描述
在图像处理中,我们一般用到二维的高斯概率分布函数,如下所示:
f ( x , y ) = ( 2 π σ 1 σ 2 1 − ρ 2 ) − 1 e x p [ − 1 2 ( 1 − ρ 2 ) ( ( x − μ 1 ) 2 σ 1 2 − 2 ρ ( x − μ 1 ) ( y − μ 2 ) σ 1 σ 2 + ( y − μ 2 ) 2 σ 2 2 ) ] f\left(x,y\right)=\left(2\pi\sigma_{1}\sigma_{2}\sqrt{1-\rho^{2}}\right)^{-1}exp\left[-\frac{1}{2\left(1-\rho^{2}\right)}\left(\frac{\left(x-\mu_{1}\right)^{2}}{\sigma_{1}^{2}}-\frac{2\rho\left(x-\mu_{1}\right)\left(y-\mu_{2}\right)}{\sigma_{1}\sigma_{2}}+\frac{\left(y-\mu_{2}\right)^{2}}{\sigma_{2}^{2}}\right)\right] f(x,y)=(2πσ1σ21ρ2 )1exp[2(1ρ2)1(σ12(xμ1)2σ1σ22ρ(xμ1)(yμ2)+σ22(yμ2)2)]
当我们令 σ 1 \sigma_{1} σ1= σ 2 \sigma_{2} σ2= σ \sigma σ,同时将 μ \mu μ ρ \rho ρ置为0,得出的高斯概率函数如下所示:
g ( x , y ) = 1 2 π σ 2 e − ( x 2 + y 2 ) 2 σ 2 g(x,y)=\frac{1}{2\pi\sigma^2}e^{-\frac{(x^2+y^2)}{2\sigma^2}} g(x,y)=2πσ21e2σ2(x2+y2)

高斯概率函数是相对于二维坐标产生的,其中(x,y)为点坐标,要得到一个高斯滤波器模板,应先对高斯函数进行离散化,将得到的值作为模板的系数。例如:要产生一个33的高斯滤波器模板,以模板的中心位置为坐标原点进行取样,模板在各个位置的坐标,如下图所示(x轴水平向右,y轴竖直向下)
在这里插入图片描述

标准差 σ =1.3 的 33 的整数形式的高斯滤波器如下:

K = 1 16 ⋅ [ 1 2 1 2 4 2 1 2 1 ] K=\dfrac{1}{16}\cdot\begin{bmatrix}1&2&1\\2&4&2\\1&2&1\end{bmatrix} K=161 121242121
标准差σ的值可以任意选取,如果σ较小,那么生成的模板的中心系数较大,而周围的系数较小,这样对图像的平滑效果就不是很明显;反之,σ较大,则生成的模板的各个系数相差就不是很大,比较类似均值模板,对图像的平滑效果比较明显,不管选择什么 σ值,我们构建3*3高斯核的时候要确保这九个点加起来为1,从而得到最终的高斯模板。

4.自适应阈值分割核心代码

import cv2
import numpy as np
from matplotlib import pyplot as plt
# 支持中文
plt.rcParams['font.sans-serif'] = ['SimHei'] # 用来正常显示中文标签
plt.rcParams['axes.unicode_minus'] = False # 用来正常显示负号
def adaptiveThreshold_test():
   img = cv2.imread(r'C:\Users\Zeng Zhong Yan\Desktop\py.vs\Mechine Learning\lena.jpg',0)#读入图片
   img = cv2.medianBlur(img, 5)#中值滤波来处理图像
   #图像切割
   #全图像二值化/全局阈值法处理图像
   ret, th1 = cv2.threshold(img, 127, 255, cv2.THRESH_BINARY)
   #平均值计算阈值方法(cv2.ADAPTIVE_THRESH_MEAN_C)-偏移值
   th2 = cv2.adaptiveThreshold(img, 255, cv2.ADAPTIVE_THRESH_MEAN_C, cv2.THRESH_BINARY, 11, 2)
   #高斯值计算阈值方法(cv2.ADAPTIVE_THRESH_GAUSSIAN_C)-偏移值
   th3 = cv2.adaptiveThreshold(img, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY, 11, 2)
   #图像可视化绘制
   titles = [u'原始图像', u'全局阈值处理图像',u'自适应平均阈值处理图像', u'自适应高斯阈值处理图像']
   images = [img, th1, th2, th3]
   for i in range(4):
    plt.subplot(2, 2, i + 1), plt.imshow(images[i], 'gray')
    plt.title(titles[i])
    plt.xticks([]), plt.yticks([])
   plt.show()

if __name__ == '__main__':
  adaptiveThreshold_test()

5.自适应阈值分割效果展示

在这里插入图片描述

6.参考文章及致谢

本章内容的完成离不开大佬文章的启发和帮助,在这里列出名单,如果对于内容还有不懂的,可以移步对应的文章进行进一步的理解分析。
1.自适应阈值图像切割:https://blog.csdn.net/weixin_43977647/article/details/115354680?spm=1001.2014.3001.5502
如果大家这这篇blog中有什么不明白的可以去他的专栏里面看看,内容非常全面,应该能够有比较好的解答。
在文章的最后再次表达由衷的感谢!!

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

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

相关文章

数字IC前端学习笔记:数字乘法器的优化设计(Wallace Tree乘法器)

相关阅读 数字IC前端https://blog.csdn.net/weixin_45791458/category_12173698.html?spm1001.2014.3001.5482 进位保留乘法器依旧保留着阵列的排列规则,只是进位是沿斜下角,如果能使用树形结构来规划这些进位保留加法器,就能获得更短的关键…

ToBeWritten之让响应团队参与并做好沟通

也许每个人出生的时候都以为这世界都是为他一个人而存在的,当他发现自己错的时候,他便开始长大 少走了弯路,也就错过了风景,无论如何,感谢经历 转移发布平台通知:将不再在CSDN博客发布新文章,敬…

网页动画科普LLM原理;淘宝推出AI试衣间;爆火的AI极简人像;100天创业日程表;Llama 2详解 | ShowMeAI日报

👀日报&周刊合集 | 🎡生产力工具与行业应用大全 | 🧡 点赞关注评论拜托啦! 🔥 Meta Connect 2023,发布基于 LLama 2 的AI聊天助手和虚拟角色 9月27日-28日,Meta 举办了年度重要会议 Meta Co…

vue3 + vite项目使用SVG图标

我们在开发一个项目时常会用到一些图标,有些图标在有限的图标库中却是没有,因此少数的图标需要我们去网上查找,或是自定义一些专用的图标。一般很少有图标库满足现实的项目开发,这时将推荐使用 iconify 这个图标库,几乎…

Zabbix 监控系统安装和部署

Zabbix 监控系统安装和部署 一、zabbix 是什么?1.1、zabbix 监控原理(重点)1.2、Zabbix 6.0 新特性1.3、Zabbix 6.0 功能组件1.4、数据库1.5、Web 界面1.6、Zabbix Agent1.7、Zabbix Proxy1.8、Java Gateway 二、部署Zabbix 6.02.1、 解决 za…

通达信指标预警信号,自动发送给微信好友1.0

1.功能介绍:十一节假日期间写了一个,可将股票指标预警信号,自动发送给微信好友/微信群(即电脑端的消息,通过模拟微信操作可在手机上显示)。本工具按通达信写的,如果大智慧,同花顺也能…

Flutter环境搭建及新建项目

一、下载安装压缩包 https://storage.flutter-io.cn/flutter_infra_release/releases/stable/windows/flutter_windows_3.10.6-stable.zip 二、解压缩 解压之后,将里面的flutter整体拿出来 三、配置环境变量 将flutter/bin全路径配置到系统环境变量里面 四、运行…

12.2 实现键盘模拟按键

本节将向读者介绍如何使用键盘鼠标操控模拟技术,键盘鼠标操控模拟技术是一种非常实用的技术,可以自动化执行一些重复性的任务,提高工作效率,在Windows系统下,通过使用各种键盘鼠标控制函数实现动态捕捉和模拟特定功能的…

用vscode进行远程主机开发

文章目录 插件操作步骤FQA 插件 Remote - SSH - 通过使用 SSH 打开远程计算机或者VM上的文件夹,来连接到任何位置。 操作步骤 使用Vscode利用Remote进行远端开发必须现在Vscode内安装插件 安装完成后,底部工具栏会出现一个绿色按钮,如下…

Vue中如何进行图像处理与图像滤镜

在Vue中进行图像处理与图像滤镜 图像处理和滤镜效果是现代Web应用程序中常见的功能之一。Vue.js作为一个流行的JavaScript框架,为实现这些功能提供了许多工具和库。本文将介绍如何使用Vue来进行图像处理与图像滤镜,包括使用HTML5 Canvas和CSS滤镜。 准备…

《有了这些可视化应用,再来一场亚运会也不怕!》

亚运会遇上中秋国庆千万大流量涌入城市,旅游、交通、应急消防等部门指挥中心人员,会如何运筹帷幄呢? 还记得刘涛在《开端》里,每次出场都在指挥中心,看着一堆大屏找线索。在早些年《人民的名义》里,汉东省的…

cap分布式理论

cap 理论 cap是实现分布式系统的思想。 由3个元素组成。 Consistency(一致性) 在任何对等 server 上读取的数据都是最新版,不会读取出旧数据。比如 zookeeper 集群,从任何一台节点读取出来的数据是一致的。 Availability&…

UG\NX二次开发 重命名特征对象 UF_OBJ_set_name

文章作者:里海 来源网站:《里海NX二次开发3000例专栏》 感谢粉丝订阅 感谢 林闹 订阅本专栏,非常感谢。 简介 UG\NX二次开发 重命名特征 UF_OBJ_set_name 效果 代码 #include "me.hpp" #include <vector> #include

RT-Thread 中断管理(学习一)

中断管理 什么是中断&#xff1f;简单的解释就是系统正在处理某一个正常事件&#xff0c;忽然被另一个需要马上处理的紧急事件打断&#xff0c;系统转而处理这个紧急事件&#xff0c;待处理完毕&#xff0c;再恢复运行刚才被打断的事件。生活中&#xff0c;我们经常会遇到这样…

Ultra-Fast-Lane-Detection-v2 {后处理优化}//参考

采用三次多项式拟合生成的anchor特征点&#xff0c;在给定的polyfit_draw函数中&#xff0c;degree参数代表了拟合多项式的度数。 具体来说&#xff0c;当我们使用np.polyfit函数进行数据点的多项式拟合时&#xff0c;我们需要指定一个度数。这个度数决定了多项式的复杂度。例…

buuctf-[GYCTF2020]Blacklist sql堆叠注入

这题我一开始还以为是rce&#xff0c;但是看到注入框内写了1&#xff0c;那就肯定是sql 提交1 1 报错&#xff0c;更加确定是sql 1 order by 2 -- 说明是两列 1 union select 1,# 发现select被过滤了 这里我想起了之前做的强网杯的随便住&#xff0c;也是被过滤了&#x…

unocss+vite+vue3初使unocss

一、什么是UnoCss&#xff1f; UnoCSS 是一个即时的原子CSS引擎&#xff0c;而非一款框架&#xff0c;因为它并未提供核心工具类&#xff0c;所有功能可以通过预设和内联配置提供。它可以让你用简短的类名来控制元素的样式 原子样式也有很多选择&#xff0c;最著名的就是 Tail…

Sonar代码审查

概念 Sonar 下载地址 是一款功能强大的代码审核工具&#xff0c;可以帮助开发团队更好的维护项目代码。同时&#xff0c;Sonar只是一个统称&#xff0c;这款工具不是单纯一个应用&#xff0c;一般来说我们会使用Sonar Qube和Sonar scanner这两个组件来搭配使用。Sonar Scanner…

面试算法21:删除倒数第k个节点

题目 如果给定一个链表&#xff0c;请问如何删除链表中的倒数第k个节点&#xff1f;假设链表中节点的总数为n&#xff0c;那么1≤k≤n。要求只能遍历链表一次。 例如&#xff0c;输入图4.1&#xff08;a&#xff09;中的链表&#xff0c;删除倒数第2个节点之后的链表如图4.1&a…

LabVIEW应用开发——控件的使用(一)

LabVIEW与其他开发语言相比&#xff0c;最大的优点就是可用控件非常多&#xff0c;涵盖了各种数值、数组、波形、图表、图形等控件&#xff0c;在前面板右键调出控件面板选择。 1、数值型控件 按左上角的图钉&#xff0c;可以使相同控件类别的固定显示&#xff0c;始终处于打开…