第四章 图像的形态学操作

news2024/9/23 22:55:37

文章目录

  • 前言
  • 一、阈值控制
  • 二、腐蚀与膨胀
    • 1.腐蚀
    • 2.膨胀
    • 3.形态学操作
  • 总结


前言

前面讲解了图像基础理论、图像的变换以及图像滤波等操作,本章,将会介绍图像的形态学操作。

图像的形态学指的是一组数学方法和工具,用于图像分析和处理。形态学方法主要利用形态学操作来改变图像中的特定区域形状和大小,并提取出图像中有用的信息。常见的形态学操作包括膨胀、腐蚀、开操作和闭操作等。
膨胀操作可以使图像中的物体变大,被广泛应用于图像分割、形态学重建等场合。腐蚀操作可以使图像中的物体变小,被广泛应用于图像去噪、分割等场合。开操作可以去除小的区域,而保留更大的连通区域,常用于去除噪声。闭操作则可以填充物体内部的空洞,常用于图像增强和形态学重建。
形态学方法可以应用于图像的前景和背景分割,轮廓提取、几何形状分析和对象计数等方面。通过应用多种形态学操作,可以得到各种有用的形状信息,从而提高图像处理和分析的准确性和效率。

一、阈值控制

  • cv2.threshold是OpenCV中的一个函数,用于图像的二值化处理。
    作用: 将图像像素值大于一个指定阈值的像素设置为一定值,而小于阈值的像素则设置为另一个值。该函数的语法如下:

    ret,thresh = cv2.threshold(src, thresh, maxval, type)
    

    其中,src表示要进行二值化处理的源图像,thresh表示二值化的阈值,maxval表示二值化后的最大值,即像素值大于等于阈值的像素设置的值,type表示二值化的类型,有以下几种选项:

    • cv2.THRESH_BINARY:常用的二值化类型,大于阈值的像素设置为maxval,小于等于阈值的像素设置为0。
    • cv2.THRESH_BINARY_INV:与cv2.THRESH_BINARY相反,大于阈值的像素设置为0,小于等于阈值的像素设置为maxval
    • cv2.THRESH_TRUNC:将大于阈值的像素值设置为阈值,小于等于阈值的像素值不变。
    • cv2.THRESH_TOZERO:将小于阈值的像素值设置为0,大于等于阈值的像素值不变。
    • cv2.THRESH_TOZERO_INV:与cv2.THRESH_TOZERO相反,大于阈值的像素值设置为0,小于等于阈值的像素值不变。

    返回值包括阈值ret和二值化后的图像thresh


    cv2.threshold方法也能自动计算threshVal值,具体介绍如下:

    ret,thresh = cv2.threshold(src,0,255,cv2.THRESH_BINARY+cv2.THRESH_OTSU)
    

    其中,src 表示要进行二值化处理的源图像,0 表示阈值暂时未指定,255 表示二值化后的灰度级最大值,cv2.THRESH_BINARY+cv2.THRESH_OTSU 表示同时使用二值化类型和自动阈值计算方法。

    返回值中,ret为计算得到的最优的阈值,thresh为二值化后的图像。

    需要注意的是,在应用该自动二值化方法时,应该先对图像进行灰度化处理,然后再使用该方法。该方法可在某些情况下提高图像处理的效率,并且可以用于各种类型的图像二值化处理,一般适用于具有双峰直方图的图像。其中一个峰表示背景对象,另一个峰表示前景对象。

  • 自适应阈值算法
    cv2.adaptiveThreshold 函数是 OpenCV 中的另一种图像二值化方法,该方法可以根据每个像素周围的像素灰度值的变化情况来确定局部阈值。这种方法特别适合处理光照不均匀的图像,因为它考虑了每个像素周围像素的灰度值变化来自适应地确定适当的阈值。

    该函数的语法格式如下:

    dst = cv2.adaptiveThreshold(src, maxval, adaptiveMethod, thresholdType, blockSize, C)
    

    其中,src 表示要进行二值化处理的源图像,maxval 表示输出图像中的最大值,adaptiveMethod 表示自适应方法的类型:

    • cv2.ADAPTIVE_THRESH_MEAN_C:使用邻域块的平均值作为阈值。
    • cv2.ADAPTIVE_THRESH_GAUSSIAN_C:使用邻域块的加权和的高斯窗口函数作为阈值。

    thresholdType 表示二值化类型,可以使用以下类型:

    • cv2.THRESH_BINARY:二值化类型为 0 和 maxval,与 cv2.threshold 函数的 cv2.THRESH_BINARY 类型相同。
    • cv2.THRESH_BINARY_INV:二值化类型为 maxval 和 0,与 cv2.threshold 函数的 cv2.THRESH_BINARY_INV 类型相同。

    blockSize 表示邻域块的大小,该值应该是一个奇数。我们将这个块中每个像素的局部阈值计算为该块中所有像素的加权平均值,其中像素强度作为加权系数。块越大,则所需平均时间越长。

    C 表示从平均值或加权平均值中减去的常数。

    返回值即为二值化后的图像 dst

    需要注意的是,自适应阈值二值化方法的结果具有潜在的噪声,并且在图像局部存在多种颜色和纹理时可能不如全局二值化方法表现良好。

二、腐蚀与膨胀

1.腐蚀

  • 作用: 腐蚀操作可以将目标物体的边缘磨损掉,使得物体变小,边缘更加光滑。在实际应用中,通过腐蚀操作可以去除噪声,连接物体中间的窄断,平滑物体的边缘。同时,腐蚀操作也可用于图像分割、图像骨架提取和轮廓检测等任务中。

  • 原理: 使用一个结构元素(Kernel)在图像上滑动,将结构元素覆盖到的所有像素都用结构元素的中心元素来代替。具体地,根据结构元素内的像素进行像素值的计算,如果与中心像素相对应的结构元素内的所有像素都是前景像素(像素值为1),则将中心像素设置为1。否则,将中心像素设为背景像素(像素值为0)。

  • 接口:

    dst = cv2.erode(src, kernel, iterations=None)
    

    其中,参数 src 表示输入的二值图像,参数 kernel 是用来决定腐蚀操作效果的结构元素,参数 iterations 表示腐蚀操作的迭代次数。

    kernel可以手动构造(手动只能构造矩形的核,使用cv2.getStruringElement(shape, ksize[, anchor]) ->retval可构造其他形状的核)

在这里插入图片描述

2.膨胀

  • 原理: 卷积核中值为1框住的像素中,存在非零时,卷积核中心对于的像素为非零。
  • 作用: 膨胀是一种常见的形态学图像处理操作,用于增加图像的大小,连接未闭合的图像区域,以及分离图像中的邻近物体。
cv2.dilate(src, kernel[, dst[, anchor[, iterations[, borderType[, borderValue]]]]])

cv2.dilate() 是 OpenCV 库中的一个函数,用来执行图像膨胀操作(Dilation)。膨胀是一种常见的形态学图像处理操作,用于增加图像的大小,连接未闭合的图像区域,以及分离图像中的邻近物体。

具体来说,cv2.dilate() 可以对二值图像或灰度图像执行膨胀操作,将每个像素的邻域扩张到指定的区域,并将中心像素设置为邻域中最大的像素值,从而使图像中的白色区域变得更大、更连续。函数的语法如下:

cv2.dilate(src, kernel[, dst[, anchor[, iterations[, borderType[, borderValue]]]]])

其中,参数含义如下:

  • src: 需要执行膨胀操作的输入图像,可以是任何维度和通道数的灰度图像或二值图像。
  • kernel: 膨胀操作使用的结构元素 (kernel)。它可以是一个矩形、椭圆或自定义形状的内核。结构元素可以通过 cv2.getStructuringElement() 函数创建。例如,可以使用 cv2.getStructuringElement(cv2.MORPH_RECT, (5, 5)) 创建一个 5x5 大小的矩形内核。
  • dst: 和输入图像 src 大小和类型相同的输出图像。如果不提供,则函数会创建一个与输入图像相同大小和类型的空输出图像。
  • anchor: 膨胀操作的锚点。通常设置为内核中心,即 (-1,-1)。
  • iterations: 膨胀操作迭代次数,指定操作执行的次数。默认为 1。
  • borderType: 边界填充类型,默认为 cv2.BORDER_CONSTANT,表示使用常数进行边界填充。
  • borderValue: 边界填充所使用的值。默认为 0。

在这里插入图片描述

3.形态学操作

# op: cv2.MORPH_ 形态学的操作类型
cv2.morphologyEX(src, op, kernel:np.ndarray[, dst[, anchor[, iterations[, borderType[, borderValue]]]]])
名称操作OpenCV的op应用
开运算先腐蚀再膨胀cv2.MORPH-OPEN去除边界上的毛刺、去二值图的噪点
闭运算先膨胀再腐蚀cv2.MORPH_CLOSE中空形状或者邻近的形状形成一整块
梯度运算膨胀减去腐蚀cv2.MORPH_GRADIENT图像的边缘
礼帽原始减去开运算cv2.MORPH_TOPHAT把由开运算去除的像素显出来 可以用来突出或提取图像中的一些小特征、边缘、纹理等
黑帽闭运算减去原始cv2.MORPH_BLACKHAT将闭运算填充的像素,从原图中截取出来 将图像中与背景匹配的小的特征或者纹理从原图像中去除,从而让图像在许多图像处理任务中更加透明

在这里插入图片描述

总结

图像形态学是一种基于集合论的数学理论,在对数字图像进行处理时非常实用。该理论主要涉及两个部分:形态学操作和结构元素。形态学操作包括膨胀、腐蚀、开运算、闭运算、梯度运算等等,这些操作可以用来改变数字图像区域的形状和大小。结构元素是形态学操作的基础,其实就是一个小的二值图像,用于与目标图像的不同部分相匹配。在应用形态学操作时,结构元素的形状和大小会影响到结果。

膨胀操作可以使图像的白色区域增加,黑色区域减少,用于填充空隙和连接断开的部分。腐蚀操作则相反,可以使图像的白色区域减少,黑色区域增加,用于去除噪声和分离形状相同但不相连的部分。开运算和闭运算是一对互逆操作,用于平滑图像、消除小尺度物体和提取形状特征。梯度运算可以用于检测图像中的边缘、轮廓和区域间的界限。

总的来说,图像形态学能够对数字图像进行形态学分析和处理,通过不同的操作得到不同的目标图像,广泛应用于图像处理、模式识别、计算机视觉等领域。

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

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

相关文章

(7)Qt---文件IO

目录 1. QFileDialog 文件选择对话框** 2. QFileInfo 文件信息类** 3. QFile 文件读写类*** 4. UI与耗时操作** 5. QThread 线程类 5.1 复现阻塞 5.2 新建并启动子线程 5.3 异步刷新 5.4 停止线程 1. QFileDialog 文件选择对话框** 操作系统会提供一个统一样式的文件选择对话框…

从本地到云端:豆瓣如何使用 JuiceFS 实现统一的数据存储

豆瓣成立于 2005 年,是中国最早的社交网站之一。在 2009 到 2019 的十年间,豆瓣数据平台经历了几轮变迁,形成了 DPark Mesos MooseFS 的架构。 由机房全面上云的过程中,原有这套架构并不能很好的利用云的特性,豆瓣需…

少林派问题汇总

少林派问题汇总: Q: A:缺少bmodel,没有指定bmodel的路径,测试图片不在同一文件路径下 复制过来就解决了 Q: docker容器下运行./install_lib.sh nntc会rm不到文件怎么回事? A:文件已经被删除 Q: 我将pytorch的模型用export工具转换成.torch…

聚焦丨酷雷曼荣列XRMA联盟成员单位

自“元宇宙”概念兴起之初,酷雷曼VR所属北京同创蓝天云科技有限公司就积极布局、探索和实践。2022年12月,酷雷曼VR成功加入虚拟现实与元宇宙产业联盟(XRMA),正式被接纳为联盟成员单位,意味着酷雷曼公司将进…

详细版易学版TypeScript - 元组 枚举详解

一、元组(Tuple) 数组:合并了相同类型的对象 const myArr: Array<number> [1, 2, 3]; 元组(Tuple):合并了不同类型的对象 // 定义元组时就要确定好数据的类型&#xff0c;并一一对应 const tuple: [number, string] [12, "hi"]; // 添加内容时&#xff0c;不…

代码随想录算法训练营day35 | 860.柠檬水找零,406.根据身高重建队列,452. 用最少数量的箭引爆气球

代码随想录算法训练营day35 | 860.柠檬水找零&#xff0c;406.根据身高重建队列&#xff0c;452. 用最少数量的箭引爆气球 860.柠檬水找零406.根据身高重建队列452. 用最少数量的箭引爆气球 860.柠檬水找零 教程视频&#xff1a;https://www.bilibili.com/video/BV12x4y1j7DD/…

3.SpringBoot开发实用篇

SpringBoot开发实用篇 ​ 开发实用篇中因为牵扯到SpringBoot整合各种各样的技术&#xff0c;由于不是每个小伙伴对各种技术都有所掌握&#xff0c;所以在整合每一个技术之前&#xff0c;都会做一个快速的普及&#xff0c;这样的话内容整个开发实用篇所包含的内容就会比较多。各…

推荐系统综述

这里写目录标题 推荐系统架构1、传统推荐方式1.1 基于内容推荐&#xff08;Content-Based recommendation&#xff0c;CB&#xff09;1.2 协同过滤推荐&#xff08;Collaborative Filtering recommendation&#xff0c; CF&#xff09;1.2.0 UserCF举例&#xff1a;1. 2. 1 基于…

window-2016服务器;服务——活动目录

♥️作者&#xff1a;小刘在C站 ♥️个人主页&#xff1a;小刘主页 ♥️每天分享云计算网络运维课堂笔记&#xff0c;努力不一定有收获&#xff0c;但一定会有收获加油&#xff01;一起努力&#xff0c;共赴美好人生&#xff01; ♥️树高千尺&#xff0c;落叶归根人生不易&…

OpenCL编程指南-2.1HelloWorld

在windows下编写HelloWorld 按照前面文章搭建好OpenCL的环境https://blog.csdn.net/qq_36314864/article/details/130513584 main函数完成以下操作&#xff1a; 1&#xff09;在第一个可用平台上创建OpenCL上下文 2&#xff09;在第一个可用设备上创建命令队列 3&#xff09;…

第二期 | ICASSP 2023 论文预讲会

ICASSP 2023 论文预讲会是由CCF语音对话与听觉专委会、语音之家主办&#xff0c;旨在为学者们提供更多的交流机会&#xff0c;更方便、快捷地了解领域前沿。活动将邀请 ICASSP 2023 录用论文的作者进行报告交流。 ICASSP 2023 论文预讲会邀请到清华大学人机语音交互实验室&…

单细胞跨模态分析综述

单细胞技术的最新进展使跨模态和组织位置的细胞高通量分子分析成为可能。单细胞转录组数据现在可以通过染色质可及性、表面蛋白表达、适应性免疫受体库分析和空间信息进行补充。跨模态单细胞数据的可用性越来越高&#xff0c;推动出新的计算方法&#xff0c;以帮助科学家获得生…

图的遍历——深度优先搜索(DFS)与广度优先搜索(BFS)(附带C语言源码)

个人主页&#xff1a;【&#x1f60a;个人主页】 系列专栏&#xff1a;【❤️数据结构与算法】 学习名言&#xff1a;天子重英豪&#xff0c;文章教儿曹。万般皆下品&#xff0c;惟有读书高——《神童诗劝学》 系列文章目录 第一章 ❤️ 学前知识 第二章 ❤️ 单向链表 第三章…

mysql数据迁移与同步常用解决方案总结

目录 一、前言 二、数据迁移场景 2.1 整库迁移 2.2 表数据迁移 2.3 mysql版本变更 2.4 mysql数据迁移至其他存储介质 2.5 自建数据到上云环境 2.6 mysql数据到其他国产数据库 三、数据库物理迁移实施方案 3.1 数据库物理迁移概述 3.1.1 物理迁移适用场景 3.1.2 物理…

杂记 2023.5.10

目录 韦伯和斯托亚科维奇是谁&#xff1f; 介绍一下kali FastDFS和Sentinel是什么&#xff1f; Inferno 找工作的影响因素 1. 背景&#xff1a; 2. 学习过程&#xff1a; 2.1 计算机基础&#xff1a; 2.2 语言&#xff1a; 2.3 数据库等&#xff1a; 2.4 JVM&#…

月薪17k需要什么水平?98年测试员的面试全过程…

我的情况 大概介绍一下个人情况&#xff0c;男&#xff0c;本科&#xff0c;三年多测试工作经验&#xff0c;懂python&#xff0c;会写脚本&#xff0c;会selenium&#xff0c;会性能&#xff0c;然而到今天都没有收到一份offer&#xff01;从年后就开始准备简历&#xff0c;年…

Linux操作系统如何查看CPU型号信息?一条命令搞定

Linux操作系统服务器如何查看CPU处理器信息&#xff1f;使用命令cat /proc/cpuinfo可以查看CPU详细信息&#xff0c;包括CPU核数、逻辑CPU、物理CPU个数、CPU是否启用超线程等&#xff0c;阿里云服务器网分享Linux服务器查看CPU信息命令&#xff1a; 目录 Linux服务器查看CPU…

Visual Studio Code 1.78 发布!

欢迎使用 Visual Studio Code 2023 年 4 月版。一些主要亮点包括&#xff1a; 辅助功能改进 - 更好的屏幕阅读器支持、新的音频提示。新颜色主题 - “现代”浅色和深色主题默认设置。配置文件模板 - Python、Java、数据科学等的内置模板。拖放选择器 - 选择您希望如何将项目链…

【AI】YOLOV2原理详解

1、简介 Yolov2采用了Darknet-19特征提取网络,包括19个卷积层和5个maxpooling层,网络结构如下: 也有尝试使用ResNet-50作为特征提取的模型,网络结构如下: 2、YOLOV2的改进 2.1 加入批归一化(Batch Nomalization) 对数据进行预处理(统一格式、均衡化、去噪等)…

隐语团队研究成果再创佳绩,两篇论文分别被USENIX ATC‘23和IJCAI‘23接收!

‍“USENIX ATC‍年度技术会议”&#xff08;USENIX ATC&#xff0c;USENIX Annual Technical Conference&#xff09;是计算机系统领域的顶级学术会议之一。本年度 USENIX ATC’23将于7月10日至12日在美国波士顿召开。本次会议共投稿353篇论文&#xff0c;接收65篇&#xff0c…