Advertisement

形态学变换(Morphological Transformations)

阅读量:

#形态学变换(Morphological Transformations)

参考博客内容(Fishmemory的文章)

形态学处理也可称为形态学变换(Morphological Transformations),它是一种形状相关的简单操作。其通常所处理的对象是二值化图像(有时也会用于彩色图像)。一般而言,在形态学变换中会有两个输入和一个输出。

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

膨胀和腐蚀是形态学处理中最基础的两种基本操作。常见的形态学操作包括开闭运算以及形态学梯度等技术手段,则是这两种基础操作的结果。对于较亮的像素区域而言,膨胀和腐蚀是两个具有相反效果的操作。其中,在膨胀过程中这些像素会向外扩展;而在腐蚀作用下,则会逐渐被暗色所侵蚀。

##膨胀(Dilation)
膨胀就是求局部最大值。原图与核进行卷积,将最大值赋予指定像素,从而使亮者更亮,效果就是亮的区域膨胀。
公式:

这里写图片描述
这里写图片描述

在对结构A施以卷积操作时,在其上覆盖着的核(即所谓的核块)所占据的所有位置所形成的区域被称为该核在该操作下的膨胀效应。

函数原型:

复制代码
    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)
操作与膨胀相反,求局部最小值。
公式:

这里写图片描述
这里写图片描述

本质上说,在使用移动核进行操作时,
当该移动核与基图相交的部分全部位于基图范围内时,
则认为并保存当前作用范围内的所有节点;
通过这种方式得到的所有节点即构成了基图在使用该移动核进行运算后的结果区域。

函数原型:

复制代码
    dst=cv2.erode(src, kernel[, dst[, anchor[, iterations[, borderType[, borderValue]]]]])
    
    #kernel:腐蚀操作的核,通常这个参数由函数getStructuringElement得到(稍后会讲)
    #iterations:自身迭代的次数,默认值为1
    
    
      
      
      
      
    
    代码解读

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

形态学 opening 和 closing 看起来是一对相互可逆的操作吗?然而事实上,并非如此。开运算与闭运算正是基于形态学 opening 和 closing 的不可逆特性发展而来的。

开运算 通过先进行腐蚀处理后再进行膨胀操作来实现。它主要用于去除较小的物体,并且能够在细节部位将物体进行分离处理。该运算能够有效地平滑较大物体现在边界而不显著影响其面积大小。

闭运算

闭运算的过程是先进行膨胀操作后紧接着进行腐蚀操作。该过程的主要功能包括填补物体内部细微的孔隙、连接分离的物体以及使边界的边缘更加圆滑。在执行过程中几乎不改变物体的面积大小。通过闭运算处理后,在图像中会减少那些微小的黑色区域。

扩张图与侵蚀图之差,在图像处理中主要用于保留边缘的主要特征(不涉及对边缘或轮廓本身的直接识别过程)。

全部评论 (0)

还没有任何评论哟~