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
其中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
相关文章推荐
- dubbo-admin在jdk 1.8上出错问题
- PHP中的数据库一、MySQL优化策略综述
- Java学习心得(看到后觉得很好,在博客上分享一下,希望对大家有启发)
- Gear VR的改进与虚拟现实社群
- Python2.7下载微信公众号文章的图片(二)
- Java MD5加密原理分析及代码示例
- JAVA程序编写入门
- 我与大话设计模式之代码篇(四)-----外观模式
- WebRTC 简介
- 你的手机密码只有你知道?Google:呵呵
- Python实用小技巧
- sz命令太慢, 那就用samba或者scp/ftp/sftp吧
- 2015 11 27编写JAVA程序
- 对与java io知识的部分总结
- 将NLog target设置为RichTextBox的注意事项,NLog版本4.2.1
- asp.net mvc 后台怎么接受前端返回的array list dictionary
- Java 初始化过程
- eclipse 异常 Subversion Native Library Not Available解决方案
- java两个线程互相守护
- Stackless Python 并发式编程介绍