官网参见https://docs.opencv.org/3.4.1/d9/d61/tutorial_py_morphological_ops.html
形态学变化可以用来解决抑制噪声、特征提取、边缘检测、图像分割、形状识别、纹理分析、图像恢复与重建、图像压缩等图像处理问题。
内容概要
- 腐蚀, cv2.erode(),去白色噪音,分离连接物体
- 膨胀, cv2.dilate(),扩大前景区域,连接物体被断开部分
- 开运算,cv2.morphologyEx(img, cv2.MORPH_OPEN, kernel),先腐蚀再膨胀。用于去除噪音,同时保持前景不缩小
- 闭运算,cv2.morphologyEx(img, cv2.MORPH_CLOSE, kernel),先膨胀再腐蚀。用于填充前景物体小洞,或者去除前景小黑点
- 形态学梯度,cv2.morphologyEx(img, cv2.MORPH_GRADIENT, kernel),膨胀图和腐蚀图只差。用于获得物体边缘。
- 顶帽,cv2.morphologyEx(img, cv2.MORPH_TOPHAT, kernel),原始图像和开运算后图像之差,往往用来分离比临近点亮一些的斑块。
- 黑帽, cv2.morphologyEx(img, cv2.MORPH_BLACKHAT, kernel),闭运算后的图像和原始图像之差,用来分离比临近点暗一些的斑块,效果图有着非常完美的轮廓。
- 结构化元素,矩形核,圆形核,椭圆核
形态学变换是基于图像形状的一些简单操作,通常是对二值化图像进行操作。
它需要2个参数,一个是原始图像,另外一个被称为结构化元素或者核,它决定了操作的性质。有2个基本的形态学操作:腐蚀和膨胀。它们的变化形式有开运算,闭运算,梯度等。
1.腐蚀
形态学腐蚀的基本概念和土壤腐蚀一样,会把图像中前景物体的边界腐蚀掉(通常会保持前景为白色)。它是怎么做到的呢?
以2D卷积为例,参见https://blog.youkuaiyun.com/weixin_42555985/article/details/96101079),当卷积核在图像中滑动,如果核对应的原始图像中所有像素值都是1(注意:图像中元素值要么是1要么是0),中心元素会变为1;反之,则变为0。
这样做的结果就是,靠近边界的图像元素会根据卷积核的大小决定是否被抛弃(或者说腐蚀掉,也就是变为0)。
腐蚀会让前景物体的厚度或者说大小在整个图像中变小,也可以说图像中的白色区域减少(因为前景是白色的)。
腐蚀可以去除图像中的小白色噪音,也可以用于分离2个连接在一起的物体。
例1,简单的腐蚀,5x5核
# -*- coding: cp9