您的位置:首页 > 编程语言

OpenCV编程:最大熵阈值分割算法实现(代码可运行)

2015-11-28 09:34 274 查看
        将信息论中的 shannon 熵概念用于图像分割, 其依据是使得图像中目标与背景分布的信息量最大,即通过测量图像灰度直方图的熵,找出最佳阈值。根据 shannon 熵的概念,对于灰度范围为 0,1,2,…,L-1 的图像,其直方图的熵定义为(仅仅是定义) :


其中pi为像素值为 i 的像素占整个图像的概率。

       设阈值 t 将图像划分为目标 O 和背景 B 两类,他们的概率分布分别为:



       最佳阈值 T 为使得图像的总熵取得最大值:T=argmax(H(t))

此方法不需要先验知识, 而且对于非理想双峰直方图的图像也可以进行较好的分割。 缺点:运算速度较慢不适合实时处理。 仅仅考虑了像素点的灰度信息, 没有考虑到像素点的空间信息,所以当图像的信噪比较低时分割效果不理想。

      下面程序使用OpenCV的相关函数,实现了最大熵阈值分割算法,参考自网上博友:作者为crond123和DELPHI&.NET初学者[TECSOON
WENDAY]

     本人在自己的运行过程中,根据错误提示进行相应修改,分别用OpenCV1和

OpenCV2实现最大熵阈值分割。我的开发环境是VS2012+OpenCV2.4.10。

程序运行结果如下所示:

  原始图



输出结果:



   

如果需要代码可以下载,地址:

OpenCV2版本:http://download.csdn.net/detail/lanmeng_smile/9306673

OpenCV1版本:http://download.csdn.net/detail/lanmeng_smile/9307113
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: