算法介绍
- 击中:击中其实是一种模板匹配,如果一个结构元(模板)与图像中的一个连通区域完全相等,那么腐蚀的结果将是一个点,这就算是“击中”了,因为找到了完全一致的模式(模式的含义去查一下吧,这里的模式和模式识别的模式含义相同),但如果模板与联通区域去不完全相同,但腐蚀后的结果还是一个点,我们也称为一种“击中”,但不是严格的击中,比如我们的模板是一个直径为10的实心圆形,连通区域是一个直径为10的实心圆和一个直径为1的实心圆的并列排布,其腐蚀结果也是一个点,但其不是完美的击中,要找到完美的击中,必须在模板外面加个边框(或者是背景),这样的结果就不会出现不完美击中,我们可以选模板外一圈黑色的背景(红色背景)作为边框,与上述连通区域做击中操作,很明显。。击不中。。完美击中和不完美的击中都有很多用途,后面的操作中会继续用到。
上图,看图更明确:
红色表示背景,击中结果是只能有一个像素被点亮
一般性的匹配,不关心背景,只寻找一个模式
- 孔洞填充:最简单的理解,一个白色的圆环,背景为黑,想要的结果是一个白色的实心圆,这就用到了孔洞填充,孔洞填充的一个缺点在于,必须已知一个种子点,从种子点向外膨胀至整个孔洞。
下图中红色为种子点,黑色为背景
种子点和原图
填充后结果 - 连通分量提取:与孔洞填充类似,孔洞处理的是被连通分量包围的背景,连通分量提取是提取的连通分量,而非中间的孔洞。所以从公式上看也非常相似。连通分量提取也需要种子点,所以也不是很智能。
四个连通分量,红点为示例种子点 -
凸壳:是为了找到一个凹陷的物体外壳,以不完美命中(腐蚀)为主要操作,通过调整结构元,加上原图,得到相关结果。
原图
凸壳添加结果
添加的凸壳 -
细化:细化和骨架有点类似,但涉及到一个是否同伦操作,来贴一下同伦的含义,拓扑学的一个概念,是连通性的一个概念定义,如果变换不改变连通结构,则视为同伦,或者同伦树不变,以下来自百度百科对同伦的解释,wiki的数学有点复杂,不好理解:
这个解释的很形象,尤其是终结者的实例,很形象。上图:
原图放大好多倍以后,每个方框是一个像素:结果
- 骨架:使用形态学腐蚀减去结果的开运算的骨架与细化相比,缺少的就是同伦性,即骨架操作得到的并不是原图像的同伦变换,而且这种骨架有些地方并不是一个像素,而是多个像素,使得这种骨架算法应用不是很广泛,但骨架却应用相当广泛
- 形态学重建:提取原始图像中包含某些特定特征的连通区域,需要一个模板和一些种子点,比如重建开操作提取文字中有长竖“I”这种结构的,先用长竖对图像进行几次腐蚀(命中),使之得到一些点,在膨胀这些点,并以原图作为模板,最终得到包含长竖的字母。