文档章节

大津法---OTSU算法

moki_oschina
 moki_oschina
发布于 2016/11/24 14:38
字数 791
阅读 23
收藏 0
点赞 0
评论 0

OpenCV的二值化操作中,有一种“大津阈值处理”的方法,使用函数cvThreshold(image,image2,0,255,CV_THRESH_OTSU) 实现,该函数就会使用大律法OTSU得到的全局自适应阈值来进行二值化图片,而参数中的threshold不再起作用。OTSU算法

OTSU算法也称最大类间差法,有时也称之为大津算法,由大津于1979年提出,被认为是图像分割中阈值选取的最佳算法,计算简单,不受图像亮度和对比度的影响,因此在数字图像处理上得到了广泛的应用。它是按图像的灰度特性,将图像分成背景和前景两部分。因方差是灰度分布均匀性的一种度量,背景和前景之间的类间方差越大,说明构成图像的两部分的差别越大,当部分前景错分为背景或部分背景错分为前景都会导致两部分差别变小。因此,使类间方差最大的分割意味着错分概率最小。

设灰度图像灰度级是L,则灰度范围为[0,L-1],利用OTSU算法计算图像的最佳阈值为:
t = Max[w0(t) * (u0(t) - u)^2 + w1(t) * (u1(t) - u)^2)]
其中的变量说明:当分割的阈值为t时,w0为背景比例,u0为背景均值,w1为前景比例,u1为前景均值,u为整幅图像的均值。
使以上表达式值最大的t,即为分割图像的最佳阈值。

以下是一段在OpenCV中实现的C语言程序,即一个使用OTSU算法提取图像阈值的函数,输入参数为一个图像指针,返回分割该图像的最佳阈值。

其中的变量说明:当分割的阈值为t时

w0为背景像素点占整幅图像的比例

u0为w0平均灰度

w1为前景像素点占整幅图像的比例

u1为w1平均灰度

u为整幅图像的平均灰度

公式:g = w0*pow((u-u0),2) + w1*pow((u-u1),2)

 

int MyAutoFocusDll::otsuThreshold(IplImage *frame)  
{  
 const int GrayScale = 256;
 int width = frame->width;  
 int height = frame->height;  
 int pixelCount[GrayScale];  
 float pixelPro[GrayScale];  
 int i, j, pixelSum = width * height, threshold = 0;  
 uchar* data = (uchar*)frame->imageData;  //指向像素数据的指针

 for(i = 0; i < GrayScale; i++)  
 {  
  pixelCount[i] = 0;  
  pixelPro[i] = 0;  
 }  
 
 //统计灰度级中每个像素在整幅图像中的个数  
 for(i = 0; i < height; i++)  
 {  
  for(j = 0;j < width;j++)  
  {  
   pixelCount[(int)data[i * width + j]]++;  //将像素值作为计数数组的下标
  }  
 }  
 
 //计算每个像素在整幅图像中的比例  
 float maxPro = 0.0;
 int kk=0;
 for(i = 0; i < GrayScale; i++)  
 {  
  pixelPro[i] = (float)pixelCount[i] / pixelSum;  
  if( pixelPro[i] > maxPro )
  {
   maxPro = pixelPro[i];
   kk = i;
  }
 }  


 //遍历灰度级[0,255]  
 float w0, w1, u0tmp, u1tmp, u0, u1, u, deltaTmp, deltaMax = 0;  
 for(i = 0; i < GrayScale; i++)     // i作为阈值
 {  
  w0 = w1 = u0tmp = u1tmp = u0 = u1 = u = deltaTmp = 0;  
  for(j = 0; j < GrayScale; j++)  
  {  
   if(j <= i)   //背景部分  
   {  
    w0 += pixelPro[j];  
    u0tmp += j * pixelPro[j];  
   }  
   else   //前景部分  
   {  
    w1 += pixelPro[j];  
    u1tmp += j * pixelPro[j];  
   }  
  }  
  u0 = u0tmp / w0;  
  u1 = u1tmp / w1;  
  u = u0tmp + u1tmp;  
  deltaTmp = w0 * pow((u0 - u), 2) + w1 * pow((u1 - u), 2);  
  if(deltaTmp > deltaMax)  
  {  
   deltaMax = deltaTmp;  
   threshold = i;  
  }  
 }  
 
 return threshold;  

 

http://blog.csdn.net/guoyk1990/article/details/7606032

本文转载自:http://blog.csdn.net/akunainiannian/article/details/27565899

共有 人打赏支持
moki_oschina
粉丝 24
博文 179
码字总数 22482
作品 0
成都
程序员
OpenCV2.4-使用P参数法二值化

二值化是图像处理的基本操作,OpenCV提供了: 固定阈值二值化. --threshold(... ...,CVTHRESHBINARY); 最大类间方差法(大津法OTSU)二值化. --threshold(... ...,CVTHRESHOTSU); 局部自适应二值...

csm1972385274
04/21
0
0
手写数字识别系统之图像分割

背景 本文,主要介绍我之前在学校时候,研究的一些跟手写数字识别相关的技术心得,主要涉及:数字图像处理、特征提取、神经网络等等相关的一些技术。。 虽然很多用到的还是网上现有的比较成熟...

ruki
2016/07/30
184
0
相似图片搜索的原理(二)

二年前,我写了《相似图片搜索的原理》,介绍了一种最简单的实现方法。 昨天,我在isnowfy的网站看到,还有其他两种方法也很简单,这里做一些笔记。 一、颜色分布法 每张图片都可以生成颜色分...

阮一峰
2013/03/31
0
0
【OpenCV3.3】检测图像中的身份证区域

假设现有一些含身份证前景以及不确定背景的图像,想通过计算机将身份证区域检测出来,实现诸如用户拍照定位提示、背景分离等业务,用OpenCV该如何做呢?如果输入图像前景和背景同时具有一定区...

wjf1997
2017/08/16
0
0
【OpenCV入门指南】第四篇 图像的二值化

【OpenCV入门指南】第四篇 图像的二值化 在上一篇《【OpenCV入门指南】第三篇Canny边缘检测》中介绍了使用Canny算子对图像进行边缘检测。与边缘检测相比,轮廓检测有时能更好的反映图像的内容...

长平狐
2012/12/10
12.7K
0
图像识别试验 - 字符验证码、车牌号、身份证号

© 野比 2012 欢迎大家和我讨论相关问题。 代码在此(注意此版并非最终版) 光学字符识别(OCR)是非常有用的技术。在验证码识别、车牌号识别、文字识别方面,基于字符的识别技术算是比较容易...

nothingfinal
03/09
0
0
灰度图像的阈值化

通过对灰度图像二值化处理,能够凸现出感兴趣目标的轮廓. 灰度图像的二值化处理就是讲图像上的点的灰度置为0或255,也就是讲整个图像呈现出明显的黑白效果。即将256个亮度等级的灰度图像通过适...

文艺小青年
2017/07/06
0
0
OpenCV学习31--图像分水岭分割算法

任意的灰度图像可以被看做是地质学表面,高亮度的地方是山峰,低亮度的地方是山谷。给每个孤立的山谷(局部最小值)不同颜色的水(标签),当水涨起来,根据周围的山峰(梯度),不同的山谷也...

qq_16481211
04/12
0
0
OpenCV学习笔记-分水岭算法

二、代码 0,255, cv.THRESHBINARY | cv.THRESHOTSU) 'thresh', thresh) #去噪声 blurred = cv.pyrMeanShiftFiltering(img,10,100) kernel = cv.getStructuringElement(cv.MORPH_RECT, (3, 3)......

qq_36387683
05/29
0
0
阿里 iDST 新人「物理学家」冯津伟:声学设计与语音信号处理,是 AI 算法的核心前提

雷锋网 AI 科技评论按:阿里巴巴人工智能核心团队 iDST 近期又将一名顶级大牛纳入麾下——世界级声学专家、原宝利通(Polycom)声学设计与信号处理首席工程师冯津伟博士于近期加入阿里巴巴 ...

奕欣
2017/11/30
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

shell中的函数、shell中的数组、告警系统需求分析

shell中的函数 格式: 格式: function f_name() { command } 函数必须要放在最前面 示例1(用来打印参数) 示例2(用于定义加法) 示例3(用于显示IP) shell中的数组 shell中的数组1 定义数...

Zhouliang6
今天
2
0
用 Scikit-Learn 和 Pandas 学习线性回归

      对于想深入了解线性回归的童鞋,这里给出一个完整的例子,详细学完这个例子,对用scikit-learn来运行线性回归,评估模型不会有什么问题了。 1. 获取数据,定义问题     没有...

wangxuwei
今天
1
0
MAC安装MAVEN

一:下载maven压缩包(Zip或tar可选),解压压缩包 二:打开终端输入:vim ~/.bash_profile(如果找不到该文件新建一个:touch ./bash_profile) 三:输入i 四:输入maven环境变量配置 MAVEN_HO...

WALK_MAN
今天
0
0
33.iptables备份与恢复 firewalld的9个zone以及操作 service的操作

10.19 iptables规则备份和恢复 10.20 firewalld的9个zone 10.21 firewalld关于zone的操作 10.22 firewalld关于service的操作 10.19 iptables规则备份和恢复: ~1. 保存和备份iptables规则 ~2...

王鑫linux
今天
2
0
大数据教程(2.11):keeperalived+nginx高可用集群搭建教程

上一章节博主为大家介绍了目前大型互联网项目的系统架构体系,相信大家应该注意到其中很重要的一块知识nginx技术,在本节博主将为大家分享nginx的相关技术以及配置过程。 一、nginx相关概念 ...

em_aaron
今天
1
0
Apache Directory Studio连接Weblogic内置LDAP

OBIEE默认使用Weblogic内置LDAP管理用户及组。 要整理已存在的用户及组,此前办法是导出安全数据,文本编辑器打开认证文件,使用正则表达式获取用户及组的信息。 后来想到直接用Apache Dire...

wffger
今天
2
0
HFS

FS,它是一种上传文件的软件。 专为个人用户所设计的 HTTP 档案系统 - Http File Server,如果您觉得架设 FTP Server 太麻烦,那么这个软件可以提供您更方便的档案传输系统,下载后无须安装,...

garkey
今天
1
0
Java IO类库之BufferedInputStream

一、BufferedInputStream介绍 /** * A <code>BufferedInputStream</code> adds * functionality to another input stream-namely, * the ability to buffer the input and to * sup......

老韭菜
今天
0
0
STM 32 窗口看门狗

http://bbs.elecfans.com/jishu_805708_1_1.html https://blog.csdn.net/a1985831055/article/details/77404131...

whoisliang
昨天
1
0
Dubbo解析(六)-服务调用

当dubbo消费方和提供方都发布和引用完成后,第四步就是消费方调用提供方。 还是以dubbo的DemoService举例 -- 提供方<dubbo:application name="demo-provider"/><dubbo:registry address="z...

青离
昨天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部