形态学,即数学形态学(mathematical Morphology),是图像处理中应用最为广泛的技术之一,主要用于从图像中提取对表达和描绘区域形状有意义的图像分量,使后续的识别工作能够抓住目标对象最为本质〈最具区分能力-most discriminative)的形状特征,如边界和连通区域等。同时像细化、像素化和修剪毛刺等技术也常应用于图像的预处理和后处理中,成为图像增强技术的有力补充。
本文主要包括以下内容
二值图像的基本形态学运算, 包括腐蚀、膨胀、开和闭。
二值形态学的经典应用, 包括击中击不中变换、边界提取和跟踪、区域填充、提取连通分量、细化和像素化, 以及凸壳
灰度图像的形态学运算, 包括灰度腐蚀、灰度膨胀、灰度开和灰度闭
本章的典型案例分析
在人脸局部图像中定位嘴的中心
显微镜下图像的细菌计数
利用顶帽变换(top-hat)技术解决光照不均问题
预备知识
在数字图像处理中, 形态学是借助集合论的语言来描述的, 本章后面的各节内容均以本集合论为基础。
结构元素(structure element)
设有两幅图像A, S。若A是被处理的对象, 而S是用来处理A的, 则称S为结构元素。结构元素通常都是一些比较小的图像, A与S的关系类似于滤波中图像和模板的关系.
二值图像中的基本形态学运算
本节介绍几种二值图像的基本形态学运算, 包括腐蚀、膨胀, 以及开、闭运算。由于所有形态学运算都是针对图像中的前景物体进行的, 因而首先对图像前景和背景的认定给出必要的说明.
注意: 大多数图像,一般相对于背景而言物体的颜色(灰度)更深, 二值化之后物体会成为黑色, 而背景则成为白色, 因此我们通常是习惯于将物体用黑色(灰度值0)表示, 而背景用白色(灰度值255)表示,本章所有的算法示意图以及所有的Visual C++的程序实例都遵从这种约定;但Matlab 在二位图像形态学处理中,默认情况下白色的(二位图像中灰度值为1的像素,或灰度图像中灰度值为255的像素)
是前景(物体),黑色的为背景, 因而本章涉及Matlab 的所有程序实例又都遵从Matlab本身的这种前景认定习惯.
实际上, 无论以什么灰度值为前景和背景都只是一种处理上的习惯, 与形态学算法本身无关。例如对于上面两幅图片, 只需要在形态学处理之前先对图像反色就可以在两种认定习惯之间自由切换。
腐蚀及其实现
腐蚀和膨胀是两种最基本也是最重要的形态学运算, 它们是后续要介绍的很多高级形态学处理的基础, 很多其他的形态学算法都是由这两种基本运算复合而成
matlab实现
Matlab中与腐蚀相关的两个常用函数为imerode和strel。
imerode函数用于完成图像腐蚀.其常用调用形式如下:I2 = imrode(I,SE)
I为原始图像,可以是二位或灰度图像(对应于灰度腐蚀).
SE是由strel函数返回的自定义或预设的结构元素对象.
strel函数可以为各种常见形态学运算生成结构元素SE, 当生成供二值形态学使用的结构元素肘, 其调用形式为:SE=strl(shape,parameter)
shape指定了结构元素的形状, 其常用合法取值如在8.1所示.
腐蚀的作用“ 顾名思义,腐蚀能够消融物体的边界,而具体的腐蚀结果与图像本身和结构元素的形状有关。如果物体整体上大于结构元素,腐蚀的结构是使物体变“ 瘦”一圈,而
这一圈到底有多大是由结构元素决定的:如果物体本身小于结构元素, 则在腐蚀后的图像中物体将完全消失:如