【形态学滤波】——腐蚀和膨胀

本篇文章主要用于记录python调用opencv实现图像膨胀与腐蚀的算法,以及相关的知识点。

一、基础理论

二、图像腐蚀代码

三、图像膨胀代码

四、形态学处理图像常规操作


一、基础理论

1、形态学概述

图像处理中的形态学往往指的是数学形态学。

2、数学形态学

建立在格论和拓扑学基础之上的图像分析学科,是数字形态学图像图像处理的基本理论。 其基本的运算包括二值化腐蚀和膨胀、二值开闭运算、骨架抽取、极限腐蚀、击中于击不中变换、形态学梯度、 Top-hat变换、颗粒分析、流域变换、灰度腐蚀和膨胀、灰度开闭运算、灰值形态学梯度等。

3、膨胀与腐蚀的功能:

消除噪声;

分割出独立的图像元素,在图像中连接相邻的元素;

寻找图像中的明细的极大值区域或极小值区域;

求出图像的梯度。

4、膨胀的概念

从数学角度,膨胀或腐蚀就是将图像(原图中的部分区域A)与核(锚点B)进行卷积。 膨胀就是求局部最大值的操作,与B卷积,就是求B所覆盖区域的像素点的最大值,并将最大值赋给参考点指定的像素,从而增长高亮区域。其运算符为“⊕”。

                                        dst(x,y)=max(src(x+x',y+y'))             其中,(x',y‘):element(x',y’)≠0

                                               【形态学滤波】——腐蚀和膨胀_第1张图片

5、腐蚀的概念

dst(x,y)=min(src(x+x',y+y')) 其中,(x',y‘):element(x',y’)≠0 在python中,dst=cv2.erode(src,kernel,iterations) iterations表示迭代次数 即被扫描到的原始图像中的像素点,只有当卷积核对应的元素值均为1时,其值才为1,否则其值修改为0。 换句话说,遍历到的某个位置时,其周围全部是白色,保留白色,否则变为黑色,图像腐蚀变小。 其过程正好与膨胀相反。其运算符为"_"。

                                                【形态学滤波】——腐蚀和膨胀_第2张图片

二、图像腐蚀代码

import cv2
import numpy as np
#读取图片
src = cv2.imread('F:/image/12.jpg', cv2.IMREAD_UNCHANGED)
#设置卷积核
kernel = np.ones((5,5), np.uint8)
#图像腐蚀处理
erosion = cv2.erode(src, kernel,iterations=1)  #iterations未出现时表示此时为1,即一次腐蚀
#显示图像
cv2.imshow("src", src)
cv2.imshow("result", erosion)
#等待显示
cv2.waitKey(0)
cv2.destroyAllWindows()

其效果图如下:

【形态学滤波】——腐蚀和膨胀_第3张图片

三、图像膨胀代码

import cv2
import numpy as np
#读取图片
src = cv2.imread('F:/image/12.jpg', cv2.IMREAD_UNCHANGED)
#设置卷积核
kernel = np.ones((3,3), np.uint8)
#图像膨胀处理
dil = cv2.dilate(src, kernel,iterations=1)  #iterations未出现时表示此时为1,即一次腐蚀
#显示图像
cv2.imshow("src", src)
cv2.imshow("result", dil)
#等待显示
cv2.waitKey(0)
cv2.destroyAllWindows()

其效果如下:

【形态学滤波】——腐蚀和膨胀_第4张图片

四、形态学处理图像常规操作

在实际的图像去噪中,通常是先腐蚀后膨胀,即所谓的开运算。其效果相比单一操作要好许多。其效果如下:

【形态学滤波】——腐蚀和膨胀_第5张图片

你可能感兴趣的:(图像处理,腐蚀与膨胀,形态学滤波,python)