【OpenCV学习笔记】5.形态学处理

  • 常用的形态学处理方法包括:腐蚀、膨胀、开运算、闭运算、顶帽运算、底帽运算,其中腐蚀和膨胀是最基础的方法,其他方法是两者相互组合产生的。

1.腐蚀

  • 图像的腐蚀操作与中值平滑操作类似,取每一个位置的矩形邻域内最小值作为该位置输出的灰度值。不同的是,这里的邻域不再是单纯的矩形结构,也可以是椭圆形结构、十字交叉型结构等。
  • 因为取每个邻域内的最小值,所以腐蚀后输出图像总体亮度平均值比起原图会有所降低,图像中比较亮的区域面积会变小甚至消失,而比较暗的区域面积会增大。图像 I I I与结构元 S S S的腐蚀操作记为:
    E = I ⊖ S E=I\ominus S E=IS
erode(src, element[, dst[, anchor[, iterations[, borderType[, borderValue]]]]])//腐蚀操作
//src-输入矩阵
//element-结构元
//anchor-结构元的锚点
//iterations-腐蚀操作次数
//borderType-边界扩充类型
//borderValue-边界扩充值
getStructuringElement(shape, ksize[, anchor])//产生结构元
//shape-结构元形状
//		MORPH_RECT  产生矩形结构元
//		MORPH_ELLIPSEM  产生椭圆形结构元
//		MORPH_CROSS  产生十字交叉形结构元
//ksize-结构元尺寸
//anchor-结构元锚点

2.膨胀

  • 与中值平滑和腐蚀操作类似,膨胀取每一个位置邻域内的最大值。膨胀后的输出图像总体亮度平均值比起原图会有所上升,图像中较亮物体尺寸会变大。图像 I I I与结构元 S S S的膨胀操作记为:
    D = I ⊕ S D=I\oplus S D=IS
dilate(src, element[, dst[, anchor[, iterations[, borderType[, borderValue]]]]])//膨胀操作

3.开运算和闭运算

  • 开运算:先腐蚀后膨胀
    I ∘ S = ( I ⊖ S ) ⊕ S I\circ S=(I\ominus S)\oplus S IS=(IS)S
    具有消除亮度较高的细小区域、在纤细点处分离物体,对于较大物体,可以在不明显改变其面积的情况下平滑其边界等作用。
  • 闭运算:先膨胀后腐蚀
    I ∙ S = ( I ⊕ S ) ⊖ S I\bullet S=(I\oplus S)\ominus S IS=(IS)S
    具有填充白色物体内细小黑色空洞的区域、连接临近物体、同一个结构元、多次迭代处理,也可以在不明显改变其面积的情况下平滑其边界等作用。
morphologyEx(src, op, element[, dst[, anchor[, iterations[, borderType[, borderValue ]]]]]))
//op-形态学处理各种运算
//		MORPH_OPEN  	开运算
//		MORPH_CLOSE     闭运算
//		MORPH_GRADIENT  形态梯度
//		MORPH_TOPHAT    顶帽运算
//		MORPH_BLACKHAT  底帽运算

4.其他形态学处理操作

  • 顶帽变换和底帽变换分别以开运算和闭运算为基础。

  • 顶帽变换:图像减去开运算结果
    T h a t ( I ) = I − I ∘ S T_{hat}(I)=I-I\circ S That(I)=IIS
    开运算可以消除背景下的较亮区域,用原图减去开运算结果可以得到原图中灰度较亮的区域,所以又称白底帽变换,还可以校正不均匀光照。

  • 底帽变换:图像减去闭运算结果
    B h a t ( I ) = I ∙ S − I B_{hat}(I)=I\bullet S-I Bhat(I)=ISI
    闭运算可以删除亮度较高背景下的较暗区域,用原图减去闭运算结果可以得到原图中灰度较暗的区域,所以又称黑底帽变换。

  • 形态学梯度
    G = I ⊕ S − I ⊖ S G=I\oplus S-I\ominus S G=ISIS
    即膨胀结果减去腐蚀结果,膨胀增大亮度高的区域面积,腐蚀减小亮度高的区域面积,所以 G ( r , c ) ≥ 0 G(r,c)\geq 0 G(r,c)0,且得到的便是图像中物体的边界。

你可能感兴趣的:(OpenCV(C++)学习笔记,OpenCV,C++)