Python图像处理(九)——形态学运算之图像开运算、比运算、梯度运算

一、图像开运算

1.基本原理

图像开运算是图像依次经过腐蚀、膨胀处理后的过程。图像被腐蚀后,去除了噪声,但是也压缩了图像;接着对腐蚀过的图像进行膨胀处理,可以去除噪声,并保留原有图像。如下图所示:

开运算:先腐蚀,后膨胀

Python图像处理(九)——形态学运算之图像开运算、比运算、梯度运算_第1张图片

 

 下面是借鉴一位博主写的开运算效果图:

Python图像处理(九)——形态学运算之图像开运算、比运算、梯度运算_第2张图片

作用:用来消除小的物体,平滑形状边界,并且不改变其面积。可以去除小颗粒噪声,断开物体之间的粘连。

2.函数原形

图像开运算使用函数 morphologyEx() ,它是形态学扩展的一组函数,其参数cv2.MORPH_OPEN对应开运算

morphologyEx() 函数形式如下:

dst = cv2.morphologyEx(src, cv2.MORPH_OPEN, kernel)

参数:

dst 表示处理的结果;

src 表示原始图像;

cv2.MORPH_OPEN 表示开运算;

kernel 表示卷积核。

代码如下所示:

import cv2
import numpy as np

#图片读取
image = cv2.imread("E:/pythonProject/01.png", cv2.IMREAD_UNCHANGED)

#设置卷积核
kernel = np.ones((10, 10), np.uint8)

#图像开运算
result = cv2.morphologyEx(image, cv2.MORPH_OPEN, kernel)

#图像显示
cv2.imshow("image", image)
cv2.imshow("result", result)

#等待窗口
cv2.waitKey(0)
cv2.destroyAllWindows()

输出结果如下所示:

Python图像处理(九)——形态学运算之图像开运算、比运算、梯度运算_第3张图片

由上面结果可以看到,仍然有噪声存在,可以将增大卷积核的大小。将卷积核设置为10*10,

核心代码:

kernel = np.ones((10, 10, np.uint8)

result = cv2.morphologyEx(image, cv2.MORPH_OPEN, kernel)

运行结果如下所示:

Python图像处理(九)——形态学运算之图像开运算、比运算、梯度运算_第4张图片

 开运算总结:
(1)开运算能够除去孤立的小点,毛刺和小桥,而总的位置和形状不便。
(2)开运算是一个基于几何运算的滤波器。
(3)结构元素大小的不同将导致滤波效果的不同。
(4)不同的结构元素的选择导致了不同的分割,即提取出不同的特征。

 

二、图像闭运算

1.基本原理

图像闭运算是图像依次经过膨胀、腐蚀处理后的过程。图像先膨胀,后腐蚀,它有助于关闭前景物体内部的小孔,或物体上的小黑点。如下图所示:

闭运算:先膨胀,后腐蚀

Python图像处理(九)——形态学运算之图像开运算、比运算、梯度运算_第5张图片

 

下图借鉴是一篇博客写的闭运算效果图:

Python图像处理(九)——形态学运算之图像开运算、比运算、梯度运算_第6张图片

2.函数原型

图像闭运算使用函数 morphologyEx() , 它是形态学扩展的一组函数,其参数 cv2.MORPH_CLOSE 对应闭运算

morphologyEx() 函数形式如下:

dst = cv2.morphologyEx(src, cv2.MORPH_CLOSE, kernel)

其中,参数:

dst 表示处理的结果;

src 表示原图像;

cv2.MORPH_CLOSE 表示闭运算;

kernel表示卷积核。

代码如下所示:

import cv2
import numpy as np

#图片读取
image = cv2.imread("E:/pythonProject/j.png", cv2.IMREAD_UNCHANGED)

#设置卷积核
kernel = np.ones((10, 10), np.uint8)

#图像闭运算
result = cv2.morphologyEx(image, cv2.MORPH_CLOSE, kernel)

#图像显示
cv2.imshow("image", image)
cv2.imshow("result", result)

#等待窗口
cv2.waitKey(0)
cv2.destroyAllWindows()

运行结果如下所示:

Python图像处理(九)——形态学运算之图像开运算、比运算、梯度运算_第7张图片

 

当卷积核为5*5时,噪音并没有完全消除,下面设置卷积核为10*10

核心代码:

kernel = np.ones((10, 10), np.uint8)

result = cv2.morphologyEx(image, cv2.MORPH_CLOSE, kernel)

输出结果如下所示:

Python图像处理(九)——形态学运算之图像开运算、比运算、梯度运算_第8张图片

闭运算总结:
(1)闭运算能够填平小湖(即小孔),弥合小裂缝,而总的位置和形状不变。
(2)闭运算是通过填充图像的凹角来滤波图像的。
(3)结构元素大小的不同将导致滤波效果的不同。
(4)不同结构元素的选择导致了不同的分割。 

 

三、图像梯度运算

1.基本原理

图像梯度运算是膨胀图像减去腐蚀图像的结果,得到图像的轮廓,其中二值图像1表示白色点,0表示黑色点。 如下图所示:

梯度运算:膨胀图像 — 腐蚀图像

Python图像处理(九)——形态学运算之图像开运算、比运算、梯度运算_第9张图片

 

2.函数原型

图像梯度运算使用的函数 morphologyEx(),其参数 cv2.MORPH_GRADIENT 对应 梯度运算。

morphologyEx() 函数形式如下:

dst = cv2.morphologyEx(src, cv2.MORPH_GRADIENT, kernel)

其中,参数:

dst表示处理的结果;,

src表示原图像;,

cv2.MORPH_GRADIENT表示梯度运算;,

kernel表示卷积核。

代码如下所示:

import cv2
import numpy as np

#图片读取
image = cv2.imread("E:/pythonProject/004.png", cv2.IMREAD_UNCHANGED)

#设置卷积核
kernel = np.ones((5, 5), np.uint8)

#图像梯度运算
result = cv2.morphologyEx(image, cv2.MORPH_GRADIENT, kernel)

#图像显示
cv2.imshow("image", image)
cv2.imshow("result", result)

#等待窗口
cv2.waitKey(0)
cv2.destroyAllWindows()

输出结果如下图所示:

Python图像处理(九)——形态学运算之图像开运算、比运算、梯度运算_第10张图片

 

 

 

 

你可能感兴趣的:(opencv,python)