图像处理算法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部分的程序代码如下:

[cpp] view plaincopy

  1. double getThreshVal_Otsu_8u( const Mat& _src )
  2. {
  3. Size size = _src.size();
  4. const int N = 256;
  5. int i, j, h[N] = {0};
  6. unsigned char* src;
  7. //直方图统计
  8. for( i = 0; i < size.height; i++ )
  9. {
  10. src = _src.data + _src.step*i;
  11. j = 0;
  12. for(j = 0; j < size.width; j++ )
  13. h[src[j]]++;
  14. }
  15. //像素平均值
  16. double mu = 0, scale = 1./(size.width*size.height);
  17. for( i = 0; i < N; i++ )
  18. {
  19. mu += i*(double)h[i];//累加均值
  20. }
  21. mu *= scale;//平均
  22. double mu1 = 0, q1 = 0;//q1 ,q2 为类1和类2的概率累积和,mu1=mg*q1
  23. double p_i, q2, mu2, sigma;
  24. double max_sigma = 0, max_val = 0;
  25. //循环求取最大阈值
  26. for( i = 0; i < N; i++ )
  27. {
  28. p_i = h[i]*scale;//直方图归一化
  29. mu1 *= q1;
  30. q1 += p_i;
  31. q2 = 1. - q1;
  32. mu1 = (mu1 + i*p_i)/q1;
  33. mu2 = (mu - q1*mu1)/q2;
  34. sigma = q1*q2*(mu1 - mu2)*(mu1 - mu2);//类间方差
  35. if( sigma > max_sigma )
  36. {
  37. max_sigma = sigma;
  38. max_val = i;//记下使类间方差最大的阈值
  39. }
  40. }
  41. return max_val;//返回阈值
  42. }

注意,上面这部分传递的图像是 Mat 类型的,和 Iplimage 类型在图像参数部分写法上有一点区别,注意区分开来

显示结果如下:

时间: 2024-12-28 20:14:43

图像处理算法2——Otsu最佳阈值分割法http://blog.csdn.net/xiaqunfeng123/article/details/17121195的相关文章

双重散列法http://blog.csdn.net/zixiawzm/article/details/6746946

#include <iostream>#include <math.h>#include <stdlib.h>#include <time.h>#include <windows.h> #define slot_size 100000 //散列槽的大小#define arr_size 80000 //动态关键字集合#define min_size 0 //动态关键字集合的最小值#define max_size 999 #define total_

八种排序算法--java实现(转:http://blog.csdn.net/without0815/article/details/7697916)

8种排序之间的关系: 1, 直接插入排序 (1)基本思想:在要排序的一组数中,假设前面(n-1)[n>=2] 个数已经是排 好顺序的,现在要把第n个数插到前面的有序数中,使得这n个数 也是排好顺序的.如此反复循环,直到全部排好顺序. (2)实例 (3)用java实现 1 package com.njue; 2 3 public class insertSort { 4 public insertSort(){ 5 inta[]={49,38,65,97,76,13,27,49,78,34,12,

几种排序算法的比较转自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]大,则交换两者的值,否则不变,在继续将a[1]与a[3]比较,....最后找出最大值a[n];在用同样的方法找出次大值,依次类推,a[n]就以升序排列: 优点:稳定,比较次数已知:缺点:慢,每次只移动两个数据,移动数据的次数多: 二选择排序: 已知一组无需数据a[1],a[2],a[3],a[4],a[5][a[n],将其按升序排

算法 KMP算法 参考:http://blog.csdn.net/hackbuteer1/article/details/7319115

KMP算法详解: KMP算法之所以叫做KMP算法是因为这个算法是由三个人共同提出来的,就取三个人名字的首字母作为该算法的名字.其实KMP算法与BF算法的区别就在于KMP算法巧妙的消除了指针i的回溯问题,只需确定下次匹配j的位置即可,使得问题的复杂度由O(mn)下降到O(m+n). 在KMP算法中,为了确定在匹配不成功时,下次匹配时j的位置,引入了next[]数组,next[j]的值表示P[0...j-1]中最长后缀的长度等于相同字符序列的前缀. 对于next[]数组的定义如下: 1) next[

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

在图像处理实践中,将灰度图转化为二值图是非常常见的一种预处理手段.在Matlab中,可以使用函数BW = im2bw(I, level)来将一幅灰度图 I,转化为二值图.其中,参数level是一个介于0~1之间的值,也就是用于分割图像的阈值.默认情况下,它可取值是0.5. 现在问题来了,有没有一种根据图像自身特点来自适应地选择阈值的方法呢?答案是肯定的!我们今天就来介绍其中最为经典的Otsu算法(或称大津算法).该算法由日本科学家大津展之(Nobuyuki Otsu)于1979年提出.这个算法看

七种常见阈值分割代码(Otsu、最大熵、迭代法、自适应阀值、手动、迭代法、基本全局阈值法)

转自:http://blog.csdn.net/xw20084898/article/details/17564957 一.工具:VC+OpenCV 二.语言:C++ 三.原理 otsu法(最大类间方差法,有时也称之为大津算法)使用的是聚类的思想,把图像的灰度数按灰度级分成2个部分,使得两个部分之间的灰度值差异最大,每个部分之间的灰度差异最小,通过方差的计算来寻找一个合适的灰度级别 来划分. 所以 可以在二值化的时候 采用otsu算法来自动选取阈值进行二值化.otsu算法被认为是图像分割中阈值选

图像处理算法交流群群规和近期福利活动

作为一名资深的图像处理算法业余爱好者,为了方便同道中人交流学习,我特别建立了一个QQ群(群号:529549320),出于新人培训之目的,也为了免去我每次都重复群规之繁琐,更为了方便群活动之开展特借CSDN宝地发此贴,以做一劳永逸之举. 关于入群资质: 1)无论你是大神还是小白,我们都欢迎: 2)无论你是业界专家还是在校学子,我们都欢迎: 3)无论你是专业精英还是业余爱好者,我们都欢迎. 总之,"是故无贵无贱,无长无少,道之所存,师之所存也". 但是,为了防止你因为不慎而加错群,我们特别

python数字图像处理(11):图像自动阈值分割

图像阈值分割是一种广泛应用的分割技术,利用图像中要提取的目标区域与其背景在灰度特性上的差异,把图像看作具有不同灰度级的两类区域(目标区域和背景区域)的组合,选取一个比较合理的阈值,以确定图像中每个像素点应该属于目标区域还是背景区域,从而产生相应的二值图像. 在skimage库中,阈值分割的功能是放在filters模块中. 我们可以手动指定一个阈值,从而来实现分割.也可以让系统自动生成一个阈值,下面几种方法就是用来自动生成阈值. 1.threshold_otsu 基于Otsu的阈值分割方法,函数调

红外目标图像中阈值分割方法的比较与研究

红外目标图像中阈值分割方法的比较与研究   摘要:本文主要以红外图像目标检测技术为背景,在图像阈值分割中以最大熵准则及遗传算法为基础,研究了一维最大熵值法(KSW法)及基于遗传算法的KSW熵法单阈值.双阈值等三种不同的阈值分割方法,并通过实验仿真验证了它们的性能及差异.实验结果表明:基于遗传算法的KSW熵法的双阈值分割方法,可以用于红外型目标检测系统中,并取得良好效果,为了验证其是否具有普适性,在其它科学领域如:沿海码头等方向也做了相应的仿真实验,结果较为满意. 关键词:红外目标检测:阈值分割: