OTSU方法又叫做最大类间方差,自适应选择一个合理的阈值,根据此阈值将灰度图像转换为二值图像,例如在车牌识别过程中,将摄像头拍到的图像转化为一副灰度图像,在提取车牌的有效信息中就需要图像的二值化化。
基础知识:
对于随机变量X,它的方差为E(X-EX)2,EX为数学期望,相当于均值,进行类比。
OTSU算法的步骤:
1.选定一个阈值T,将[0,255]的256个灰度值分为A,B两部分,即为A,B两类。
2.用P(A)表示A部分像素点所占总像素的比例,依次计算出P(B)。
3.用u表示整个图像的灰度均值,用u(A)表示A部分的像素均值,同理计算出u(B).
4.类间方差为P(A)(u-u(A))(u-u(A))+P(B)(u-u(B))(u-u(B))。
5.阈值T在[0,255]遍历去寻找最大类间方差。

int Otsu(Mat img)
{  //灰度图像的channels为1if (img.channels() != 1){printf("请输入灰度图像");return -1;}int T = 0;//算法的阈值double MaxVariacne = 0;//double w0 = 0;//前景像素点数所占的比例double w1 = 0;//背景像素所占的比例double u0 = 0;//前景的平均灰度double  u1 = 0;//背景的平均灰度int Histogram[256] = { 0 };//256个发光等级uchar*  data = img.data;//得到矩阵的首地址//得到像素的总和int totalNum = img.cols*img.rows;//统计每个灰度等级中像素的个数for (int i = 0; i < img.rows; i++){uchar* data = img.ptr<uchar>(i);//得到i行的首地址 得到的data是首地址for (int j = 0; j < img.cols; j++){ //发光等级 dataHistogram[data[j]] += 1;}}for (int i = 0; i<255; i++){//每次遍历的之前初始化各类变量w1 = 0; u1 = 0; w0 = 0; u0 = 0;//背景各分量的计算  当灰度级别取2 为分割点的时候for (int j = 0; j <= i; j++){w1 = w1 + Histogram[j];//背景各部分像素点的总数u1 = u1 + j*Histogram[j];  //计算出灰度数值之和}if (w1 == 0){continue;}u1 = u1 / w1;//背景的平均灰度数值w1 = w1 / totalNum;//背景部分像素点所占的比例//上面即是背景各分量计算//前景各部分之间的计算for (int k = i + 1; k < 255; k++){w0 = w0 + Histogram[k];//前景各部分像素点的总和  计算总灰度u0 = u0 + k*Histogram[k];}//计算平局灰度u0 = u0 / w0;//计算像素所占的比例w0 = w0 / totalNum;if (w0 == 0){continue;}double variance = w0*w1*(u1 - u0)*(u1 - u0);if (MaxVariacne < variance){MaxVariacne = variance;T = i;}}printf("经过计算最大的类方差为%lf\n", MaxVariacne);return T;
}

源代码下载地址

OTSU最大类间方差实现图像的二值化相关推荐

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

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

  2. 【图像处理】——图像的二值化操作及阈值化操作(固定阈值法(全局阈值法——大津法OTSU和三角法TRIANGLE)和自适应阈值法(局部阈值法——均值和高斯法))

    目录 一.二值化的概念(实际上就是一个阈值化操作) 1.概念: 2.实现方法 3.常用方法 二.阈值类型 1.常见阈值类型(主要有五种类型) (1)公式描述 (2)图表描述 2.两种特殊的阈值算法(O ...

  3. otsu阈值分割算法原理_大津二值化算法OTSU的理解

    otsu 大津算法介绍: OTSU算法是由日本学者OTSU于1979年提出的一种对图像进行二值化的高效算法. 利用阈值将原图像分成前景,背景两个图象. 前景:用n1,csum,m1来表示在当前阈值下的 ...

  4. 十三种基于直方图的图像全局二值化算法原理、实现、代码及效果

    十三种基于直方图的图像全局二值化算法实现 1. 什么是基于直方图的图像全局二值化算法 2. 灰度平均值 3. 百分比阈值(P-Tile法) 3. 基于双峰的阈值 3.1 基于平均值的阈值 3.2 基于 ...

  5. 不均匀光照文本图像的二值化

    本文转载自:http://blog.csdn.net/u013162930/article/details/47755363 不均匀光照文本图像的二值化. 因为文本图像的背景是不均匀的,所以想先求出图 ...

  6. 【OpenCV图像处理】二、图像的二值化操作

    图像的逻辑运算就是将两幅图像的对应像素进行逻辑运算.逻辑运算主要包括 与(AND)或(OR)及补运算.要对灰度图像进行逻辑运算,就要首先对图像进行二值化处理. 二值化的公式如下: 我们对灰度图像进行二 ...

  7. 多媒体实验 Visual Studio 图像显示与处理 对图像进行二值化、求边缘、增强等处理

    具体代码,图像处理结果,报告,请访问: 多媒体实验VisualStudio图像显示与处理对图像进行二值化.求边缘.增强等处理.zip-讲义文档类资源-CSDN文库 一.实验目的 1.掌握BMP文件格式 ...

  8. python-opencv 图像阈值二值化

    本文讲解基于OpenCV-python的图像二值化API及浅显原理讲解 文章目录 一. 阈值 1. 简单阈值 2. 自适应阈值 二. 图像二值化 1. 全局图像二值化 2. 局部图像二值化 3. Ot ...

  9. 十三种基于直方图的图像全局二值化算法原理、实现、代码及效果(转)

    源:十三种基于直方图的图像全局二值化算法原理.实现.代码及效果.

最新文章

  1. 优秀的数据分析师应该具备哪些技能和特质?
  2. flash绘图API :flash player11新增的绘图API方法--cubicCurveTo
  3. 开源sip客户端 linux,开源SIP服务器 Kamailio
  4. js原生实现点击事件只创建一个元素
  5. Visual Studio 2008中的jQuery Intellisense
  6. 计算机体系架构学习笔记
  7. python 元组的一点问题
  8. java代表预设一个SQL_java-io基础-3-压缩和解压
  9. MapGIS K9SP3 常见安装问题集锦
  10. MySQL通过Binlog恢复数据
  11. JavaScript网页打印国际象棋棋盘
  12. java阿里云短信验证码发送
  13. blender 命令行渲染
  14. 游戏录制软件哪个好?游戏录制软件推荐
  15. 计算机一级重点知识,计算机一级考试重点
  16. Delphi 位运算符 shl shr or xor and not
  17. 查询rssi指令_你的 iPhone 信号有多差?教你一招查询信号强度
  18. android 渠道方案,Android 不同渠道差异代码
  19. 10kw全固态中波dam广播发射机的计算机监控系统分析与设计[,【中波发射机】关于DAM10kW中波广播发射机欠激励故障维修总结...
  20. HDUnbsp;1533nbsp;Goingnbsp;Homenbsp;(KM算法)

热门文章

  1. 编辑器 的保存怎么绑定事件_适合新手用的公众号文章编辑器,你必须知道这一款...
  2. K_A16_003 基于STM32等单片机采集薄膜压力传感器参数串口与OLED0.96双显示
  3. 美国人竟然是这样教育小学生
  4. 彻底理解unity里的Time.deltatime
  5. win10鼠标指针皮肤怎么设置
  6. 数据库原理之如何设计一个ER模型
  7. oracle DNS解析_DNS优选解决网络延迟
  8. linux日志系统介绍 —— syslog(),openlog(),closelog()
  9. python如何读取csv文件某几行某几列_扣丁学堂简述如何实现pandas读取csv文件指定的前几行...
  10. 【C#】七层登录机房重构