OTSU算法,即最大类间方差,是由日本学者大津(Nobuyuki Otsu)于1979年提出的一种自适应阈值确定方法。算法假设一组数据 DDD 能够根据阈值被分为两部分,使得两类的区分度最大。两类之间的界限即为最佳分割阈值。大家有兴趣可以参考:Otsu, N. (1979)。

在数学上,数据 DDD 的阈值 d∗d^*d∗ 可以表示为以下优化问题:
d∗=OTSU(D)=argmax⁡1≤d≤LσB2(d)d^*=OTSU(D)=arg\ \max \limits_{1\leq d \leq L} \sigma_B^2(d) d∗=OTSU(D)=arg 1≤d≤Lmax​σB2​(d)

其中:
σB2(d)=[μTω(d)−μ(d)]2ω(d)[1−ω(d)]\sigma_B^2(d)=\dfrac{[\mu_T^{}\omega(d)-\mu(d)]^2}{\omega(d)[1-\omega(d)]} σB2​(d)=ω(d)[1−ω(d)][μT​ω(d)−μ(d)]2​
μT=∑i=1Lipiω(d)=∑i=1dpiμ(d)∑i=1dipi\mu_T^{}=\sum \limits_{i=1}^L ip_i^{} \\ \omega(d)=\sum \limits_{i=1}^d p_i^{} \\ \mu(d)\sum \limits_{i=1}^d ip_i^{} μT​=i=1∑L​ipi​ω(d)=i=1∑d​pi​μ(d)i=1∑d​ipi​

其中 pip_i^{}pi​ 为数据中 iii 的概率,LLL 为数据 DDD 的最大值。
代码实现如下:

int otsu(float *pix, int pixsize, float pixmin, float pixmax)
{//pix 输入的数据//pixsize 数据的长度//pixmin 数据最小值//pixmax 数据最大值int pixsi = (int)pixmax - (int)pixmin+1;int nThresh = (int)pixmin;float *fStdHistogram = new float [pixsi]; // 图像直方图,pixsi个点float *fGrayAccu = new float [pixsi];float *fGrayAve = new float [pixsi]; float HistogramSum = 0.0;float fAverage = 0;  float fTemp, fMax = 0;memset(fStdHistogram, 0.0, sizeof(float) * pixsi);memset(fGrayAccu, 0.0, sizeof(float) * pixsi);memset(fGrayAve, 0.0, sizeof(float) * pixsi);for (int i = 0; i < pixsize; ++i)fStdHistogram[(int)pix[i] - (int)pixmin] += 1.0;for (int i = 0; i < pixsi; ++i)fStdHistogram[i] /= (pixsize * 1.0);int minnew = 0, maxnew = pixsi;for(int i = 0;i < pixsi; ++i)  {  for(int j = 0; j <= i; ++j)  {  fGrayAccu[i] += fStdHistogram[j];fGrayAve[i] += j * fStdHistogram[j];  } fAverage += i * fStdHistogram[i];}  for(int i = 0; i < pixsi; ++i)  {if (HistogramSum < 0.02) minnew = i;if (HistogramSum >= 0.98){maxnew = i;break;}HistogramSum += fStdHistogram[i];}for(int i = minnew; i < maxnew; ++i){  fTemp = (fAverage * fGrayAccu[i] - fGrayAve[i]) * (fAverage * fGrayAccu[i] - fGrayAve[i]) / (fGrayAccu[i] * (1 - fGrayAccu[i])); if(fTemp > fMax)  {  fMax = fTemp;nThresh = i;}  }delete [] fStdHistogram;delete [] fGrayAccu;delete [] fGrayAve;return 1 * (nThresh + (int)pixmin);
}

欢迎大家批评指正。

C++实现OTSU算法(大津法)相关推荐

  1. 【智能车】图像二值化算法--大津法OTSU

    图像二值化算法–大津法OTSU 大津算法是一种图像二值化算法,作用是确定将图像分成黑白两个部分的阈值. 大津法是针对灰度值进行阈值分割二值化,如果是彩色图像的话需要先转化成灰度图再进行计算. 方差越大 ...

  2. Otsu(大津法,最大类间方差法)

    虽然很早就看过这本绿皮书,但是当时是刚入门的小菜鸟,根本就不知道这就是大名鼎鼎的大津法,当时只是觉得Otsu好奇怪的英文名字. 现在就来重新看看这个所谓的大津法: nin_ini​表示灰度级为i的像素 ...

  3. CUDA精进之路(五):图像处理——OTSU二值算法(最大类间方差法、大津法)

    引言 最近在做医疗设备相关的项目,故在项目中大量用到了各类图像分割的算法,为了在图像中分割出特定目标,用到的算法可以有很多,比如阈值分割,多通道分割,边缘分割以及一些前沿的组合分割.而对大多数图像来说 ...

  4. 图像阈值分割:大津法(Otsu)

    大津法(OTSU法)是由大津于1979 年提出的,对图像I,记T为前景与背景的分割阈值,前景点数占图像比例为w0,平均灰度为u0:背景点数占图像比例为w1,平均灰度为u1.从最小灰度值到最大灰度值遍历 ...

  5. otsu java,opencv阈值处理--threshold函数、自适应阈值处理、Otsu处理(大津法)

    threshold函数 retval, dst = cv2.threshold(src, thresh, maxval, type) ''' retval:返回的阈值:dst:阈值分割结果图像 src ...

  6. 详细及易读懂的 大津法(OTSU)原理 和 算法实现

    OTSU算法原理简述: 最大类间方差是由日本学者大津(Nobuyuki Otsu)于1979年提出,是一种自适应的阈值确定方法.算法假设图像像素能够根据阈值,被分成背景[background]和目标[ ...

  7. 算法001:大津法OTSU学习记录

    OTSU算法 一.大津法主要的工作是什么? 大多数时候,我们需要获取到一幅图像中的特定目标.如果可以根据像素值将图像进行合理的分割,例如全局阈值分割那样,找到一个阈值TTT,大于阈值TTT的赋予一个像 ...

  8. otsu阈值分割算法原理_大津法---OTSU算法

    简介: 大津法(OTSU)是一种确定图像二值化分割阈值的算法,由日本学者大津于1979年提出.从大津法的原理上来讲,该方法又称作最大类间方差法,因为按照大津法求得的阈值进行图像二值化分割后,前景与背景 ...

  9. 自适应阈值分割—大津法(OTSU算法)C++实现

    转自:https://blog.csdn.net/dcrmg/article/details/52216622 大津法是一种图像灰度自适应的阈值分割算法,是1979年由日本学者大津提出,并由他的名字命 ...

  10. 图像二值化之最大类间方差法(大津法,OTSU)

    参考文章1:图像二值化与otsu算法介绍 参考文章2:python opencv cv2.threshold() (将固定级别的阈值应用于每个数组元素)ThresholdTypes 最大类间方差法(大 ...

最新文章

  1. springboot(十六):使用Jenkins部署Spring Boot
  2. 面试:字符串拼接,什么时候用StringBuilder?
  3. 计算机考试创建数据库,2013年计算机二级access创建数据库
  4. Windows 10的应用体验之二
  5. 提示虚拟内存不足的解决办法
  6. HDU 4109 Instrction Arrangement
  7. Extjs tree树的生成
  8. mvc的Controller返回值类型ActionResult详解
  9. 胃net的放大内镜_李锐:内镜下的早癌诊断
  10. Hibernate 原生SQL多表查询时-字段名相同-查询数据覆盖问题
  11. linux记录iptables日志,linux – 如何配置syslog.conf文件,在单独的文件中记录iptables消息?...
  12. 区块链测试 以太坊 truffle是什么 怎么用
  13. 生产排程系统_APS(高级计划排产)系统该如何选型,主要从哪些方面考虑?
  14. QQ空间批量删除留言
  15. Codeforces Round #614 (Div. 2)A. ConneR and the A.R.C. Markland-N
  16. SYZOJ - sxy的书包(背包)
  17. 未来十年的音视频,教科书级别的Android音视频开发教程,学完我成功“挤进”了抖音音视频开发岗
  18. 异常错误cannot be cast to java.lang.Comparable解决办法
  19. 腾讯将开放多项无障碍AI技术,希望助力更多无障碍场景服务
  20. JCTF 2014 -小试身手

热门文章

  1. 关于perl中的反勾号(``),system和exec
  2. 计算机联锁仿真论文,计算机联锁系统仿真平台的研究
  3. python读取txt文件特定内容,并绘制折线图
  4. 如何彻底删除adsafe
  5. 统计学习方法——第1章(个人笔记)
  6. 卡方分布matlab函数,Matlab在抽样分布教学中的应用
  7. CPC (Contrastive Predictive Coding)
  8. UltralSO制作Ubuntu启动盘
  9. 信息系统建设和服务能力评估证书CS
  10. 【django 图书信息】