图像处理算法2——Otsu最佳阈值分割法http://blog.csdn.net/xiaqunfeng123/article/details/17121195
http://blog.csdn.net/xiaqunfeng123/article/details/17121195Otsu法是1979年由日本大津提出的。该方法在类间方差最大的情况下是最佳的,即统计鉴别分析中所用的度量。Otsu方法有一个重要的特性,就是它完全以在一幅图像的直方图上执行计算为基础,而直方图是很容易得到的一维阵列。
具体的公式推理及公式细节就不说了,详见 Conzalez 那本书,我是第三版的,在P.479——P.482 上面。
给出具体步骤如下:
1、计算输入图像的直方图,并归一化。
2、计算累积均值mu,以及全局灰度均值。
3、计算被分到类1的概率q1,和被分到类2的概率q2。
4、用公式计算类间方差,sigma = q1*q2*(mu1 - mu2)*(mu1 - mu2)
5、循环寻找类间方差最大值,并记下此时的阈值,即为最佳阈值。
6、利用最佳阈值进行图像阈值化。
关于otsu部分的程序代码如下:
- double getThreshVal_Otsu_8u( const Mat& _src )
- {
- Size size = _src.size();
- const int N = 256;
- int i, j, h[N] = {0};
- unsigned char* src;
- //直方图统计
- for( i = 0; i < size.height; i++ )
- {
- src = _src.data + _src.step*i;
- j = 0;
- for(j = 0; j < size.width; j++ )
- h[src[j]]++;
- }
- //像素平均值
- double mu = 0, scale = 1./(size.width*size.height);
- for( i = 0; i < N; i++ )
- {
- mu += i*(double)h[i];//累加均值
- }
- mu *= scale;//平均
- double mu1 = 0, q1 = 0;//q1 ,q2 为类1和类2的概率累积和,mu1=mg*q1
- double p_i, q2, mu2, sigma;
- double max_sigma = 0, max_val = 0;
- //循环求取最大阈值
- for( i = 0; i < N; i++ )
- {
- p_i = h[i]*scale;//直方图归一化
- mu1 *= q1;
- q1 += p_i;
- q2 = 1. - q1;
- mu1 = (mu1 + i*p_i)/q1;
- mu2 = (mu - q1*mu1)/q2;
- sigma = q1*q2*(mu1 - mu2)*(mu1 - mu2);//类间方差
- if( sigma > max_sigma )
- {
- max_sigma = sigma;
- max_val = i;//记下使类间方差最大的阈值
- }
- }
- return max_val;//返回阈值
- }
注意,上面这部分传递的图像是 Mat 类型的,和 Iplimage 类型在图像参数部分写法上有一点区别,注意区分开来
显示结果如下:
图像处理算法2——Otsu最佳阈值分割法http://blog.csdn.net/xiaqunfeng123/article/details/17121195的更多相关文章
- 排序算法 ----(转载::http://blog.csdn.net/hguisu/article/details/7776068)
1.插入排序—直接插入排序(Straight Insertion Sort) 基本思想: 将一个记录插入到已排序好的有序表中,从而得到一个新,记录数增1的有序表.即:先将序列的第1个记录看成是一个有序 ...
- 几种排序算法的比较转自http://blog.csdn.net/keenweiwei/article/details/3697452
1冒泡排序: 已知一组无需数据a[1],a[2],a[3],a[4],a[5][a[n],将其按升序排列,首先找出这组数据中最大值,将a[1]与a[2]比较,若a[1]大,则交换两者的值,否则不变,在 ...
- Bellman-ford算法的学习http://blog.csdn.net/niushuai666/article/details/6791765
http://blog.csdn.net/niushuai666/article/details/6791765
- 七种常见阈值分割代码(Otsu、最大熵、迭代法、自适应阀值、手动、迭代法、基本全局阈值法)
http://blog.csdn.net/xw20084898/article/details/17564957 一.工具:VC+OpenCV 二.语言:C++ 三.原理 otsu法(最大类间方差法, ...
- 【转】七种常见阈值分割代码(Otsu、最大熵、迭代法、自适应阀值、手动、迭代法、基本全局阈值法)
http://blog.csdn.net/xw20084898/article/details/17564957 一.工具:VC+OpenCV 二.语言:C++ 三.原理 otsu法(最大类间方差法, ...
- 灰度图像的自动阈值分割(Otsu 法)
关于otsu分割方法,这个文章讲的是最好的,清晰易懂,一看就是作者认真思考过的. 因为在看这个算法的时候我就想,如果一个很大的图像上,大部分像素值都在0 - 50范围内,但是有很小一块像素值在240的 ...
- OTSU算法学习 OTSU公式证明
OTSU算法学习 OTSU公式证明 1 otsu的公式如下,如果当前阈值为t, w0 前景点所占比例 w1 = 1- w0 背景点所占比例 u0 = 前景灰度均值 u1 = 背景灰度均值 u = ...
- CCF CSP 202012-2 期末预测之最佳阈值
202012-2 期末预测之最佳阈值 题目背景 考虑到安全指数是一个较大范围内的整数.小菜很可能搞不清楚自己是否真的安全,顿顿决定设置一个阈值 θ,以便将安全指数 y 转化为一个具体的预测结果--&q ...
- 【算法导论】最小生成树之Prime法
关于最小生成树的概念,在前一篇文章中已经讲到,就不在赘述了.下面介绍Prime算法: 其基本思想为:从一个顶点出发,选择由该顶点出发的最小权值边,并将该边的另一个顶点包含进来,然后找出 ...
随机推荐
- 基于openstack stable queens版本阅读解析
基于openstack stable queens版本阅读解析 基于 centos7.5 的linux系统 架构 如下所示,为cinder的官方架构说明: 这里写图片描述 各个组件介绍如下: - DB ...
- scss 侧边栏_图片
html <!doctype html><html lang="zh-CN"><head> <meta charset="UTF ...
- Java基础加强-(注解,动态代理,类加载器,servlet3.0新特性)
1. Annotation注解 1.1. Annotation概述 Annotation是JDK 5.0以后提供对元数据的支持,可以在编译.加载和运行时被读取,并执行相应的处理.所谓Annota ...
- 22深入理解C指针之---通过指针传递函数
一.通过指针传递函数与通过指针传递数据的本质是一样的,区别就是此时的数据是函数指针(函数的开始的地址) 1.定义:通过函数指针将函数传入函数:通过函数返回函数指针实现函数返回函数的目标 2.特征: 1 ...
- PHP错误捕获处理
PHP错误捕获处理 一般捕获错误使用的方法是: try{ ...}catch(Exception $e){ echo $e->getMessage();} 或者 set_exception_ha ...
- Spring Tool Suite(STS)安装
Spring Tool Suite是一个基于Eclipse的开发环境,可以自定义用于开发Spring应用程序.它提供了一个随时可用的环境来实现,调试,运行和部署Spring应用程序,包括Pivotal ...
- Codeforces 553D Nudist Beach(二分答案 + BFS)
题目链接 Nudist Beach 来源 Codeforces Round #309 (Div. 1) Problem D 题目大意: 给定一篇森林(共$n$个点),你可以在$n$个点中选择若干个构 ...
- Spring Boot + Elastic stack 记录日志
原文链接:https://piotrminkowski.wordpress.com/2019/05/07/logging-with-spring-boot-and-elastic-stack/ 作者: ...
- android-samples-mvp
Model–view–presenter (MVP)介绍 mvp在wiki上的介绍为 Model 定义用户界面所需要被显示的数据模型,一个模型包含着相关的业务逻辑 View View不应该处理业务 ...
- git grep 或者 ag 进行快速代码搜索
1.git grep foo 会自动map所有包含foo的文件 2.git grep -n foo 显示行号 3.git grep --name-only foo 只显示文件名 4.git grep ...