图像处理算法2——Otsu最佳阈值分割法

原创 2013年12月04日 18:43:27

    Otsu法是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 类型在图像参数部分写法上有一点区别,注意区分开来

显示结果如下:



灰度图像的自动阈值分割(Otsu 法)

灰度图像的自动阈值分割(Otsu 法)机器视觉领域许多算法都要求先对图像进行二值化。这种二值化操作阈值的选取非常重要。阈值选取的不合适,可能得到的结果就毫无用处。今天就来讲讲一种自动计算阈值的方法。这...
  • liyuanbhu
  • liyuanbhu
  • 2015年10月24日 20:04
  • 19172

基于Otsu算法的图像自适应阈值分割

在图像处理实践中,将灰度图转化为二值图是非常常见的一种预处理手段。有没有一种根据图像自身特点来自适应地选择阈值的方法呢?答案是肯定的!我们今天就来介绍其中最为经典的Otsu算法(或称大津算法)。这个算...
  • baimafujinji
  • baimafujinji
  • 2016年02月03日 14:48
  • 11607

图像处理之基于Otsu阈值二值化

基于Otsu阈值方法实现图像二值化
  • jia20003
  • jia20003
  • 2015年02月23日 12:33
  • 11280

阈值化分割(二)OTSU法-附Python实现

阈值化分割(二)OTSU法
  • u010128736
  • u010128736
  • 2016年10月12日 22:19
  • 4368

自适应阈值分割—大津法(OTSU算法)C++实现

大津法是一种图像灰度自适应的阈值分割算法,是1979年由日本学者大津提出,并由他的名字命名的。大津法按照图像上灰度值的分布,将图像分成背景和前景两部分看待,前景就是我们要按照阈值分割出来的部分。背景和...
  • dcrmg
  • dcrmg
  • 2016年08月16日 21:46
  • 9450

图像处理算法2——Otsu最佳阈值分割法

Otsu法是1979年由日本大津提出的。该方法在类间方差最大的情况下是最佳的,即统计鉴别分析中所用的度量。Otsu方法有一个重要的特性,就是它完全以在一幅图像的直方图上执行计算为基础,而直方图是很容易...
  • zhangfuliang123
  • zhangfuliang123
  • 2017年04月26日 17:43
  • 550

MFC处理bmp图像—Otsu阈值分割

Otsu算法可以查看其他博主的文章,很简单的哦! 上一篇,我们用diblook示例成功显示了bmp图像,在加入算法之前,我们先分析一下diblook的结构,仔细看一下官方diblook的示例,我们会发...
  • buxiehuai
  • buxiehuai
  • 2016年04月11日 16:06
  • 1105

otsu自适应阈值分割的算法描述和opencv实现,及其在肤色检测中的应用

otsu算法选择使类间方差最大的灰度值为阈值,具有很好的效果 算法具体描述见otsu论文,或冈萨雷斯著名的数字图像处理那本书 这里给出程序流程:...
  • onezeros
  • onezeros
  • 2011年01月13日 22:54
  • 25813

otsu自适应阈值分割的算法描述和opencv实现,及其在肤色检测中的应用

from:http://blog.csdn.net/onezeros/article/details/6136770  otsu算法选择使类间方差最大的灰度值为阈值,具有很好的效果 算法具体描述见...
  • Real_Myth
  • Real_Myth
  • 2016年04月21日 10:06
  • 1026

最大类间方差法(Otsu阈值分割算法)和形态学后处理

最大类间方差 % 最大类间方差法 % 输入: % 灰度图像 in % 输出: % 二值图像 out function [ out ] = my...
  • be_solider
  • be_solider
  • 2018年01月21日 00:15
  • 33
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:图像处理算法2——Otsu最佳阈值分割法
举报原因:
原因补充:

(最多只允许输入30个字)