形态学填充孔洞的几个问题
序
最近做文字和数字方面的图像处理,由于字符存在很多孔洞,提取轮廓时需要加上许多条件才能将字符提取出来,而且像“0”这种字符,内外轮廓差不了多少,虽然可以用在OpenCV的findcontours函数中的hierarchy[i][3]来判定父轮廓或子轮廓,但过多的条件容易使轮廓提取不准确不说,也会造成字符提取的适应性不强;使用了教材上形态学重建中的填充算法,但怎么也实现不了,不知道是不是自己的实现上有问题,而网上千篇一律的不是只说明了原理和结果,就是用Matlab中的imfill()函数完事(严重鄙视那些不经验证、没有独立思考精神、只会拿来主义的人),没办法,只能自己琢磨下,特此记录下结果,如果有更好办法的高能,愿意指教的话,本人不胜感激。
一、教材理解
这是关键的一步,也是被书上(冈萨雷斯第三版)一笔带过的一步,书上说的,标记图像是这样的:
反正这个公式我是看了半天没看懂(他只说 I 是一幅二值图像,没说I(x,y)是如何标定的,我简单的大脑实在想不出来 1 - I(x,y) 所表达的数学模型是怎么样的。)而从配备的插图上来看,F 应该是一幅包围原图像外轮廓的一幅标记图像。
别人我不知道,但对于我提取字符来说,如果知道了外轮廓直接就开干下一步了,还填充就没意义了,而如果进行复杂的条件进行筛选外轮廓的意义也不是很大,所以难点就在于如何找标记图像。