形态学变换(Morphological Transformations)

#形态学变换(Morphological Transformations)

参考博客

形态学处理又可理解为形态学变换(Morphological Transformations),是一种基于形状的简单变换。它的处理对象通常是二值化图像(也常用于彩色图像)。通常,形态学变换有两个输入,一个输出:

  • 输入:原图像,核
  • 输出:形态学变换后的图像

膨胀与腐蚀是最基本的两种形态学变换方法,形态学处理的常规操作(开运算、闭运算和形态学梯度等)则是这两种方法的组合。膨胀和腐蚀是针对较亮的像素的两种相反的操作,即较亮的像素会膨胀和被腐蚀(被暗色腐蚀)。

##膨胀(Dilation)
膨胀就是求局部最大值。原图与核进行卷积,将最大值赋予指定像素,从而使亮者更亮,效果就是亮的区域膨胀。
公式:
这里写图片描述
形态学变换(Morphological Transformations)_第1张图片
可以理解为,将结构B(核)在结构A上进行卷积操作,所有移动结构B与结构A存在交集的位置的集合为结构A在结构B作用下的膨胀结果。

函数原型:

dst=cv2.dilate(src, kernel[, dst[, anchor[, iterations[, borderType[, borderValue]]]]])

#src:源图,通道数任意,深度需为CV_8U,CV_16U,CV_16S,CV_32F或 CV_64F
#dst:输出图,与src有着同样的尺寸
#kernel:膨胀操作的核,通常这个参数由函数getStructuringElement得到(稍后会讲)
#anchor:锚点位置,默认值为中心点
#iterations:自身迭代的次数,默认为1
#borderType和borderValue都有各自的默认值,通常不用理会

##腐蚀(Erosion)
操作与膨胀相反,求局部最小值。
公式:
这里写图片描述
形态学变换(Morphological Transformations)_第2张图片
可以理解为,移动结构B(核),如果结构B与结构A的交集完全属于结构A的区域内,则保存该位置点,所有满足条件的点构成结构A被结构B腐蚀的结果。

函数原型:

dst=cv2.erode(src, kernel[, dst[, anchor[, iterations[, borderType[, borderValue]]]]])

#kernel:腐蚀操作的核,通常这个参数由函数getStructuringElement得到(稍后会讲)
#iterations:自身迭代的次数,默认值为1

##形态学处理的常规操作

腐蚀和膨胀,看上去好像是一对互逆的操作,实际上,这两种操作不具有互逆的关系。 开运算和闭运算正是依据腐蚀和膨胀的不可逆性,演变而来的。

###开运算
先腐蚀后膨胀,用来消除小物体,在纤细点处分离物体,平滑较大物体的边界的同时并不明显改变其面积。

###闭运算
闭运算是先膨胀后腐蚀的过程,其功能是用来填充物体内细小空洞、连接邻近物体、平滑其边界, 同时不明显改变其面积。闭运算能够排除小的黑色区域。

###形态学梯度
膨胀图与腐蚀图之差,通常用来保留边缘轮廓(不是轮廓和边缘识别)。

你可能感兴趣的:(图像识别)