论文部分内容阅读
图像分割技术在图像处理及机器视觉中扮演十分重要的角色.在从多灰度级图像分割为二值图像的过程中,由于损失了信息,因此如何在二值化的过程中尽量保留原始图像的主要特征就成为了重要论题.本文在前人工作的基础上,提出了结合边缘检测的图像二值化算法.作为背景知识,我们首先综述了当前比较主流的整体阈值和局部阈值两类二值化算法,并通过具体实验加以说明.通过实验我们发现,整体阈值二值化算法,对于质量好的图像具有很好性能,但是当图像具有一定模糊度,直方图不呈双峰时,通常具有不合理的分割.而局部阈值二值化算法中最具代表性的BERNSEN算法和NIBLACK算法,虽应用广泛且能较好地保留图像的细节,但是同时存在引入过多噪声的缺点.进一步的研究发现,BERNSEN算法和NIBLACK算法的主要问题出在进行逐点二值化时有一个不合理的假设.这两种算法进行分割的方式和原理是相同的.以一个像素点I(i,j)为中心取一个w*w小块,然后在小块内计算出对应于该像素点的阈值T(i,j).其实质上也就是对小窗口“所有像素点”进行分割的过程.但是,由于这两种方法基于如下事实:一个小窗口内的灰度分布能更好地反映中心像素点的性质;每一点应该有最能反映它的阈值.因此从表面上看,只是对窗口内的中心像素点进行了二值化.这样,就存在一个问题:对小窗口进行二值分割是否具有合理性.对于整个图像,有一个不言自明的假设:该图像同时混有前景和背景.否则,进行分割是没有意义的.但是,当从图像中取出一个小块的时候,我们就没有这种保证了.如果小块内全是前景或全是背景,这时候进行分割,就是一种人为强制地不合理划分.因此,在使用BERNSEN算法和NIBLACK算法进行逐点分窗二值化的时候,我们必须“首先”判断这个小窗口的性质.由此,我们接着就展开了判断小窗口性质的算法研究.具体说来,我们运用了一种描述波动的形式函数.它针对BERNSEN算法和NIBLACK算法分别进行了优化.具体函数形式如下:BERNSEN算法的波动函数为wave(i,j,w)=|M(i,j)(x,y)-m(i,j)(x,y)|/f(w)其中M(i,j)(x,y)是窗口内的灰度最大值,m(i,j)(x,y)是窗口内灰度最小值,而f(w)是一个关于窗口尺寸的递增函数.NIBLACK算法的波动函数为:wave(i,j,w)=σlocal2(i,j)/g(w)其中σlocal2(i,j)为小窗口内灰度分布方差,g(w)与f(w)性质相似.波动函数值大,表明窗口内混有前景和背景;值小,表明窗口内只有一类像素.以wave(W)表示窗口取为整个图像时的波动函数值,区别大小的临界值为λ*wave(W),λ∈(0,1].由于不易得到f(w)及g(w)的具体形式,我们采用比较的方式进行判定,然后简化之.BERNSEN判定方法为|M(i,j)(x,y)-m(i,j)(x,y)|<β|M(x,y)-m(x,y)|其中M(x,y)为图像灰度最大值,m(x,y)为最小值,β=λ*f(w)/f(W),实验中β∈(0,0.2].而NIBLACK判定方法为σlocal2(x,y)<β*σall2其中σ2all,为图像灰度分布的方差,β=λ*g(w)/g(W),实验中β∈(0,0.2].若满足上式关系,小窗口内只有一类像素;反之,就混有前景和背景,使用对应公式求得阈值T(i,j),进行二值化.当小窗口内只有一类像素点时,不能使用NIBLACK和BERNSEN公式去计算阈值.由于窗口内灰度分布均匀,灰度均值能合理地代表该块灰度特征.我们让这个均值与由一种整体阈值算法所得到的阈值T做比较,然后对窗口中心像素点二值化.上述步骤虽可以完成二值化功能,但效率仍有提高的空间.我们注意到整体阈值算法中的错分邻域的概念.在所得阈值的一个邻域内,邻域越小,错误分割的概率越大,相反,错误分割的概率很小.于是,我们提出了使用错分邻域对上述算法进行加速的策略.边缘是图像的一个主要特征,因此分割过程保留边缘信息很重要.我们在对边缘检测算法进行综述的基础上,选择CANNY算法作为我们的边缘检测策略.最后,我们给出了本文的核心算法:结合边缘检测的图像二值化算法.该算法的思路如下:首先,我们运用CANNY算法对原始图像进行边缘提取.是边缘点的,作为前景,直接进入二值图.不是边缘点的,则判断该点是否在错分邻域内.不在邻域内的,可以直接使用全局阈值进行加速;在邻域内的,使用我们前面引入的改进NIBLACK算法或BERNSEN算法进行二值化.实验表明,我们提出的算法在处理部分图像时取得了比传统算法更好的二值化效果,而运算的效率却与传统算法接近.