Otsu详细算法解析
前言
无
一、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详细算法解析相关推荐
- CVPR目标检测与实例分割算法解析:FCOS(2019),Mask R-CNN(2019),PolarMask(2020)
CVPR目标检测与实例分割算法解析:FCOS(2019),Mask R-CNN(2019),PolarMask(2020) 目标检测:FCOS(CVPR 2019) 目标检测算法FCOS(FCOS: ...
- Mmseg中文分词算法解析
Mmseg中文分词算法解析 @author linjiexing 开发中文搜索和中文词库语义自己主动识别的时候,我採用都是基于mmseg中文分词算法开发的Jcseg开源project.使用场景涉及搜索 ...
- 激光IMU融合——LIO-Mapping / LIOM / LINS / LIO-SAM算法解析
激光IMU融合--LIO-Mapping / LIOM / LINS / LIO-SAM算法解析 激光IMU融合--LIO-Mapping / LIOM / LINS / LIO-SAM算法解析 1. ...
- 视觉激光融合——VLOAM / LIMO算法解析
视觉激光融合--VLOAM / LIMO算法解析 视觉激光融合--VLOAM / LIMO算法解析 1. VLOAM算法 1.1 总体框架 1.2 视觉里程计 1.3 激光里程计 1.4 实验结果 2 ...
- 机器学习算法-KMeans聚类算法解析及伪代码实现。
机器学习算法-KMeans聚类算法解析及伪代码实现. 徐小狗在文末附上了几条大神们关于KMeans聚类算法的博文,欲详细研究请前往浏览~ 作为初学者,许多地方可能笨拙或有误,希望有大神看到后给予优化和 ...
- 【ROS-Navigation】—— Astar路径规划算法解析
文章目录 前言 1. 导航的相关启动和配置文件 1.1 demo01_gazebo.launch 1.2 nav06_path.launch 1.3 nav04_amcl.launch 1.4 nav ...
- 一眼就能看懂的Java自学手册,附详细答案解析
如何保证缓存和数据库一致性 说了这么多缓存的必要性,那么使用缓存是不是就是一个很简单的事情了呢,我之前也一直是这么觉得的,直到遇到了需要缓存与数据库保持强一致的场景,才知道让数据库数据和缓存数据保持一 ...
- 大数据算法_大数据算法解析,如何创建用户画像实现千人千面?
" 一面科技,一面生活 技术与社交电商的完美融合 打开了全新的幸福视界 " 幸福蜜糖 2020·11·5 大数据算法无处不在 "处在如今的时代中,数据越来越值钱,如何 ...
- 利用OTSU阈值算法在ZYNQ上实现浒苔识别
文章目录 前言 一.软件安装 二.算法实现 1.图片数据读入 2.数据处理 1.Matlab仿真 2.利用Matlab Coder将Matlab代码转为C代码 3.利用Vitis HLS将C代码转为V ...
- 深度学习AI美颜系列---AI 发型管家(美颜相机发型管家算法解析)
美颜相机---AI 发型管家效果的算法解析 ####前言 本文为去年写的Gitchat文章,由于Gitchat有时间版权限制,一年时间,所以今天才能发布到CSDN博客上来. 本文为大家介绍美颜相机中 ...
最新文章
- com.tadu.android中文,塔读文学(com.tadu.android) - 6.68 - 应用 - 酷安
- 深入探究Spark -- 了解Executor和参数配置
- java oracle数据备份_Java备份还原Oracle数据库
- 萧山职称计算机考试培训,浙江萧山2017年职称计算机考试时间安排
- 一文详解MySQL中的事件调度器EVENT
- XML配置文件的智能感知(IntelliSense)功能
- 《WinForm开发系列之控件篇》Item16 ErrorProvider
- 浅析双11背后的电商IT基础架构
- linux下好用的ftp,linux好用的ftp客户端
- 无锡高二计算机会考内容,无锡期中考试卷分析,看一看高一高二高三数学都考了哪些...
- OD使用经验【转载】
- FreeMind 思维导图的使用
- 传智播客创始人张孝祥因病去世(转)
- 回发或回调参数无效 的解决办法
- RGB颜色空间与Lab颜色空间区别与联系(附转换代码)
- linux下查看文件内容的命令
- pfa100_PFA 是什么意思?
- Windows下的cache-浏览器缓存
- Nmap手册(转自http://www.nmap.com.cn/doc/manual.shtm)
- 如何做一个基于微信健身房私教预约小程序毕业设计毕设作品
热门文章
- Serializer序列化器----反序列化使用
- 最详细的vue安装教程
- QtChart使用教程
- MongoDB客户端Robo 3T安装使用
- 西数硬盘MRT维修思路
- java date.set_解决Java Calendar类set()方法的陷阱
- R语言和Python的区别
- 小程序跳转样式布局错乱_微信小程序页面布局问题
- IOS+Android 车牌识别SDK开发包——可以各种角度瞬间OCR识别车牌牌号
- 微信公众号查后端服务器IP,微信公众号平台接口开发 获取微信服务器IP地址方法解析...