数字图像处理(13): 形态学处理——图像开运算与图像闭运算
目录
1 图像开运算(先腐蚀,后膨胀)
1.1 基本原理
1.2 代码示例
2 图像闭运算(先膨胀,后腐蚀)
2.1 基本原理
2.2 代码示例
3 图像梯度运算(膨胀 — 腐蚀)
3.1 基本原理
3.2 代码示例
参考资料
前面介绍了 形态学处理——图像腐蚀与图像膨胀,图像膨胀会扩大一幅图像的组成部分,而图像腐蚀会缩小一幅图像的组成部分。下面将继续介绍形态学处理中的开操作和闭操作。
开操作一般会平滑物体的轮廓、断开较窄的狭颈并消除细的突出物。
闭操作同样也会平滑轮廓的一部分。但与开操作相反,它通常会弥合较窄的间断和细长的沟壑,消除小的孔洞,填补轮廓线中的断裂。
1 图像开运算(先腐蚀,后膨胀)
1.1 基本原理
图像开运算是图像依次经过腐蚀、膨胀处理后的过程。图像被腐蚀后,去除了噪声,但是也压缩了图像;接着对腐蚀过的图像进行膨胀处理,可以去除噪声,并保留原有图像。如下图所示:
开运算:先腐蚀,后膨胀
下图借鉴是一篇博客写的开运算效果图:
1.2 代码示例
图像开运算使用函数 morphologyEx() ,它是形态学扩展的一组函数,其参数cv2.MORPH_OPEN对应开运算。
morphologyEx() 函数形式如下:
dst = cv2.morphologyEx(src, cv2.MORPH_OPEN, kernel)
其中,参数:
dst 表示处理的结果;
src 表示原始图像;
cv2.MORPH_OPEN 表示开运算;
kernel 表示卷积核。
例如下图表示 55 的卷积核,可以采用函数 np.ones((5,5), np.uint8) 构建。
(1)卷积核大小为55
代码如下所示:
#encoding:utf-8
import cv2
import numpy as np#读取图片
src = cv2.imread('test3.bmp', cv2.IMREAD_UNCHANGED)#设置卷积核
kernel = np.ones((5,5), np.uint8)#图像开运算
result = cv2.morphologyEx(src, cv2.MORPH_OPEN, kernel)#显示图像
cv2.imshow("src", src)
cv2.imshow("result", result)#等待显示
cv2.waitKey(0)
cv2.destroyAllWindows()
运行结果如下图所示:
由上面结果可以看到,仍然有噪声存在,可以将增大卷积核的大小。
(2)卷积核大小为2525
代码如下所示:
#encoding:utf-8
import cv2
import numpy as np#读取图片
src = cv2.imread('test3.bmp', cv2.IMREAD_UNCHANGED)#设置卷积核
kernel = np.ones((25,25), np.uint8)#图像开运算
result = cv2.morphologyEx(src, cv2.MORPH_OPEN, kernel)#显示图像
cv2.imshow("src", src)
cv2.imshow("result", result)#等待显示
cv2.waitKey(0)
cv2.destroyAllWindows()
运行结果如下图所示:
2 图像闭运算(先膨胀,后腐蚀)
2.1 基本原理
图像闭运算是图像依次经过膨胀、腐蚀处理后的过程。图像先膨胀,后腐蚀,它有助于关闭前景物体内部的小孔,或物体上的小黑点。如下图所示:
闭运算:先膨胀,后腐蚀
下图借鉴是一篇博客写的开运算效果图:
2.2 代码示例
图像闭运算使用函数 morphologyEx() , 它是形态学扩展的一组函数,其参数 cv2.MORPH_CLOSE 对应闭运算。
morphologyEx() 函数形式如下:
dst = cv2.morphologyEx(src, cv2.MORPH_CLOSE, kernel)
其中,参数:
dst 表示处理的结果;
src 表示原图像;
cv2.MORPH_CLOSE 表示闭运算;
kernel表示卷积核。
例如,下图表示 55 的卷积核,可以采用函数 np.ones((5,5), np.uint8) 构建。
(1)卷积核大小为 55
代码如下所示:
#encoding:utf-8
import cv2
import numpy as np#读取图片
src = cv2.imread('test4.bmp', cv2.IMREAD_UNCHANGED)#设置卷积核
kernel = np.ones((5,5), np.uint8)#图像闭运算
result = cv2.morphologyEx(src, cv2.MORPH_CLOSE, kernel)#显示图像
cv2.imshow("src", src)
cv2.imshow("result", result)#等待显示
cv2.waitKey(0)
cv2.destroyAllWindows()
运行结果如下图所示:
由上面结果可以看到,噪声仍有一处存在,可以将增大卷积核的大小。
(2)卷积核大小为 77
代码如下所示:
#encoding:utf-8
import cv2
import numpy as np#读取图片
src = cv2.imread('test4.bmp', cv2.IMREAD_UNCHANGED)#设置卷积核
kernel = np.ones((7,7), np.uint8)#图像闭运算
result = cv2.morphologyEx(src, cv2.MORPH_CLOSE, kernel)#显示图像
cv2.imshow("src", src)
cv2.imshow("result", result)#等待显示
cv2.waitKey(0)
cv2.destroyAllWindows()
运行结果如下图所示:
3 图像梯度运算(膨胀 — 腐蚀)
3.1 基本原理
图像梯度运算是膨胀图像减去腐蚀图像的结果,得到图像的轮廓,其中二值图像1表示白色点,0表示黑色点。 如下图所示:
梯度运算:膨胀图像 — 腐蚀图像
3.2 代码示例
图像梯度运算使用的函数 morphologyEx(),其参数 cv2.MORPH_GRADIENT 对应 梯度运算
morphologyEx() 函数形式如下:
dst = cv2.morphologyEx(src, cv2.MORPH_GRADIENT, kernel)
其中,参数:
dst表示处理的结果;,
src表示原图像;,
cv2.MORPH_GRADIENT表示梯度运算;,
kernel表示卷积核。
例如,下图表示 55 的卷积核,可以采用函数 np.ones((5,5), np.uint8) 构建。
代码如下所示:
#encoding:utf-8
import cv2
import numpy as np#读取图片
src = cv2.imread('test4.bmp', cv2.IMREAD_UNCHANGED)#设置卷积核
kernel = np.ones((7,7), np.uint8)#图像闭运算
result = cv2.morphologyEx(src, cv2.MORPH_GRADIENT, kernel)#显示图像
cv2.imshow("src", src)
cv2.imshow("result", result)#等待显示
cv2.waitKey(0)
cv2.destroyAllWindows()
运行结果如下图所示:
参考资料
[1] https://blog.csdn.net/Eastmount/article/details/83651172
[2] https://blog.csdn.net/hanshanbuleng/article/details/80657148
[3] Python+OpenCV图像处理
数字图像处理(13): 形态学处理——图像开运算与图像闭运算相关推荐
- 数字图像处理实验(七)| 形态学图像处理{生成结构元素strel、腐蚀运算imerode、膨胀运算imdilate、开运算imopen、闭运算imclose}(附代码和实验截图、汉字视力表项目、总结)
文章目录 一.实验目的 二.实验仪器 三.实验原理 1. 结构元素: 2. 腐蚀运算: 3. 膨胀运算: 4. 开运算: 5. 闭运算: 四.实验内容: 1. 形态学图像处理用于图像边界提取 2.数学 ...
- 【youcans 的 OpenCV 例程200篇】137. 灰度开运算和灰度闭运算原理
欢迎关注 『youcans 的 OpenCV 例程 200 篇』 系列,持续更新中 欢迎关注 『youcans 的 OpenCV学习课』 系列,持续更新中 [youcans 的 OpenCV 例程20 ...
- 数字图像处理(12): 形态学处理——图像腐蚀与图像膨胀
目录 1 形态学操作 2 图像腐蚀 3 图像膨胀 参考资料 1 形态学操作 形态学(morphology)一词通常表示生物学的一个分支,该分支主要研究动植物的形态和结构.这里,我们使用同一词语表示数学 ...
- matlab 通过矩阵变换使图像旋转平移_数字图像处理|P11 第三章 第四节 图像的几何变换...
第四节 几何变换 图像生成过程中,由于系统本身具有非线性或拍摄角度不同,会使生成的图像产生几何失真.几何失真一般分为系统失真和非系统失真,系统失真是有规律的.能预测的:非系统失真则是随机的.例如:(1 ...
- 系统学习数字图像处理之形态学分析补充(灰度级处理)
一 基本概念 所谓的灰度级膨胀和腐蚀即将而知图像的二值形态学运算推广到灰度图像上.对于一幅图像的腐蚀(膨胀)运算定义为对每个像素赋值为某个领域内输入图像灰度级的最小(或最大值).在二值变换中的结 ...
- 系统学习数字图像处理之形态学分析
http://blog.csdn.net/app_12062011/article/details/27351043 继膨胀.腐蚀.开运算和闭运算之后的有一个基本操作就是击中击不中变换(HMT),HM ...
- 数字图像处理-空间域图像增强(一)(图像反转,对数变换,幂次变换、分段线性变换)
空间域增强的第一部分:图像反转,对数变换,幂次变换.分段线性变换 (s:现点值,r: 原点值) 图像反转: 这个无需多说,就是把黑变白,白变黑,拿八位灰度图像来说 表达式:s=255-r 作用:看清暗 ...
- 从去除毛刺的策略看开运算opening_circle和闭运算closing_circle的异同
例一:毛刺在往外凸的面上 策略1:分割出黑色部分,然后通过开运算去掉毛刺,再通过原黑色部分区域减去开运算之后的区域,得到毛刺部分的区域. 1 read_image (Tu, 'C:/Users/xia ...
- 我的SWT与数字图像处理总结(3)—SWT如何得到图像某个位置的像素值和相应的RGB的值...
SWT中如何得到图像某个位置的像素值和相应的RGB的值 方法一: 通过PaletteData中的三个mask来得到RGB,这里是逐行得到的像素值 这种方式是最严谨的方式,对于非索引图像来说 Image ...
最新文章
- unity 天空盒_使用Substance in Unity搭建Unity和SP的live link实时互通环境
- 【Mybatis 之应用篇】 5_Mybatis总结(附20道练习题以及答案)
- 创建安卓模拟器的两种方式及常用Android命令介绍
- Today's my MDX...
- 学习笔记15-C语言-预处理指令、条件编译、头文件
- redis——数据结构(整数集合,压缩列表)
- LeetCode 16. 最接近的三数之和(固定左端+滑动窗口)
- 双十一我们在作战室干什么?零点刚过,我偷偷提交了几行代码!
- 免费数据集获取加速器|Graviti Open Datasets
- format函数_畅游人工智能之海 | Keras教程之后端函数(一)
- 从微信浏览器,调起本地应用,最简单的解决方案
- OpenLTE 基站相关头文件:PHY、MAC、RLC、RRC、PDCP、RB、MME、HSS、GW
- iframe的2个问题
- android表情转码,UCS-4 android/ios微信emoji表情转码
- 微软私有云资源链接总结分享
- 【问题解决】QT报错 undefined reference to `__imp__ZN11QSerialPortD1Ev‘
- 世界标准时间(日期带T)转北京时间
- kronecker delta函数
- 全数集结,云上相会 | 大势智慧2022新品发布会改为线上举行
- prometheus+alertmanager+webhook实现自定义监控报警系统