1、描述:

  此方法实用于具有明显双峰直方图的图像,其寻找双峰的谷底作为阈值,但是该方法不一定能获得阈值,对于那些具有平坦的直方图或单峰图像,该方法不合适。

  2、实现过程:

  该函数的实现是一个迭代的过程,每次处理前对直方图数据进行判断,看其是否已经是一个双峰的直方图,如果不是,则对直方图数据进行半径为1(窗口大小为3)的平滑,如果迭代了一定的数量比如1000次后仍未获得一个双峰的直方图,则函数执行失败,如成功获得,则最终阈值取两个双峰之间的谷底值作为阈值。

注意在编码过程中,平滑的处理需要当前像素之前的信息,因此需要对平滑前的数据进行一个备份。另外,首数据类型精度限制,不应用整形的直方图数据,必须转换为浮点类型数据来进行处理,否则得不到正确的结果。

3、实现代码:

     int GetMinimumThreshold(int* HistGram)
     {int Y, Iter = 0;double *HistGramC = new double[256];           // 基于精度问题,一定要用浮点数来处理,否则得不到正确的结果double *HistGramCC = new double[256];          // 求均值的过程会破坏前面的数据,因此需要两份数据for (Y = 0; Y < 256; Y++){HistGramC[Y] = HistGram[Y];HistGramCC[Y] = HistGram[Y];}// 通过三点求均值来平滑直方图while (IsDimodal(HistGramCC) == false)                                        // 判断是否已经是双峰的图像了
        {HistGramCC[0] = (HistGramC[0] + HistGramC[0] + HistGramC[1]) / 3;                 // 第一点for (Y = 1; Y < 255; Y++)HistGramCC[Y] = (HistGramC[Y - 1] + HistGramC[Y] + HistGramC[Y + 1]) / 3;     // 中间的点HistGramCC[255] = (HistGramC[254] + HistGramC[255] + HistGramC[255]) / 3;         // 最后一点System.Buffer.BlockCopy(HistGramCC, 0, HistGramC, 0, 256 * sizeof(double));Iter++;if (Iter >= 1000) return -1;                                                   // 直方图无法平滑为双峰的,返回错误代码
        }// 阈值极为两峰之间的最小值 bool Peakfound = false;for (Y = 1; Y < 255; Y++){if (HistGramCC[Y - 1] < HistGramCC[Y] && HistGramCC[Y + 1] < HistGramCC[Y]) Peakfound = true;if (Peakfound == true && HistGramCC[Y - 1] >= HistGramCC[Y] && HistGramCC[Y + 1] >= HistGramCC[Y])return Y - 1;}return -1;}

  其中IsDimodal函数为判断直方图是否是双峰的函数,代码如下:

   bool IsDimodal(double* HistGram)       // 检测直方图是否为双峰的
    {// 对直方图的峰进行计数,只有峰数位2才为双峰 int Count = 0;for (int Y = 1; Y < 255; Y++){if (HistGram[Y - 1] < HistGram[Y] && HistGram[Y + 1] < HistGram[Y]){Count++;if (Count > 2) return false;}}if (Count == 2)return true;elsereturn false;}

基于直方图的图像全局二值化算法原理、实现--基于谷底最小值的阈值相关推荐

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

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

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

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

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

    图像二值化的目的是最大限度的将图象中感兴趣的部分保留下来,在很多情况下,也是进行图像分析.特征提取与模式识别之前的必要的图像预处理过程.这个看似简单的问题,在过去的四十年里受到国内外学者的广泛关注,产 ...

  4. matlab最小分类错误全局二值化算法

    转自:http://download.csdn.net/detail/hupeng810/1511870 function imagBW = kittlerMet(imag) % KITTLERMET ...

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

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

  6. matlab确定灰度阈值T,matlab灰度图像二值化【灰度图像二值化算法研究】

    摘要: 在很多图像处理的过程中,经常需要对灰度图像进行二值化.本文对几种常用的图像二值化算法进行了阐述,并通过仿真,进行比较研究.根据实验结果,阐明了各种算法的优缺点. Abstract: The b ...

  7. C#,图像二值化(12)——基于谷底最小值的全局阈值算法(Valley-Minium Thresholding)与源代码

    1.基于谷底最小值的阈值 这个方法适用于通过有限的迭代次数,平滑后能得到双峰的图像,让双峰的谷底成为阈值.当执行完基于谷底最小值的阈值操作的时候,改变了直方图信息,使之成为处理过后的直方图信息,这时候 ...

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

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

  9. 利用Python实现图像的二值化

    目录 1.全局阈值法 1.1主要函数: 1.2全局阈值的代码实现 1.3特点 2.自适应阈值法 2.1主要函数: 2.2实现代码: 2.3特点: 3.OTSU二值化(最大类间方差法) 3.1实现代码: ...

最新文章

  1. Android Chromium WebView Crash
  2. UIRefreshControl使用总结
  3. python——json数据
  4. php源码安装空白,源代码安装完成后,页面一片空白?
  5. 第十三期:你不想错过的那些JSON工具
  6. AOP面向切面编程 淘宝京东网络处理
  7. 入行Java能做什么?亿级畅销书作者李刚在线解答!
  8. 杀戮尖塔 地图生成器参考
  9. 程序员的自我修养(雾)
  10. 一篇文章搞懂 Hadoop RPC 到底是什么
  11. 一阶电路暂态响应的结果分析。_【技术】关于开关电源的分析、计算、仿真
  12. Linux系统打印机打印乱码,Linux输入中文乱码问题(亲测有效)
  13. 我不喜欢代码,却为何坚持做程序员?
  14. 什么是虚拟机,有什么用?
  15. C++中继承 —— 继承的概念及定义
  16. Python 下载视频出错 you-get: [error] oops, something went wrong.
  17. 计算机tcpip网络原理与应用,清华大学出版社-图书详情-《TCP/IP网络编程原理与技术》...
  18. Unity UGUI图集打包与动态使用(TexturePacker)
  19. C# 文本转语音朗读
  20. 黑马程序员--Objective-C之--自动释放池的概念以及使用

热门文章

  1. 在北邮做《开源中国说》演讲
  2. 人对光波的三种特性_光线的三种特性——玩转光线的基础知识
  3. 好用合并工具安利!需要的来关注一下
  4. Android开发之自定义View之音阶图谱
  5. 老爷爷与小孙孙的一次对话
  6. 共享自习室无人自习室源码
  7. 什么是外键约束?外键约束下的多表操作是什么?
  8. 傻傻分不清楚的研究设计类型
  9. ubuntu18.0404 aws 云服务器启动和登陆 windows 虚拟机
  10. SQL SERVER数据库表删除恢复