图像处理-形态学

形态学简介

形态学又称数学形态学(Mathematical morphology),这是一门建立在格论和拓扑学基础之上的学科,是数学形态学图像处理的基本理论。常见的基本运算包括膨胀和腐蚀、开运算和闭运算、顶帽和黑帽运算等。图像的形态学处理常被用在图像的消除噪声和一些目标的特征提取上。

历史

形态学的历史可以追溯到1964年,由当时国立巴黎高等矿业学校的马瑟荣(G. Matheron)和赛拉(J. Serra)两人共同奠定了其理论基础。随后的发展可以简要地概括为:

  • 60年代的孕育和形成期
  • 70年代的充实和发展期
  • 80年代的成熟和对外开放期
  • 90年代至今的扩展期

所以说,图像处理形态学处理已经是很久远的图像处理技术了。

概念

在使用形态学处理图像的时候,我们一般关注两个概念,一个是形态学的处理类型,如膨胀或者腐蚀等。另一个是形态学运算的结构元素,如椭圆或矩形等。简单地说,形态学处理是一个数学运算。处理类型相当于运算函数,表示如何对图像数据进行变换,结构元素好比函数自变量的取值范围,控制在进行形态学处理时该点像素点的运算需要取出周围哪些点进行运算。

结构元素

结构元素也常被称为形态学处理核元素,选择结构元素时便是常说的选择多大的核元素。上文已经提到,结构元素的作用是控制运算的取值范围,所以结构元素的类型可以按照取值的范围(或者说方式)划分为椭圆、矩形核和十字。

椭圆

椭圆类型包含了圆形,圆形实际上也是椭圆的一种(椭圆长短轴取相等就是圆形),所以椭圆类型结构类型一般为:以原点为椭圆中心,长短轴(a*b)来描述椭圆结构元素。

矩形

矩形结构元素就比较简单,就相当于一个卷积模板了,矩形结构元素可以描述为:以原点为矩形中心,n*n的方形。

十字

十字也类似,十字结构元素描述为:以原点为十字的中心,长度为n的n*n十字区域。

以上的原点指的是在进行形态学运算时指定的参考点,一般为处理中的像素点,也是结构元素的中心位置。

常见形态学处理类型

了解了以上介绍的概念之后,理解形态学处理就相对简单了。可以借助卷积滤波的原理来理解,卷积滤波过程为

用一个卷积模板,然后遍历图像的每个一像素点,卷积模板与像素点周围像素点进行运算,得到的结果代替该像素点

形态学处理实际上也是这么一个过程

用一个结构元素(形状可以为椭圆、矩形和十字等),接着遍历图像的每一个像素点,结构元素与像素点周围像素点进行运算,得到的结果代替该像素点。

对比可以看到,卷积滤波和形态学处理的区别进阶是卷积模板与结构元素、以及运算方式的不同,卷积模板一般时矩形的,而结构元素有矩形、椭圆和十字。 卷积运算为对周围像素点求取加权平均数,而形态学处理的元素根据处理类型不同而定义不同的运算。所以说,借助卷积滤波来理解形态学处理就变得简单了许多。 下面就开始验证这个理解方式,介绍各个形态学处理操作。

膨胀

原理

  • 原理介绍

膨胀(Dilation)定义为求取局部最大值,其表达式为:

1
dst(x,y) = max{ src(Sx, Sy) } , src(Sx, Sy) != 0

以刚刚卷积滤波的思路来理解膨胀的原理,用结构元素S去遍历整张图像对每一个像素点进行处理,当结构元素的中心(上面提到的原点)与要处理的像素点重合时,开始进行处理。处理中膨胀的计算如表达式,就是选取结构元素S覆盖范围的像素点src(Sx, Sy)中的像素值最大值作为结果,代替图像原来像素点的像素值。但前提条是该最大值不能为0。


所以不难理解到,通过膨胀运算,一张普通的图像经过膨胀处理会变得高亮,因为每一个像素点的值都大于或等于未处理之前了。膨胀处理让图像变得更加高亮?那为啥不叫高亮处理而叫膨胀处理,如果将普通图像换成像素值只有0、1的二值图像,此时膨胀这一词就体现出来了。在二值图像中,1即代表亮,0代表黑暗。膨胀处理让二值图像高亮起来,即像素值为1的像素点增多,而且可以思考这个增多的过程是以原本像素值为1的区域向外增多的,如此一来便是我们看到的二值图像白色高亮区域向外”膨胀“的一个过程了。

  • 图像处理作用以及应用场景

膨胀处理可以使得图像高亮或者二值图像白色区域向外”膨胀“,主要用于二值图像的处理中。

  • 用于消除高亮区域中的小黑洞
  • 用于平滑高亮区域的边缘
  • 用于增大高亮目标面积

腐蚀

  • 原理介绍

腐蚀(Erosion)则是膨胀的反运算处理,定义为求取局部的最小值,其表达式为:

1
dst(x,y) = min{ src(Sx, Sy) } 

同样以卷积滤波的思路理解腐蚀的原理,用结构元素S去遍历整张图像对每一个像素点进行处理,当结构元素的中心(上面提到的原点)与要处理的像素点重合时,开始进行处理。处理中膨胀的计算如表达式,就是选取结构元素S覆盖范围的像素点src(Sx, Sy)中的像素值最小值作为结果,代替图像原来像素点的像素值。


同样地,通过腐蚀运算,一张普通的图像经过腐蚀处理会变黑暗,因为每一个像素点的值都小于或等于未处理之前了。如果将普通图像换成像素值只有0、1的二值图像,此时腐蚀这一词也可以体现出来了。在二值图像中,1即代表亮,0代表黑暗。腐蚀处理让二值图像黑暗起来,即像素值为0的像素点增多,而且可以思考这个增多的过程是以原本像素值为0的区域向外增多的,即黑暗的区域在”膨胀“,那么反过来就是我们看到的高亮白色区域被”腐蚀“了。所以要注意的是,膨胀与腐蚀都是针对二值图像中的高亮区域而言的。

  • 图像处理作用以及应用场景

同样地,腐蚀也常用于二值图像的处理。

  • 消除高亮小斑点的噪声
  • 减小高亮目标的面积

开运算

开运算是对图像进行先腐蚀在膨胀的元素,原理就不再赘述,其作用一般就是平滑目标的轮廓,二值图中可以用来消除白色噪点。开运算可以断开两个高亮区域中细小的连接通道。

闭运算

闭运算同样是膨胀与腐蚀的组合运算,与开运算相反,闭运算是先膨胀后腐蚀,闭运算同样可以使轮廓变得光滑, 但与开运算相反,它通常能够弥合狭窄的间断, 填充小的孔洞。


本文由芒果浩明发布,转载请注明来源。 本文链接:https://blog.mangoeffect.net/algorithm/image-process-morphology.html


微信公众号