1、基于谷底最小值的阈值

这个方法适用于通过有限的迭代次数,平滑后能得到双峰的图像,让双峰的谷底成为阈值。当执行完基于谷底最小值的阈值操作的时候,改变了直方图信息,使之成为处理过后的直方图信息,这时候显示Doc里的数据没有问题,可是在直方图类里画图的时候却出现了这个错误。问题解决了,出现的原因是在不恰当的地方获取了数据。

A location is considered to have valley bottom flatness at a given scale if it is sufficiently low and flat at that scale and is sufficiently flat (but not necessarily low) at all finer scales. The different index values correspond to different resolutions and different slope thresholds.

(1) 描述:

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

(2) 实现过程:

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

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

2、基于谷底最小值的阈值的源程序

二值算法综述请阅读:

C#,图像二值化(01)——二值化算法综述与二十三种算法目录https://blog.csdn.net/beijinghorn/article/details/128425225?spm=1001.2014.3001.5502

支持函数请阅读:

C#,图像二值化(02)——用于图像二值化处理的一些基本图像处理函数之C#源代码https://blog.csdn.net/beijinghorn/article/details/128425984?spm=1001.2014.3001.5502

using System;
using System.Linq;
using System.Text;
using System.Drawing;
using System.Collections;
using System.Collections.Generic;
using System.Drawing.Imaging;namespace Legalsoft.Truffer.ImageTools
{public static partial class BinarizationHelper{#region 灰度图像二值化 全局算法 谷底最小值的阈值/// <summary>/// 基于谷底最小值的阈值/// </summary>/// <param name="histogram"></param>/// <returns></returns>public static int Valley_Bottom_Threshold(int[] histogram){double[] HistGramC = Histogram_To_Float(histogram);double[] HistGramCC = Histogram_To_Float(histogram);int Iter = 0;while (Is_Dimodal_Histogram(HistGramCC) == false){HistGramCC[0] = (HistGramC[0] + HistGramC[0] + HistGramC[1]) / 3;for (int i = 1; i < 255; i++){HistGramCC[i] = (HistGramC[i - 1] + HistGramC[i] + HistGramC[i + 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 (int i = 1; i < 255; i++){if (HistGramCC[i - 1] < HistGramCC[i] && HistGramCC[i + 1] < HistGramCC[i]){Peakfound = true;}if (Peakfound == true && HistGramCC[i - 1] >= HistGramCC[i] && HistGramCC[i + 1] >= HistGramCC[i]){return (i - 1);}}return -1;}/// <summary>/// 检测直方图是否为双峰的/// </summary>/// <param name="histogram"></param>/// <returns></returns>private static bool Is_Dimodal_Histogram(double[] histogram){int count = 0;for (int i = 1; i < 255; i++){if (histogram[i - 1] < histogram[i] && histogram[i + 1] < histogram[i]){count++;if (count > 2){return false;}}}return (count == 2);}public static void Valley_Bottom_Algorithm(byte[,] data){int[] histogram = Gray_Histogram(data);int threshold = Valley_Bottom_Threshold(histogram);Threshold_Algorithm(data, threshold);}#endregion}
}

3、基于谷底最小值的阈值的计算结果

POWER BY TRUFFER.CN

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

  1. MATLAB图像二值化函数im2bw与imbinarize对给定阈值的内部处理细节

    MATLAB图像处理工具包中的im2bw函数和imbinarize函数均可以实现灰度图像的二值化功能,且在MATLAB R2018a之后推荐使用imbinarize.但两者在内部处理图像的时候具有一些 ...

  2. python将灰度图像二值化_python实现图像二值化

    1.什么是图像二值化 彩色图像: 有blue,green,red三个通道,取值范围均为0-255 灰度图:只有一个通道0-255,所以一共有256种颜色 二值图像:只有两种颜色,黑色和白色,二值化就是 ...

  3. 基于阈值的图像二值化方法MATLAB

    文章目录 一.目录 二.摘要 三.实验步骤 3.1 固定阈值法 (1)计算均值和方差 (2)绘制和分析高斯分布图像 (3)以128为阈值进行固定阈值分割 (4)观察灰度直方图选择最优固定阈值 3.2 ...

  4. 【医学图像处理】 2 灰度直方图、图像二值化(阈值分割)

    文章目录 1 灰度直方图 1.1 直方图理解 1.2 直方图计算 1.3 直方图均衡化 1.3.1 全局均衡化 1.3.2 自适应(局部)均值化 2 图像二值化(阈值分割) 2.1 二值化理解 2.2 ...

  5. 图像二值化处理(全局阈值 自适应阈值 手动阈值操作以及直方图画法)

    文章目录 图像二值化处理 二值化原理 API介绍 手动设置阈值 均值法 迭代法 自动设置阈值 直方图法 全局阈值法 OTSU法 三角形法 自适应阈值法 API 绘制图像直方图 图像二值化处理 二值化原 ...

  6. 基于ImagePy工具的岩块图像二值化分割研究

    看到自己一年前在知乎提的问题了,忍不住回答下. 下面这个是论文录用后修改稿,文末有编辑的评语. 基于ImagePy工具的岩块图像二值化分割研究 摘 要:在岩块图像分析识别前的预处理工作中,为了平滑岩块 ...

  7. Python使用openCV把原始彩色图像转化为灰度图、使用OpenCV把图像二值化(仅仅包含黑色和白色的简化版本)、基于自适应阈值预处理(adaptive thresholding)方法

    Python使用openCV把原始彩色图像转化为灰度图.使用OpenCV把图像二值化(仅仅包含黑色和白色的简化版本).基于自适应阈值预处理(adaptive thresholding)方法 目录

  8. OpenCv之图像二值化(笔记12)

    # 图像处理中,Thresholding中文翻译过来叫二值化或者阈值化.二值化就是把图片转换成只有white赫尔black这俩种颜色.通过Thresholding,可以让图片中感兴趣 # 的颜色编程主 ...

  9. 基于python的图像二值化处理(opencv)

    图像二值化处理 (python-opencv) 二值化 图像的二值化,在图像处理中是十分重要的一个步骤.是几乎所有后续的图像处理的基础和前提.只有根据不同场景选择不同的二值化处理,才能对一幅图片较好的 ...

最新文章

  1. Java垃圾回收之老年代垃圾收集器
  2. Windows系统下MySQL安装详细教程(解决MySQL服务无法启动)
  3. LeetCode 1119. Remove Vowels from a String--C++,Java,Python解法
  4. VB.NET 委托处理 传递参数
  5. 推荐五星级C语言学习网站
  6. asp.net 调用苹果摄像头扫描条码_苹果刚刚发布了近两年最值得买的 iPhone
  7. SLB vs CLB
  8. 2020年快手校招JAVA岗笔试第一题
  9. ios开发 静音键设置_合肥包河区:连夜设置三道拦水坝只为按下中考“静音键”...
  10. P1616 疯狂的采药(洛谷,动态规划递推,完全背包)
  11. centos 6.5 安装 lamp 后mysql不能启动_CentOS 6.5 系统 LAMP(Apache+MySQL+PHP)安装步骤
  12. Objective-C Runtime 运行时与类的内部构造
  13. java大数据组件HBase
  14. sae中使用django migrate导致13013的问题
  15. Hadoop 实现kmeans 算法
  16. Python爬取豆瓣电影
  17. 【海量地图图源合集】教你如何一键获取150+高清卫星影像、电子地图、地质图、DEM等地图图源
  18. java 网吧计费系统_java网吧计费管理系统
  19. 计算机Word2010在线做题,Word2010试题练习题库(答案).doc
  20. py笔记.字典的使用

热门文章

  1. redis 和 memcached
  2. java web二手书店,基于jsp的二手书交易-JavaEE实现二手书交易 - java项目源码
  3. MIT-BIH 心律失常数据库介绍
  4. ViewState 数据太大影响性能导致页面报错
  5. 「软件测试4」一文详解四大典型的白盒测试方法
  6. AVA 代码覆盖率工具 JaCoCo-实践篇
  7. 涨跌停计算器_在线涨跌计算器
  8. 网上说的神乎其神的python到底怎么样?值不值得小白学习?
  9. 【MySQL基础教程】DML语句详细介绍
  10. 数据结构考研笔记(十五)——图的存储结构邻接矩阵、邻接表、十字链表、临界多重表的概念