① 设灰度级为L,灰度值i的像素出现的频数为。分别为所纷呈的两个像素类的面积比,即

② 分别为两个像素类的平均灰度值,即

③计算类间方差,并找出最大类间方差以及对应的阈值。

④ 求为最大值时的t,作为图像分割的最佳阈值T。

int otsu(IplImage* image)
{assert(NULL != image);int width = image->width;int height = image->height;int x = 0, y = 0;int pixelCount[256];float pixelPro[256];int i, j, pixelSum = width * height, threshold = 0;uchar* data = (uchar*)image->imageData;//初始化for (i = 0; i < 256; i++){pixelCount[i] = 0;pixelPro[i] = 0;}//统计灰度级中每个像素在整幅图像中的个数for (i = y; i < height; i++){for (j = x; j < width; j++){pixelCount[data[i * image->widthStep + j]]++;}}//计算每个像素在整幅图像中的比例for (i = 0; i < 256; i++){pixelPro[i] = (float)(pixelCount[i]) / (float)(pixelSum);}//经典ostu算法,得到前景和背景的分割//遍历灰度级[0,255],计算出方差最大的灰度值,为最佳阈值float w0, w1, u0tmp, u1tmp, u0, u1, u, deltaTmp, deltaMax = 0;for (i = 0; i < 256; i++){w0 = w1 = u0tmp = u1tmp = u0 = u1 = u = deltaTmp = 0;for (j = 0; j < 256; j++){if (j <= i) //背景部分{//以i为阈值分类,第一类总的概率w0 += pixelPro[j];u0tmp += j * pixelPro[j];}else       //前景部分{//以i为阈值分类,第二类总的概率w1 += pixelPro[j];u1tmp += j * pixelPro[j];}}u0 = u0tmp / w0;        //第一类的平均灰度u1 = u1tmp / w1;        //第二类的平均灰度u = u0tmp + u1tmp;        //整幅图像的平均灰度//计算类间方差deltaTmp = w0 * (u0 - u) * (u0 - u) + w1 * (u1 - u) * (u1 - u);//找出最大类间方差以及对应的阈值if (deltaTmp > deltaMax){deltaMax = deltaTmp;threshold = i;}}//返回最佳阈值;return threshold;
}

代码如下:(可直接运行使用)
https://download.csdn.net/download/chengxuyuanliwanwan/12601166

最大类间方差法Ostu的C++实现相关推荐

  1. Ostu最大类间方差法的C++实现

    一.Ostu的原理 最大类间方差法是由日本学者大津(Nobuyuki Ostu)在1979年提出的,该方法根据计算公式自动计算分割单域值,是一种根据灰度图像自动计算阈值的方法.它按照灰度图像的灰度值等 ...

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

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

  3. 【机器视觉学习笔记】大津法/Otsu最大类间方差法 最佳阈值处理(C++)

    目录 概念 C++源码 OtsuThreshold 主函数 效果 完整源码 平台:Windows 10 20H2 Visual Studio 2015 OpenCV 4.5.3 本文所用源码修改自C+ ...

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

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

  5. 基于OTSU最大类间方差法的ROI分割、提取图像中的形状特征--面积、周长、离心率、zernike矩

    分享一下最近学习的图像分类方面知识,整体的思路如下(之前的汇报ppt里截的) 把这个过程拆分几个部分共同学习一下吧 1.Otsu法原理 最大类间方差法OTSU是一种自适应的全局阈值确定的方法,根据灰度 ...

  6. 最大类间方差法(大津法OTSU)原理

    算法介绍 最大类间方差法是1979年由日本学者大津提出的,是一种自适应阈值确定的方法,又叫大津法,简称OTSU,是一种基于全局的二值化算法,它是根据图像的灰度特性,将图像分为前景和背景两个部分.当取最 ...

  7. opencv与C++实现最大类间方差法(OTSU)进行图像二值化

    直接上代码,使用最大类间方差法进行二值化的函数 void threshold_otsu(Mat &mat, Mat &mat_thresh) //mat为输入图像,mat_thresh ...

  8. 基于遗传算法的二维最大类间方差法的图像分割优化

    一.背景 最大类间方差阈值分割法日本大津展之在1980年提出的,其基本思路是将图像的直方图以某一灰度为阈值,将图像分成两组并计算两组的方差,当被分成的两组之间的方差最大时,就以这个灰度值为國值分割图像 ...

  9. 数字图像处理实验(六)|图像分割{阈值分割、直方图法、OTUS最大类间方差法(edge、im2dw、imfilter、imresize)、迭代阈值法、点检测}(附matlab实验代码和截图)

    文章目录 一.实验目的 二.实验原理 (一) 阈值分割 1. 直方图法 2.OTSU法(最大类间方差法)确定阈值 3. 迭代阈值法 4. 点检测 (二)边缘检测 三.实验内容 (一)阈值分割 1. 直 ...

最新文章

  1. 为什么分散刷新没有死时间_分散项目为何失败(以及如何处理)
  2. 21 个HTML网页转RSS Feeds的工具
  3. Docker四种网络模式
  4. 使用hive中beeline引擎来访问hive数据库
  5. SQL Server Audit(审核)配置方法--数据库级别的审核
  6. Nhibernate学习的第一天
  7. java打印插件_java c/s项目中有没有好用的打印插件?
  8. vue @blur v-model数据没有更新问题
  9. DDoS deflate:自动屏蔽DDOS攻击IP
  10. System State 转储分析案例一则
  11. 建造智能食用菌大棚,用菌菇养殖管理系统管理温室
  12. 微信小程序--给头像添加logo(生成海报同理)
  13. win10用户和计算机,对于电脑工作者们,更喜欢用win7还是win10呢?
  14. DXF文件的使用与PCB元件封装确认
  15. 2021年危险化学品经营单位安全管理人员考试及危险化学品经营单位安全管理人员试题及解析
  16. flink jdbc connector支持clickhouse
  17. 以低功耗蓝牙便携医疗设备帮助改善癫痫患者治疗管理
  18. 整数平方根的计算(一)
  19. 数据名称:中国社会追踪调查数据CGSS区县码(最全版本)数据年限:2010-2015年数据简介:搭配CGSS数据使用,可精准匹配至区县层面,对于从事微观层面研究具有重要价值。
  20. js实现点击按钮图片自动切换_☆往事随風☆的博客

热门文章

  1. C#中接口和抽象类的区别
  2. 消息队列处理高并发【转】
  3. Java常用类System、Math和File类
  4. python iteritems函数_Python six.iteritems方法代码示例
  5. linux 主机访问主机命令,linux查看主机名命令
  6. 全文搜索原理简单解析
  7. 买手机的注意事项(不断补充)
  8. python normalize函数_数据正规化 (data normalization) 的原理及实现 (Python sklearn)
  9. Android APP压力测试(二) 之Monkey信息自动收集脚本
  10. List集合遍历时如何删除元素