利用OpenCV 2.2 的Python接口实现Ostu(大津法)获取阈值
来源:互联网 发布:mysql cursor 编辑:程序博客网 时间:2024/06/04 19:22
OpenCV(版本2.2)是啥不说了你懂的。其实本文只是使用OpenCV计算了一个直方图。完全可以写Python代码实现。
Python(版本是2.7)是啥也不说你也懂的。
什么是大津法?
请注意是大“津”法,不是大“律”法!我第一看到的时候阴差阳错的看成了大“律”法,然后还在百度和谷歌上溜了一圈,居然还找到了很多资料,后来在琢磨Ostu四个字母的时候发现,Ostu是日本的一个县,叫大津县,所以这里应当是“大津法”。
大津法,又叫最大类间方差法,简称Otsu,是由日本学者大津于1979年提出的,是一种自适应的阈值确定方法。按图像的灰度特性,将图像分成两个部分,称之为部分0和部分1(即通常意义的背景与目标),两个部分的类间方差越大,说明构成图像的两部分的差别越大,也就是说图片的背景和目标的差别越大。
对于图像f(x,y),通过阈值t将图片分成两个部分,亮度小于t的称之为部分0,亮度大于等于t的称之为部分1。部分0像素点占整幅图像的比例为ω0,平均灰度μ0;部分1像素点占整幅图像的比例为ω1,平均灰度为μ1。图像的总平均灰度记为μ,类间方差记为g。
则有
μ = ω0μ0+ω1μ1
g = ω0(μ0-μ)2+ω1(μ1-μ)2
将第一个式子带入到第二个式子我们可以得到
g=ω0ω1(μ0-μ1)2
通过遍历所有的亮度(一般是[0,255])求得所有的t值对应的g,最大的g出现的t就是Otsu算法得到的最佳阈值。
下面的Python程序展示了在OpenCV 2.2中使用Python 2.7计算Otsu最佳阈值,为了方便阅读,所有的ω使用w,μ使用u代替。
展示一下二值化的效果:
原图如下:
t=102时g取得最大值
为了节省空间,只传这么一个例子吧~
各位老师,文章中若有错误之处,恳请您斧正。
- 利用OpenCV 2.2 的Python接口实现Ostu(大津法)获取阈值
- Opencv图像识别从零到精通(15)-----阈值分割、固定阈值Threshold、自适应阈值分割adaptiveThreshold、OSTU大津法
- 利用OpenCV实现图像的阈值分割
- ostu大津法 自动阈值分割
- python+opencv实现阈值分割
- opencv学习系列:OSTU算法选自适应阈值
- 大津(Ostu)阈值分割方法在matlab中的实现
- ostu阈值分割
- 利用OpenCV的threshold函数实现双阈值法二值化操作的源码!
- 图像阈值化(Python+opencv)
- python opencv入门 图像阈值(10)
- Python-OpenCV图像阈值
- OSTU(大津算法选自适应阈值)
- 在Python下利用PIL实现可设定阈值的二值图像转换
- Python下利用PIL实现可设定阈值的二值图像转换
- 利用最大熵进行阈值分割从而实现灰度图像的二值化的原理概要及OpenCV代码
- Opencv3.0-python的那些事儿:(四)、Opencv的图像阈值处理
- OpenCV的Python接口
- 在solaris 10下设置Oracle 10g自启动
- java socket 与linux c通信问题
- tfn2k安装错误
- windows、linux间远程管理及文件传输
- 重启comcat的几种情况
- 利用OpenCV 2.2 的Python接口实现Ostu(大津法)获取阈值
- STL中map用法详解
- reDuhGUI 渗透软件
- android sdk 编译--如何将源代码加入android.jar,以及make原理
- CVS上下载工程
- 新的开始新的希望.net之旅
- MPEG4和DivX的问题解答荟萃
- window.open() 打开IE缓慢的原因
- 20110112