一、Ostu的原理

最大类间方差法是由日本学者大津(Nobuyuki Ostu)在1979年提出的,该方法根据计算公式自动计算分割单域值,是一种根据灰度图像自动计算阈值的方法。它按照灰度图像的灰度值等级属性,将图像256个灰度级自动划分成背景点和目标点两部分,即计算出一个合适的中间值k,将图像256个灰度级分为两部分。算法分类的原理是使背景和目标之间的类间方差最大,因为背景和目标之间的类间方差越大,说明构成图像的两部分的差别越大,错分的可能性越小。

类间方法ggg的计算公式为:
g=w1∗w−2∗(u1−u2)2g=w_1*w-2*(u_1-u_2)^2 g=w1​∗w−2∗(u1​−u2​)2
其中:w1w_1w1​为目标像素点占整幅图像的比例,u1u_1u1​为其平均灰度,w2w_2w2​为背景像素点占整幅图像的比例,u2u_2u2​为其平均灰度。通过公式计算得到的ggg也就是类间方差最大值,即这副图像的自适应阈值。

二、基于OpenCV的C++程序

int otsu(Mat image)
{int width = image.rows, height = image.cols, threshold = 0;int pixelCount[256];float pixelPro[256];//初始化for (int i = 0; i < 256; i++){pixelCount[i] = 0;pixelPro[i] = 0;}//统计灰度级中每个像素在整幅图像中的个数for (int i = 0; i < width; i++){for (int j = 0; j < height; j++){pixelCount[image.at<uchar>(i,j)]++;}}//计算每个像素在整幅图像中的比例for (int i = 0; i < 256; i++){pixelPro[i] = (float)(pixelCount[i]) / (float)(width*height);}//经典ostu算法,得到前景和背景的分割//遍历灰度级[0,255],计算出方差最大的灰度值,为最佳阈值float w0, w1, u0tmp, u1tmp, u0, u1, u, deltaTmp, deltaMax = 0;for (int i = 0; i < 256; i++){w0 = w1 = u0tmp = u1tmp = u0 = u1 = u = deltaTmp = 0;for (int 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;
}
void main()
{cv::Mat diff_image, binary_image;diff_image = imread("..//xx", 0);  //读取灰度图int threshold = otsu(diff_image);  //得到阈值cv::threshold(diff_image, binary_image, threshold, 255, THRESH_BINARY);  //二值化imshow("binary_image", binary_image);
}

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    ① 设灰度级为L,灰度值i的像素出现的频数为.分别为所纷呈的两个像素类的面积比,即 ② 分别为两个像素类的平均灰度值,即 ③计算类间方差,并找出最大类间方差以及对应的阈值. ④ 求为最大值时的t,作为 ...

最新文章

  1. 《C#与.NET 3.5高级程序设计(第4版)》有奖书评征集活动
  2. 单用户模式迁移home家目录
  3. [hdu1847]博弈,推理
  4. css鼠标悬停样式_利用Css3样式属性Cursor来更换自定义个性化鼠标指针(光标
  5. 03 渲染元素ReactDOM.render
  6. [luoguP4142]洞穴遇险
  7. Windows 系统补丁管理策略
  8. oracle database 11g plsql 程序设计,oracle-database-11g-plsql-编程实战笔记
  9. 程序设计与算法----动态规划之最长公共子序列
  10. html 如何实现一条竖线边上有 刻度_Android H5交互Webview实现localStorage数据存储
  11. 华为mate10手机听筒测试软件,华为mate 10功能说:这几个设置,让你通话体验直线上升,简直了!...
  12. javaweb中解决中文乱码问题
  13. [渝粤教育] 西南石油大学 普通地质学 参考 资料
  14. lucene 学习笔记之飞龙在天
  15. 关于2012(世界末日)
  16. 2021年终总结——工作第四年
  17. 移动硬盘位置不可用参数错误的解决方法
  18. 实战:Traefik 高级配置3-2022.1.23
  19. 浅谈在软件开发中的开发与测试 - 下
  20. python requests cookie处理

热门文章

  1. 让 Android 可以识别BMP图片文件,且目前Android所支持的所有图片格式
  2. 人生的旅程就是这样,用大把时间迷茫,在几个瞬间成长
  3. uniapp学习API之——其他(授权、收货地址、发票抬头等)
  4. php浮点数保留小数点后两位小数,PHP保留2位小数 格式化小数、浮点数
  5. 不限速、没有广告,这个 Windows 神器能帮你把网盘内嵌在系统中
  6. 另外一种方式:用USB摄像头实现网络监控
  7. GDAL常用命令——遥感图像处理
  8. 测试用例编写及用例评审方法
  9. IRIS65双模蓝牙5.2热插拔PCB
  10. Anaconda的基本使用与在Pycharm中使用