十三种基于直方图的图像全局二值化算法原理、实现、代码及效果。
由于CSDN博客和博客园的编辑方面有不一致的地方,导致文中部分图片错位,为不影响浏览效果,建议点击打开链接。
图像二值化的目的是最大限度的将图象中感兴趣的部分保留下来,在很多情况下,也是进行图像分析、特征提取与模式识别之前的必要的图像预处理过程。这个看似简单的问题,在过去的四十年里受到国内外学者的广泛关注,产生了数以百计的阈值选取方法,但如同其他图像分割算法一样,没有一个现有方法对各种各样的图像都能得到令人满意的结果。
在这些庞大的分类方法中,基于直方图的全局二值算法占有了绝对的市场份额,这些算法都从不同的科学层次提出了各自的实施方案,并且这类方法都有着一些共同的特点:
1、简单;
2、算法容易实现;
3、执行速度快。
本文摘取了若干种这类方法进行了介绍。
一:灰度平局值值法:
1、描述:即使用整幅图像的灰度平均值作为二值化的阈值,一般该方法可作为其他方法的初始猜想值。
2、原理:
3、实现代码:
原图 二值图 原始直方图 平滑后的直方图
对于这种有较明显的双峰的图像,该算法还是能取得不错的效果的。
四、基于双峰平均值的阈值
1、描述:
该算法和基于谷底最小值的阈值方法类似,只是最后一步不是取得双峰之间的谷底值,而是取双峰的平均值作为阈值。
2、参考代码:
原图 二值图 原始直方图 平滑后的直方图
五、迭代最佳阈值
1、描述:
该算法先假定一个阈值,然后计算在该阈值下的前景和背景的中心值,当前景和背景中心值得平均值和假定的阈值相同时,则迭代中止,并以此值为阈值进行二值化。
2、实现过程:
(1)求出图象的最大灰度值和最小灰度值,分别记为gl和gu,令初始阈值为:
(2) 根据阈值T0将图象分割为前景和背景,分别求出两者的平均灰度值Ab和Af:
(3) 令
如果Tk=Tk+1,则取Tk为所求得的阈值,否则,转2继续迭代。
3、参考代码:
原图 二值图 直方图
六、OSTU大律法
1、描述:
该算法是1979年由日本大津提出的,主要是思想是取某个阈值,使得前景和背景两类的类间方差最大,matlab中的graythresh即是以该算法为原理执行的。
2、原理:
关于该算法的原理,网络上有很多,这里为了篇幅有限,不加以赘述。
3、参考代码:
该算法对于那些具有平坦的直方图的图像具有一定的适应能力。
七、一维最大熵
1、描述:
该算法把信息论中熵的概念引入到图像中,通过计算阈值分割后两部分熵的和来判断阈值是否为最佳阈值。
2、算法原理
这方面的文章也比较多,留给读者自行去查找相关资料。
3、参考代码:
其中的A\B\C的函数可见代码部分。
3、参考代码:
Kittler, J & Illingworth, J (1986), "Minimum error thresholding", Pattern Recognition19: 41-47
参考代码:
Ridler, TW & Calvard, S (1978), "Picture thresholding using an iterative selection method",IEEE Transactions on Systems, Man and Cybernetics 8: 630-632 参考论文:
Shanbhag, Abhijit G. (1994), "Utilization of information measure as a means of image thresholding",Graph. Models Image Process. (Academic Press, Inc.) 56 (5): 414--419, ISSN1049-9652 参考代码(未整理):
*****************************基本上我不提供源代码,但是我会尽量用文字把对应的算法描述清楚或提供参考文档*********************
*************************************因为靠自己的努力和实践写出来的效果才真正是自己的东西,人一定要靠自己****************************
*********************************作者: laviewpbt 时间: 2013.9.7 联系QQ: 33184777 转载请保留本行信息************************