前言


一、OTSU算法是什么?

OTSU算法又名最大类间方差法,是由日本学者大津展之于1979 年提出,利用整副图像的直方图特性,选择全局阈值T。文字图片和背景通常会出现两个驼峰,确定一个灰度值作为阈值,将灰度值小于阈值的点作为目标,大于等于阈值的点作为背景。遍历整副图像灰度值,选择类间方差最大时对应的灰度值作为阈值,OTSU算法为目前比较好的确定阈值的算法。

二、算法详解

该博文由该算法的原理:
OpenCV — Otsu 算法_FlyDremever的博客-CSDN博客_opencv otsu

2.算法实现

代码如下(示例):

//算法实现步骤
//Step1 计算灰度图像的全局期望
//Step2 遍历灰度值从0到255将灰度图像分为前景与背景
//Step2.1 求前景的期望与概率
//Step2.2 求背景的期望与概率
//Step2.3 由间类方差定义求当前阈值的间类方差
//遍历过程中,不断比较求得最大的间类方差int thresh_otsu(Mat input)
{int histogram[256] = { 0 };//计算各灰度级的像素数目double global_mean = 0;//全局期望int imgSize = input.size().area();//图像的大小//遍历图像for (int i = 0; i < input.rows; i++){uchar *data = input.ptr<uchar>(i);//当前行地址for (int j = 0; j < input.cols; j++)//遍历当前行{histogram[data[j]]++;//当前灰度级为data[j]的数值global_mean += data[j];//统计整幅图像的像素值之和}}//期望(平均) = 总和 / 个数 global_mean /= imgSize;//统计完后根据均值定义求得图像的均值double p1 = 0, p2 = 0, m1 = 0, m2 = 0;//p1 m1 分别为背景的概率与背景的期望//p2 m2 分别为前景的概率与前景的期望double sg = 0;//间类方差double temp_sg = -1;//用于交换的变量int k = 0;//遍历i求当前阈值i得到的间类方差,找到间类方差最大值对应的阈值ifor (int i = 0; i < 256; i++){//小于阈值i为前景(目标)for (int j = 0; j <= i; j++){p2 += histogram[j];//统计前景的像素值 个数 总和 即小于阈值i的像素点个数之和  m2 += (histogram[j] * j);//统计前景的像素值 总和  即小于阈值i的像素值之和}m2 = m2 / p2;//由期望公式得到期望 (前景)//大于阈值i为背景for (int j = i + 1; j < 256; j++){p1 += histogram[j];m1 += (histogram[j] * j);}m1 /= p1;//由期望公式得到期望 (背景)p2 /= imgSize;//求前景的概率 = 前景像素点个数 / 图像总像素个数p1 = 1 - p2;//求背景的概率sg = p1 * p2*(m1 - m2)*(m1 - m2); //计算当前阈值i的类间方差//找出 阈值i分割的前景与背景的最大间类方差  if (sg > temp_sg){temp_sg = sg;k = i;}p1 = 0, p2 = 0, m1 = 0, m2 = 0;//求完后这些数据要重置为0 计算新的阈值的相应的数据}//cout<<"k = "<<k<<endl;return k;
}

总结

Otsu详细算法解析相关推荐

  1. CVPR目标检测与实例分割算法解析:FCOS(2019),Mask R-CNN(2019),PolarMask(2020)

    CVPR目标检测与实例分割算法解析:FCOS(2019),Mask R-CNN(2019),PolarMask(2020) 目标检测:FCOS(CVPR 2019) 目标检测算法FCOS(FCOS: ...

  2. Mmseg中文分词算法解析

    Mmseg中文分词算法解析 @author linjiexing 开发中文搜索和中文词库语义自己主动识别的时候,我採用都是基于mmseg中文分词算法开发的Jcseg开源project.使用场景涉及搜索 ...

  3. 激光IMU融合——LIO-Mapping / LIOM / LINS / LIO-SAM算法解析

    激光IMU融合--LIO-Mapping / LIOM / LINS / LIO-SAM算法解析 激光IMU融合--LIO-Mapping / LIOM / LINS / LIO-SAM算法解析 1. ...

  4. 视觉激光融合——VLOAM / LIMO算法解析

    视觉激光融合--VLOAM / LIMO算法解析 视觉激光融合--VLOAM / LIMO算法解析 1. VLOAM算法 1.1 总体框架 1.2 视觉里程计 1.3 激光里程计 1.4 实验结果 2 ...

  5. 机器学习算法-KMeans聚类算法解析及伪代码实现。

    机器学习算法-KMeans聚类算法解析及伪代码实现. 徐小狗在文末附上了几条大神们关于KMeans聚类算法的博文,欲详细研究请前往浏览~ 作为初学者,许多地方可能笨拙或有误,希望有大神看到后给予优化和 ...

  6. 【ROS-Navigation】—— Astar路径规划算法解析

    文章目录 前言 1. 导航的相关启动和配置文件 1.1 demo01_gazebo.launch 1.2 nav06_path.launch 1.3 nav04_amcl.launch 1.4 nav ...

  7. 一眼就能看懂的Java自学手册,附详细答案解析

    如何保证缓存和数据库一致性 说了这么多缓存的必要性,那么使用缓存是不是就是一个很简单的事情了呢,我之前也一直是这么觉得的,直到遇到了需要缓存与数据库保持强一致的场景,才知道让数据库数据和缓存数据保持一 ...

  8. 大数据算法_大数据算法解析,如何创建用户画像实现千人千面?

    " 一面科技,一面生活 技术与社交电商的完美融合 打开了全新的幸福视界 " 幸福蜜糖  2020·11·5 大数据算法无处不在 "处在如今的时代中,数据越来越值钱,如何 ...

  9. 利用OTSU阈值算法在ZYNQ上实现浒苔识别

    文章目录 前言 一.软件安装 二.算法实现 1.图片数据读入 2.数据处理 1.Matlab仿真 2.利用Matlab Coder将Matlab代码转为C代码 3.利用Vitis HLS将C代码转为V ...

  10. 深度学习AI美颜系列---AI 发型管家(美颜相机发型管家算法解析)

    美颜相机---AI 发型管家效果的算法解析 ####前言 本文为去年写的Gitchat文章,由于Gitchat有时间版权限制,一年时间,所以今天才能发布到CSDN博客上来. 本文为大家介绍美颜相机中 ...

最新文章

  1. com.tadu.android中文,塔读文学(com.tadu.android) - 6.68 - 应用 - 酷安
  2. 深入探究Spark -- 了解Executor和参数配置
  3. java oracle数据备份_Java备份还原Oracle数据库
  4. 萧山职称计算机考试培训,浙江萧山2017年职称计算机考试时间安排
  5. 一文详解MySQL中的事件调度器EVENT
  6. XML配置文件的智能感知(IntelliSense)功能
  7. 《WinForm开发系列之控件篇》Item16 ErrorProvider
  8. 浅析双11背后的电商IT基础架构
  9. linux下好用的ftp,linux好用的ftp客户端
  10. 无锡高二计算机会考内容,无锡期中考试卷分析,看一看高一高二高三数学都考了哪些...
  11. OD使用经验【转载】
  12. FreeMind 思维导图的使用
  13. 传智播客创始人张孝祥因病去世(转)
  14. 回发或回调参数无效 的解决办法
  15. RGB颜色空间与Lab颜色空间区别与联系(附转换代码)
  16. linux下查看文件内容的命令
  17. pfa100_PFA 是什么意思?
  18. Windows下的cache-浏览器缓存
  19. Nmap手册(转自http://www.nmap.com.cn/doc/manual.shtm)
  20. 如何做一个基于微信健身房私教预约小程序毕业设计毕设作品

热门文章

  1. Serializer序列化器----反序列化使用
  2. 最详细的vue安装教程
  3. QtChart使用教程
  4. MongoDB客户端Robo 3T安装使用
  5. 西数硬盘MRT维修思路
  6. java date.set_解决Java Calendar类set()方法的陷阱
  7. R语言和Python的区别
  8. 小程序跳转样式布局错乱_微信小程序页面布局问题
  9. IOS+Android 车牌识别SDK开发包——可以各种角度瞬间OCR识别车牌牌号
  10. 微信公众号查后端服务器IP,微信公众号平台接口开发 获取微信服务器IP地址方法解析...