1.原理

选取阈值的一种方法就是图像直方图的视觉检测。选择 T 的另一个方法是反复实验,选取不同的阈值,直到观测者觉得产生了较好的结果为止,这在交互环境下特别有效。例如,这种方法允许 使用者通过 widget(图形控制)改变阈值,就像游标一样,可以立即看见结果。
        通常,在图像处理中首选的方法是使用一种能基于图像数据自动地选择阈值的算法,为了 自动选阈值。

2.迭代实现全局阈值处理

迭代过程:

(1) 针对全局阈值选择初始估计值 T。

(2) 用 T 分割图像。这会产生两组像素:G1 由所有灰度值大于 T 的像素组成,G2 由所有灰 度值小于等于 T 的像素组成。

(3) 分别计算 G1、G2 区域内的平均灰度值 m1 和 m2。

(4) 计算出新的阈值:

(5) 重复步骤(2)~(4),直到在连续的重复中,T 的差异比预先设定的参数△T 小为止。 (6) 使用函数im2bw分割图像:
    g = im2bw(f, T/den)
其中,den 是整数(例如一幅 8 比特图像的 255),是 T/den 比率为 1 的数值范围内的最大 值,正如函数 im2bw 要求的那样。
        在速度成为重要问题时,参数△T 用于控制迭代次数。通常,△T 越大,算法执行的迭代 次数越少。这可以得到证明,假如初始阈值在图像中的最大和最小灰度值之间选择(平均图像灰 度对 T 来说是不错的选择),那么算法在有限的步数内收敛。根据分割,在涉及物体和背景的直方图模式之间有相当清楚的谷的情况下,算法会工作得很好。

参考书上的内容,我在MATLAB上实现了这个部分的全局阈值处理,

迭代实现全局阈值处理部分代码:

%全局阈值
T=0.5*(min(f(:))+max(f(:)));
done=false;
while ~doneg=f>T;Tnext=0.5*(mean(f(g))+mean(f(~g)));done = abs(T-Tnext)<0.1;T=Tnext;
end
r=im2bw(f,T);

3.Otsu’s实现全局阈值处理

OTSU 法最早是由日本学者大津在 1979 年提出的,又叫最大类间方差法,是图像分割中自动阈值 选取的最佳算法。其基本的思想是在图像灰度差异的基础上,自动选取合适的阈值,将图像分为背景和目标两个部分。在执行 OTSU 算法时,选取的阈值应该尽可能增大,目标和背景的灰度差别才能更 有效地提取出裂纹区域。而衡量两部分差别的标准就是最大类间方差,通过划分后得到两类的类间方差最大值来确定最佳的阈值。

利用 OTSU 算法将待分割图像 f( x) 中的大面积背景去除,留下图像中想要的部分,这样在提图像纹边缘的时候,只需要分割出区域的边缘即可。

在matlab里有一个函数便可以完成最大类间方差.

Matlab中的graythresh函数

graythresh(image)函数输入是一副图像,在我做的图像的变化检测方向就是输入差异图(两幅图像对应位置做差或者做比,或者做对数比),输出就是阈值。在这个函数中,是使用最大类间方差法找到图片的一个合适的阈值(threshold)。再利用im2bw(将灰度图像转换为二值图像)函数,将找到的阈值输入,就可以把原图变为一个二值图。

因此大大减少了代码量。

参考书上的内容,我在MATLAB上实现了这个部分的全局阈值处理:

% Otsu’s实现全局阈值处理
[Th,SM]=graythresh(f);%阈值
s=im2bw(f,Th);

其中[T,SM]=graythresh(f)

在这里,f 是输入图像,T 是产生的阈值并被规一化到[0,1]中,SM 是可分性度量。正如前 面说明的那样,函数 im2bw 用来分割图像。
        这个 Otsu’s实现全局阈值处理与上一种迭代实现基本全局阈值处理算法得到的阈值几乎相同,因此可能是相同的分割结果。

4.运行结果

5.完整代码

clear all;
f=imread('图片4.png');
subplot(221);imshow(f);
title('原始图像');
f=rgb2gray(f);%转换为灰度图像
f=im2double(f);%数据类型转换%全局阈值
T=0.5*(min(f(:))+max(f(:)));
done=false;
while ~doneg=f>T;Tnext=0.5*(mean(f(g))+mean(f(~g)));done = abs(T-Tnext)<0.1;T=Tnext;
endr=im2bw(f,T);
subplot(222);imhist(f);title('直方图');subplot(223);imshow(r);
title('迭代法全局阈值分割');% Otsu’s实现全局阈值处理
[Th,SM]=graythresh(f);%阈值
s=im2bw(f,Th);
subplot(224);imshow(s);
title('全局阈值Otsu法阈值分割');

使用全局阈值进行灰度图像二值化相关推荐

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

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

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

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

  3. 【转】c#数字图像处理(二)彩色图像灰度化,灰度图像二值化

    转自:https://www.cnblogs.com/dearzhoubi/p/8571652.html 为加快处理速度,在图像处理算法中,往往需要把彩色图像转换为灰度图像,在灰度图像上得到验证的算法 ...

  4. (二)灰度图像二值化

    灰度图像二值化 一.知识简介 图像二值化( Image Binarization)就是将图像上的像素点的灰度值设置为0或255,也就是将整个图像呈现出明显的黑白效果的过程. 在数字图像处理中,二值图像 ...

  5. outs阈值化用来二值化图像

    从今天开始要认真学习opencv啦.研究生开学半个多学期了,突然觉得自己什么都没看,要认真学习,一点点去学opencv,把这些算法都是现一下.最近在看c++ primer,觉得比c++ primer ...

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

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

  7. opencv 图像分割 阈值分割 图像二值化 灰度图

    # -*- coding: utf-8 -*- """ @File : 191213_测试_阈值分割.py @Time : 2019/12/13 15:14 @Autho ...

  8. 3.6.1最大熵阈值分割寻找阈值实现图像二值化

    1 #include <opencv2/imgproc/imgproc.hpp> 2 #include <opencv2/core/core.hpp> 3 #include & ...

  9. 根据HSV阈值对图像二值化

    //蓝色的HSV范围int iLowH = 100;int iHighH = 124;int iLowS = 43;int iHighS = 255;int iLowV = 46;int iHighV ...

最新文章

  1. 基于OpenCV实战:提取中心线
  2. android常见面试问题
  3. (转) java 复制文件,不使用输出流复制,高效率,文件通道的方式复制文件
  4. asp.NET自定义服务器控件内部细节系列教程一
  5. Spark集群运行jar包程序里的print日志哪里去了?
  6. influx没有web_influxdb 安装及简单使用
  7. 【渝粤教育】国家开放大学2018年春季 3818-21T燃气工程施工 参考试题
  8. 12.万无一失:网站的高可用架构
  9. matlab如何求空间一点到直线距离,立体几何:如何用空间向量方法求点到直线的距离?...
  10. python 框选截图_python实现微信的区域截图功能
  11. 将solidworks建的机器人模型导入到ros中
  12. 大数据之Atlas元数据管理
  13. 非科班出身程序员该如何弥补技术差距?
  14. 又是白嫖Gitee的一天,PicGo+Gitee搭建图床,用过的都说真香!!!
  15. PC端、手机端在线预览文档组件react-file-viewer与npm构建内存溢出
  16. 磁珠和去耦电感的区别
  17. 页面版权声明©xx公司写法
  18. 【ACWing】2135. 马步距离(配数学证明)
  19. Splunklive!2018用户大会上海站落幕:探险家精神一览无遗!
  20. 终于放弃了单调的swagger-ui了,选择了这款神器—knife4j

热门文章

  1. 尾部相关性尾部风险价圣分
  2. 微信小程序:本地存储数据
  3. 图划分(Graph PartitionRe-ordering): METIS(5.x)ParMETIS(4.x)使用实践
  4. 基于arduino和openmv的智能小车设计制作流程
  5. SAP接口集成-PO/PI-SLD配置
  6. 【javascript】class的继承之super的使用
  7. JavaScript - 解析JSON
  8. 夜空中的守望者的目光
  9. 短文:U盘物理写保护原理
  10. ZooKeeper - 分布式锁