一、图像形态学基本概念
- 图像形态学是图像处理科学的一个独立分支,它基于集合论和数学形态学的理论,专门用于分析和处理图像中的形状和结构。
- 图像形态学处理主要关注的是二值图像(黑白图像或是灰度图),其基本思想是用具有一定形态特征的结构元素去量度和提取图像中的对应形状,以实现图像分析和识别的目的。与传统的基于线性理论的空域或频域图像处理技术相比,图像形态学具有不模糊图像边界和细节、对噪声不敏感、提取的图像边缘平滑、骨架较连续、易于并行处理等特点。
二、基本运算
1.简单介绍
-
图像形态学的基本运算主要包括四种:膨胀、腐蚀、开运算和闭运算。
- 腐蚀(Erosion):通过结构元素与图像进行卷积,将结构元素包含的图像区域缩小,以去除图像中小的细节和噪声。这一操作可以用于细化边缘、分离紧密相连的物体等。
- 膨胀(Dilation):与腐蚀相反,膨胀操作通过结构元素与图像进行卷积,将结构元素包含的图像区域扩大,以填充图像中的空洞和连接图像中的断线。这有助于填充小的空洞、连接断裂的物体等。
- 开运算(Opening):先进行腐蚀操作,再进行膨胀操作的组合。这种操作可以去除图像中的小噪声和细小物体,同时保留图像中的主要结构。
- 闭运算(Closing):与开运算相反,闭运算是先进行膨胀操作,再进行腐蚀操作的组合。它可以用于填充图像中的小空洞,连接图像中的断裂结构,并平滑图像边缘。
2.代码实现
-
基本运算代码实现
import cv2 import numpy as np # 读取图像(这里所给的图片已经是黑白图,直接读取,不需要进行二值化操作) image = cv2.imread('zhiwen.png') # 定义结构元素 # 这里使用3x3的正方形结构元素 kernel = np.ones((3, 3), np.uint8) # 腐蚀操作 cv2.erode() eroded_image = cv2.erode(image, kernel, iterations=1) # iterations 为迭代次数(执行了多少次操作) # 膨胀操作 cv2.dilate() dilated_image = cv2.dilate(image, kernel, iterations=1) # cv2.morphologyEx() 函数用于执行更复杂的形态学操作,如开运算和闭运算