python图像处理(八)

您所在的位置:网站首页 二值图像的定义 python图像处理(八)

python图像处理(八)

2023-08-25 05:11| 来源: 网络整理| 查看: 265

 图像的膨胀(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)二值图像

(2)卷积核

2.函数原型

图像腐蚀主要使用erode函数

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

参数

dst表示处理的结果,src表示原图像,kernel表示卷积核,iterations表示迭代次数。

注意:迭代次数默认是1,表示进行一次腐蚀,也可以根据需要进行多次迭代,进行多次腐蚀。

3.代码实现

import cv2 import numpy as np #读取图片 image = cv2.imread("E:/pythonProject/02.jpg",cv2.IMREAD_UNCHANGED) #设置卷积核 kernel = np.ones((10, 10), np.uint8) #图像腐蚀处理 erosion = cv2.erode(image, kernel) #显示窗口 cv2.imshow("erosion", erosion) cv2.imshow("image", image) #窗口等待 cv2.waitKey(0) cv2.destroyAllWindows()

输出结果如下图所示:

卷积核取(10,10),可以看出细线已经被腐蚀掉了,较粗的轮廓线还在,此时可以设置迭代次数iterstions = 9,输出结果如下图所示:

 

三、图像膨胀

1.理论基础

图像膨胀是腐蚀操作的逆操作,类似于“领域扩张”,将图像中的高亮区域或白色部分进行扩张,其运行结果图比原图的高亮区域更大,线条变粗了,主要用于去噪。

(1) 图像被腐蚀后,去除了噪声,但是会压缩图像。

(2) 对腐蚀过的图像,进行膨胀处理,可以去除噪声,并且保持原有形状。

 

它也包括两个输入对象:

(1)二值图像或原始图像

(2)卷积核

2.函数原型

图像膨胀主要使用dilate函数,其原型如下:

dst = cv2.dilate(src, kernel, iterations)

参数

dst表示处理的结果,src表示原图像,kernel表示卷积核,iterations表示迭代次数。

注意:迭代次数默认是1,表示进行一次膨胀,也可以根据需要进行多次迭代,进行多次膨胀。通常进行1次膨胀即可。

3.代码实现

import cv2 import numpy as np #读取图片 image = cv2.imread("E:/pythonProject/02.jpg",cv2.IMREAD_UNCHANGED) #设置卷积核 kernel = np.ones((10, 10), np.uint8) #图像膨胀处理 result = cv2.dilate(image, kernel) #显示窗口 cv2.imshow("result", result) cv2.imshow("image", image) #窗口等待 cv2.waitKey(0) cv2.destroyAllWindows()

输出结果如下图所示:

图像去噪通常需要先腐蚀后膨胀,这又称为开运算。

核心代码:

erosion = cv2.erode(src, kernel) result = cv2.dilate(erosion, kernel)

完整代码如下:

import cv2 import numpy as np #读取图片 image = cv2.imread("E:/pythonProject/03.png",cv2.IMREAD_UNCHANGED) #设置卷积核 kernel = np.ones((5, 5), np.uint8) #图像腐蚀处理 erosion = cv2.erode(image, kernel) #图像膨胀处理 result = cv2.dilate(image, kernel) #显示窗口 cv2.imshow("erosion", erosion) cv2.imshow("result", result) cv2.imshow("image", image) #窗口等待 cv2.waitKey(0) cv2.destroyAllWindows()

输出结果如下所示:

 

 

 

 

 



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3