| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 人工智能 -> Python图像处理丨图像腐蚀与图像膨胀 -> 正文阅读 |
|
[人工智能]Python图像处理丨图像腐蚀与图像膨胀 |
摘要:本篇文章主要讲解Python调用OpenCV实现图像腐蚀和图像膨胀的算法。 本文分享自华为云社区《[Python图像处理] 八.图像腐蚀与图像膨胀》,作者: eastmount 。 本篇文章主要讲解Python调用OpenCV实现图像腐蚀和图像膨胀的算法,基础性知识希望对您有所帮助。
一. 基础知识(注:该部分参考作者论文《一种改进的Sobel算子及区域择优的身份证智能识别方法》) 图像的膨胀(Dilation)和腐蚀(Erosion)是两种基本的形态学运算,主要用来寻找图像中的极大区域和极小区域。其中膨胀类似于“领域扩张”,将图像中的高亮区域或白色部分进行扩张,其运行结果图比原图的高亮区域更大;腐蚀类似于“领域被蚕食”,将图像中的高亮区域或白色部分进行缩减细化,其运行结果图比原图的高亮区域更小。 1.图像膨胀膨胀的运算符是“⊕”,其定义如下: 该公式表示用B来对图像A进行膨胀处理,其中B是一个卷积模板或卷积核,其形状可以为正方形或圆形,通过模板B与图像A进行卷积计算,扫描图像中的每一个像素点,用模板元素与二值图像元素做“与”运算,如果都为0,那么目标像素点为0,否则为1。从而计算B覆盖区域的像素点最大值,并用该值替换参考点的像素值实现膨胀。下图是将左边的原始图像A膨胀处理为右边的效果图A⊕B。 处理结果如下图所示: 2.图像腐蚀腐蚀的运算符是“-”,其定义如下: 该公式表示图像A用卷积模板B来进行腐蚀处理,通过模板B与图像A进行卷积计算,得出B覆盖区域的像素点最小值,并用这个最小值来替代参考点的像素值。如图所示,将左边的原始图像A腐蚀处理为右边的效果图A-B。 处理结果如下图所示: 二. 图像腐蚀代码实现1.基础理论形态学转换主要针对的是二值图像(0或1)。图像腐蚀类似于“领域被蚕食”,将图像中的高亮区域或白色部分进行缩减细化,其运行结果图比原图的高亮区域更小。其主要包括两个输入对象: (1)二值图像 卷积核是腐蚀中的关键数组,采用numpy库可以生成。卷积核的中心点逐个像素扫描原始图像,如下图所示: 被扫描到的原始图像中的像素点,只有当卷积核对应的元素值均为1时,其值才为1,否则其值修改为0。换句话说,遍历到的黄色点位置,其周围全部是白色,保留白色,否则变为黑色,图像腐蚀变小。 2.函数原型图像腐蚀主要使用的函数为erode,其原型如下: dst = cv2.erode(src, kernel, iterations) 参数dst表示处理的结果,src表示原图像,kernel表示卷积核,iterations表示迭代次数。下图表示5*5的卷积核,可以采用函数 np.ones((5,5), np.uint8) 构建。 注意:迭代次数默认是1,表示进行一次腐蚀,也可以根据需要进行多次迭代,进行多次腐蚀。 3.代码实现完整代码如下所示:
输出结果如下图所示: 由图可见,干扰的细线被进行了清洗,但仍然有些轮廓,此时可设置迭代次数进行腐蚀。 erosion = cv2.erode(src, kernel,iterations=9) 输出结果如下图所示: 三. 图像膨胀代码实现1.基础理论图像膨胀是腐蚀操作的逆操作,类似于“领域扩张”,将图像中的高亮区域或白色部分进行扩张,其运行结果图比原图的高亮区域更大,线条变粗了,主要用于去噪。 (1) 图像被腐蚀后,去除了噪声,但是会压缩图像。 它也包括两个输入对象: (1)二值图像或原始图像 卷积核是腐蚀中的关键数组,采用numpy库可以生成。卷积核的中心点逐个像素扫描原始图像,如下图所示: 被扫描到的原始图像中的像素点,当卷积核对应的元素值只要有一个为1时,其值就为1,否则为0。 2.函数原型图像膨胀主要使用的函数为dilate,其原型如下: dst = cv2.dilate(src, kernel, iterations) 参数dst表示处理的结果,src表示原图像,kernel表示卷积核,iterations表示迭代次数。下图表示5*5的卷积核,可以采用函数 np.ones((5,5), np.uint8) 构建。 注意:迭代次数默认是1,表示进行一次膨胀,也可以根据需要进行多次迭代,进行多次膨胀。通常进行1次膨胀即可。 3.代码实现完整代码如下所示:
输出结果如下所示: 图像去噪通常需要先腐蚀后膨胀,这又称为开运算,下篇文章将详细介绍。如下图所示: erosion = cv2.erode(src, kernel) 本文摘录自eastmount X华为云开发者社区联合出品的电子书《从零到一 ? Python图像处理及识别》。 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 | -2024/12/29 8:42:00- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |
数据统计 |