-
2021-04-19 04:37:18
图像开启与闭合
图像开运算与闭运算与膨胀和腐蚀运算有关,由膨胀和腐蚀两个运算的复合与集合操作(并、交、补等)组合成的所以运算构成。
开运算与闭运算依据腐蚀和膨胀的不可逆性,演变而来。
开运算:先对图像腐蚀后膨胀
闭运算:先对图像膨胀后腐蚀
注意:使用同一个结构元素。
图像开运算
开运算:能够去除孤立的小点、毛刺和小桥(即连通两块区域的小点),消除小物体、平滑较大物体的边界,同时并不明显改变其面积。
不过这一恢复不是信息无损的,即它们通常不等于原始图像。
开运算的效果图如下图所示:
开运算总结:
(1)开运算能够除去孤立的小点,毛刺和小桥,而总的位置和形状不便。
(2)开运算是一个基于几何运算的滤波器。
(3)结构元素大小的不同将导致滤波效果的不同。
(4)不同的结构元素的选择导致了不同的分割,即提取出不同的特征。
图像闭运算
闭运算:先膨胀运算,再腐蚀运算(看上去将两个细微连接的图块封闭在一起)
闭运算的效果图如下图所示:
闭运算总结:
(1)闭运算能够填平小湖(即小孔),弥合小裂缝,而总的位置和形状不变。
(2)闭运算是通过填充图像的凹角来滤波图像的。
(3)结构元素大小的不同将导致滤波效果的不同。
(4)不同结构元素的选择导致了不同的分割。
refer:
更多相关内容 -
图像的开运算和闭运算_闭运算_开运算_
2021-10-01 07:49:48对图像进行开运算和闭运算操作,简单验证开运算和闭运算功能 -
OpenCV图像处理--开运算和闭运算
2021-10-09 23:50:17开运算:先腐蚀,在膨胀 闭运算:先膨胀,在腐蚀开运算:先腐蚀,在膨胀
闭运算:先膨胀,在腐蚀我们在膨胀和腐蚀的图片中可以看到,图片大小程度上都受到了损失,字体信息缺失或者变粗等等。如果我们不想更改原有信息,即字体粗细。那么我们可以使用上面的两种运算。例如开运算,先对字体进行变细,在对字体进行变粗,整体上字体粗细不会发生变化。毛刺信息在腐蚀的时候就已经消除了,膨胀也不会膨胀出多余信息。
闭操作:消除黑色的小块,填充闭合区域
数学表达式为:dst = close(src, element) = erode(dilate(src, element))
例子:
Mat src = imread("/home/wangcf/Qtprojects/qtopencvandeasypr/hai.png"); imshow("src",src); Mat gray; cvtColor(src, gray, CV_BGR2GRAY); // imshow("gray",gray); Mat BINARY; threshold(gray,BINARY,25,255,CV_THRESH_BINARY); imshow("threshold",BINARY); Mat element; element = getStructuringElement(MORPH_RECT, Size(15, 15)); Mat dstImage; // 第一种实现方法 morphologyEx(BINARY, dstImage, MORPH_CLOSE, element); // 第二种实现方法 // dilate(BINARY, dstImage, element); // erode(dstImage, dstImage, element); imshow("CLOSE",dstImage); waitKey();
效果:
开操作:消除白色的小点,去除小的干扰块
数学表达式为:dst = open(src, element) = dilate(erode(src, element))
-
掌握二值图像的腐蚀、膨胀、开运算、闭运算等常见的形态学方法python
2020-12-11 11:52:54掌握二值图像的腐蚀、膨胀、开运算、闭运算等常见的形态学方法python,用jupyterlab 文件写的 -
数字图像处理(13): 形态学处理——图像开运算与图像闭运算
2019-05-03 22:14:291 图像开运算(先腐蚀,后膨胀) 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 表示卷积核。
例如下图表示 5
5 的卷积核,可以采用函数 np.ones((5,5), np.uint8) 构建。
(1)卷积核大小为5
5
代码如下所示:
#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)卷积核大小为25
25
代码如下所示:
#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表示卷积核。
例如,下图表示 5
5 的卷积核,可以采用函数 np.ones((5,5), np.uint8) 构建。
(1)卷积核大小为 5
5
代码如下所示:
#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)卷积核大小为 7
7
代码如下所示:
#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表示卷积核。
例如,下图表示 5
5 的卷积核,可以采用函数 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
-
图像开运算和闭运算
2020-12-10 05:27:45如果您觉得本文不错,帮忙点赞哦...图解图像开运算与闭运算 ↑为什么有了膨胀、腐蚀还要开运算闭运算呢?其实开闭运算最重要的一点就是,可以保持物体原有大小。然后一个是消除物体外部噪声(开运算)的另一个是增强物...如果您觉得本文不错,帮忙点赞哦!
一. 图像形态学处理 —— 膨胀和腐蚀
图解图像腐蚀和膨胀 ↑
二. 开运算与闭运算:
开运算:先腐蚀后膨胀,能够消除图像区域外的小白点(噪声)。
闭运算:先膨胀后腐蚀,能够消除图像区域内的小黑点(噪声)。
图解图像开运算与闭运算 ↑
为什么有了膨胀、腐蚀还要开运算闭运算呢?其实开闭运算最重要的一点就是,可以保持物体原有大小。然后一个是消除物体外部噪声(开运算)的另一个是增强物体之间连接点(闭运算)的。
三. python实现开运算和闭运算:
# Writer : wojianxinygcl@163.com
# Date : 2020.3.21
import numpy as np
# Morphology Dilate
def Morphology_Dilate(img, Dil_time=1):
H, W = img.shape
# kernel
MF = np.array(((0, 1, 0),
(1, 0, 1),
(0, 1, 0)), dtype=np.int)
# each dilate time
out = img.copy()
for i in range(Dil_time):
tmp = np.pad(out, (1, 1), 'edge')
for y in range(1, H):
for x in range(1, W):
if np.sum(MF * tmp[y-1:y+2, x-1:x+2]) >= 255:
out[y, x] = 255
return out
# Morphology Erode
def Morphology_Erode(img, Erode_time=1):
H, W = img.shape
out = img.copy()
# kernel
MF = np.array(((0, 1, 0),
(1, 0, 1),
(0, 1, 0)), dtype=np.int)
# each erode
for i in range(Erode_time):
tmp = np.pad(out, (1, 1), 'edge')
# erode
for y in range(1, H):
for x in range(1, W):
if np.sum(MF * tmp[y-1:y+2, x-1:x+2]) < 255*4:
out[y, x] = 0
return out
# Morphology Closing
def Morphology_Closing(img, time=1):
out = Morphology_Dilate(img, Dil_time=time)
out = Morphology_Erode(out, Erode_time=time)
return out
# Opening morphology
def Morphology_Opening(img, time=1):
out = Morphology_Erode(img, Erode_time=time)
out = Morphology_Dilate(out, Dil_time=time)
return out
四. 开闭运算的效果:
原图(左)、开运算(中)、闭运算(右) ↑
可以看到,图像开运算,消除了图像外部的噪声,图像闭运算,连通了更多的图像区域。
五. 参考内容:
六. 版权声明:
未经作者允许,请勿随意转载抄袭,抄袭情节严重者,作者将考虑追究其法律责任,创作不易,感谢您的理解和配合!
-
能对二值图像进行腐蚀、膨胀、开闭运算的MatLab程序(C++实现)
2012-06-24 21:21:20MatLab程序。 C++实现。 实现对二值图像进行腐蚀、膨胀、开/闭运算。 腐蚀分水平、垂直、全方位。 膨胀分水平、垂直、全方位。 能保存处理后的图,以及将处理后的图与原图进行对比。 -
[Python从零到壹] 四十八.图像增强及运算篇之形态学开运算、闭运算和梯度运算
2022-06-08 09:44:49第二部分将讲解图像运算和图像增强,上一篇文章介绍图像腐蚀处理和膨胀处理。这篇文章将继续介绍开运算、闭运算和梯度运算。数学形态学(Mathematical Morphology)是一种应用于图像处理和模式识别领域的新方法。... -
fenshuiling.rar_图像定位_开闭运算_开闭重建运算_虹膜分割_虹膜定位
2022-07-15 10:41:38改进分水岭方法定位虹膜,采用形态学开闭重建运算对图像进行滤波,进行前后景标记,从而进行分割图像 -
图像形态学运算之图像开闭运算 含python实现
2020-03-21 21:46:39如果您觉得本文不错,帮忙点赞哦! 一. 图像形态学处理 —— 膨胀和腐蚀 图解图像腐蚀和膨胀 ↑ 二. 开运算与闭运算: ... 开运算:先腐蚀后膨胀,能够消除... 图解图像开运算与闭运算 ↑ 为什么有了膨胀、腐蚀... -
图像的腐蚀与膨胀;图像的开运算与闭运算
2022-04-01 09:25:59图像腐蚀:将图像变小,去除...拓展知识:个人认为在进行连通域识别前,应该先进性开操作,即通过先腐蚀后膨胀,去除图片中的噪点,因为噪点的存在会直接导致图片连通域识别个数错误。而图片中的孔洞,对连通域识别的 -
图像的形态学开操作(开运算)和闭操作(闭运算)的概念和作用,并用OpenCV的函数morphologyEx()实现对图像的开...
2022-05-16 12:28:41详解图像形态学操作之图形的腐蚀和膨胀的概念和运算过程,并利用OpenCV的函数erode()和函数dilate()对图像进行腐蚀和膨胀操作 图像形态学腐蚀可以将细小的噪声区域去除,但是会将图像主要区域的面积缩小,造成主要... -
二值图像处理开运算
2017-05-29 22:17:31应用背景:在二值形态学图像处理中,除了腐蚀和膨胀这两种一次运算外,还有二次运算操作,开运算就是其中一种。 -
OpenCV-Python图像运算变换处理:开运算和闭运算以及不同核矩阵的影响分析
2020-11-24 22:55:49本文简单介绍了形态变换中的开运算和闭运算,开运算和闭运算是形态学中最为重要的两个组合运算,这两个运算是不同形状不同大小的核对图像变换的影响比较大,开运算有助于断开一些图像间的细小连接或背景上的一些图像... -
开运算和闭运算的异同
2019-05-04 09:00:40策略1:分割出黑色部分,然后通过开运算去掉毛刺,再通过原黑色部分区域减去开运算之后的区域,得到毛刺部分的区域。 1 read_image (Tu, 'C:/Users/xiahui/Desktop/tu.jpg') 2 binary_threshold (Tu, Region, 'max... -
二值图像开运算
2011-11-23 18:47:54对二值图像进行开运算,先膨胀后腐蚀,可以对图像尤其是字体太细的部分进行丰富,使图像效果更明显。用在汉字识别里的预处理 -
【OpenCV3经典编程100例】(14)形态学滤波:对灰度图像进行开运算与闭运算、morphologyEx()函数
2018-05-15 11:20:13形态学滤波:对灰度图像进行开运算与闭运算。一、c++示例代码//包含头文件 #include <opencv2/opencv.hpp> //命名空间 using namespace cv; using namespace std; //全局函数声明部分 //主函数 int ... -
【OpenCV3经典编程100例】(13)形态学滤波:对二值图像进行开运算与闭运算、morphologyEx()函数
2018-05-15 11:11:48形态学滤波:对二值图像进行开运算与闭运算。morphologyEx()函数可以实现形态学处理的很多运算,慢慢来~一、c++示例代码//包含头文件 #include <opencv2/opencv.hpp> //命名空间 using namespace cv; ... -
Python 图像处理 OpenCV (9):图像处理形态学开运算、闭运算以及梯度运算
2020-06-13 11:41:19前文传送门: ...「Python 图像处理 OpenCV (4):图像算数运算以及修改颜色空间」 「Python 图像处理 OpenCV (5):图像的几何变换」 「Python 图像处理 OpenCV (6):图像的阈值处理」 「Python . -
数字图像处理----开运算与闭运算
2021-10-10 16:53:11接着对腐蚀过的图像进行膨胀处理,可以去除噪声,并保留原有图像(前景恢复,但是去除了噪声)。 如上图所示,先经过腐蚀,再膨胀,原图的内容不变,但是噪点都被去除了。 2 图像闭运算(先膨胀,后腐蚀) 图像闭... -
详解图像处理的算术运算与逻辑运算
2022-03-14 15:35:27本文详细介绍了图像处理的算术运算与逻辑运算,包括图像加法、图像减法、图像与运算、图像或运算、图像非运算与图像异或运算。 -
OpenCV图像处理(十)---图像开运算VS闭运算
2020-04-05 19:00:00一、开运算 开运算(opening) 的实质是对图像先进行腐蚀(erode) 然后进行膨胀(dilate),相当于将两个图像处理技术封装在了一起,接着往下看吧。 1.1 原始图像 (原始图像是带有噪点的数字图像,怎么去除这些噪点呢... -
python 图像开闭运算
2017-11-07 21:54:35开运算和闭运算就是将腐蚀和膨胀按照一定的次序进行处理。但这两者并不是可逆的,即先开后闭并不能得到原先的图像。 闭运算用来连接被误分为许多小块的对象,而开运算用于移除由图像噪音形成的斑点。 闭运算操作... -
[Python图像处理] 九.形态学之图像开运算、闭运算、梯度运算
2018-11-02 12:21:25该系列文章是讲解Python OpenCV图像处理知识,前期主要讲解...本篇文章主要讲解Python调用OpenCV实现图像形态学转化,包括图像开运算、图像闭运算和梯度运算,基础性知识希望对您有所帮助,如果有不足之处,还请海涵~ -
图像形态学之开运算和闭运算
2018-03-03 16:44:49开运算相当于对图像先进行腐蚀运算再进行膨胀运算,可以消除离散点和"毛刺",可以将两个物体分开。 闭运算相当于对图像先进行膨胀运算再进行腐蚀运行,可以填充图像的内部孔洞和图像的凹角点,可以把两个... -
形态学应用——图像开运算与闭运算
2018-06-11 20:16:42开运算 = 先腐蚀运算,再膨胀运算(看上去把细微连在一起的两块目标分开了) 开运算的效果图如下图所示: 开运算总结: (1)开运算能够除去孤立的小点,毛刺和小桥,而总的位置和形状不便。 (2)开运算是一... -
【matlab图像处理】图像的逻辑运算实践
2022-04-17 16:48:57今天介绍图像的逻辑运算实践。单看课本知识,不去动手,难以体会到视觉效果的冲击感。本内容参考自《实用MATLAB图像和视频处理》第6章。 -
【Matlab 图像】开闭运算 imopen imclose
2020-11-16 19:30:36%函数imopen和imclose的应用 f=imread('liantongyu.png');...subplot(2,2,2),imshow(fo),title('开运算后的图像') fc=imclose(f,se);%闭运算 subplot(2,2,3),imshow(fc),title('闭运算后的图像') foc=imclose -
OpenCV之图像开运算(C++实现)
2020-12-19 16:15:28开运算,其实就是先腐蚀后膨胀的过程,其数学表达式为: ...实现图像开运算有两种方法,如下代码示例: #include <iostream> #include <opencv2/opencv.hpp> #include <opencv2/core/core.hpp> #i