使用全局阈值进行灰度图像二值化

2023-05-16

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 ~done
	g=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 ~done
    g=f>T;
    Tnext=0.5*(mean(f(g))+mean(f(~g)));
    done = abs(T-Tnext)<0.1;
    T=Tnext;
end
 
 
r=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法阈值分割');

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用全局阈值进行灰度图像二值化 的相关文章

随机推荐

  • shell脚本----基础命令sort-tr-uniq-cut-split-paste-eval

    文章目录 一 sort命令二 uniq命令三 tr命令四 cut命令五 split命令六 paste命令七 eval命令 一 sort命令 sort命令以行为单位对文件内容进行排序 xff0c 也可以根据不同的数据类型来排序 xff0c 比
  • 树莓派开发

    树莓派等芯片带操作系统的启动过程 C51 STM32 裸机 C直接操控底层寄存器实现相关业务 业务流程型的裸机代码 遥控灯 xff1a while 1 垃圾桶 xff1a WemosD1 LOOP 恩智浦智能车 xff1a stm32 X8
  • strtok用法详解

    字符串操作函数strtok用法 xff1a char strtok xff08 char src xff0c char split xff09 xff1b 函数参数 xff1a src xff1a 被分割的字符串 split xff1a 分
  • wget--linux命令使用说明

    xfeff xfeff wget是一个从网络上自动下载文件的自由工具 它支持HTTP xff0c HTTPS和FTP协议 xff0c 可以使用HTTP代理 所谓的自动下载是指 xff0c wget可以在用户退出系统的之后在后台执行 这意味这
  • PDU 发送短信4

    pdu 编码主要包括两个主要的部分 xff0c 一是 pdu 串的整体数据格式 xff0c 分别因为发送信息串和接收信息串而有区别 xff0c 二是 pdu 中文本部分的编码 xff0c 分别因为字符集而不同 我们也可以这样来理解这个 pd
  • Docker

    一 Docker简介 1 是什么 xff1f 解决了运行环境和配置问题软件容器 方便做持续集成并有助于整体发布的容器虚拟化技术 一次构建到处运行 2 能干嘛 linux虚拟机的缺点 xff1a 1 资源占用多 2 冗余步骤多 3 启动慢 L
  • VNC树莓派无法连接

    问题 xff1a 树莓派配置好VNC后 xff0c 第二次通过笔记本远程连接失败 xff0c 报错refused by the computer 解决方法 xff1a 在putty中输入IP地址登录树莓派 xff0c 输入vncserver
  • 如何利用GitHub发布个人网站

    如何利用gihub发布个人网站让所有人都可以浏览 发布步骤 发布步骤 进入github xff0c 点击Create repository创建一个仓库 建立自己的仓库 点击uploading an existing file上传一个已有文件
  • 直接插入排序(C语言)[测试数据随机生成+计算程序运行时间+算法效率分析]

    直接插入排序 xff0c 使用C语言实现 这里为了方便测试面对大量数据时直接插入排序算法的运行时间 xff0c 通过宏定义来设定生成随机数的数量 xff08 即参与排序的数据数量 xff09 xff0c 利用rand 函数生成随机数 xff
  • docker Kubernetes(k8s)部署

    文章目录 一 准备工作二 初始化集群然后在server2中然后在server1中再然后在server2中在server1中然后在server2中在server3和server4中 一 准备工作 把server2和server3 xff0c
  • LQR的理解与运用 第一期——理解篇

    目录标题 0 本系列目的理解六个问题 运用一阶倒立摆matlab 43 simscape multibody实现 简单的轮足模型 xff08 二阶倒立摆 xff09 1 理解LQR写在前面Q1 LQR控制的是什么Q2 LQR的适用场景与形式
  • LQR的理解与运用 第二期——一阶倒立摆在matlab上的LQR实现

    目录标题 0 本系列目的参考教程 1 理解2 运用在solidworks上创建一阶倒立摆模型并导出一阶倒立摆的模型及物理公式推导模型介绍模型推导模型推导方法化简方法结论 根据模型求LQR的K值matlab仿真的实现流程与步骤准备步骤正确导入
  • tensorflow张量和numpy数组相互转换

    知识补充 xff1a 官方文档 xff08 GItHub xff09 xff1a TensorFlow 2 0 Functions not Sessions tensorflow2 x的转换模块 64 tf function 关于图执行 x
  • 猿创征文|【电源专题】案例:怎么用万用表测试静态电流IQ

    目录 nbsp nbsp nbsp nbsp 静态电流在生活中的例子 nbsp nbsp nbsp nbsp 什么是静态电流IQ 关断电流 非开关静态电流 lt
  • IDEA找不到Maven插件原因及解决办法

    IDEA找不到Maven插件原因及解决办法 报错如下 xff0c 因为我自己的报错解决了 xff0c 所以借用了别人的图 xff0c 侵删 在idea中你会发现明明在pom xml中加入了插件但依然会报错 xff0c 并且不会下载 解决办法
  • linux系统用户自动登陆不需要输入密码设置

    使用于ubuntu linux unix 一 删除密码 root 64 ubuntu passwd d root 或者 passwd root d 二 修改sshd config文件 root 64 ubuntu cd etc ssh ro
  • 新建springboot项目报错

    未能配置数据源 xff1a url 属性未指定 xff0c 无法配置嵌入式数据源 原因 xff1a 无法确定合适的驱动程序类别 如果您想要一个嵌入式数据库 xff08 H2 HSQL或Derby xff09 xff0c 请将其放在类路径上
  • 伪分布搭建hadoop

    伪分布式搭建hadoop 伪分布模式准备工作以root权限修改ip xff0c 配置关网等修改完IP地址后 xff0c 需要重启网络服务查看ip和是否能ping通修改主机名修改域名映射文件关闭防火墙ssh免密登陆 安装JDK卸载之前的JDK
  • Java实现AI机器人聊天

    文章目录 前言一 账号注册申请密钥二 参数详情三 Java集成1 调用接口2 响应数据 四 效果总结 前言 OpenAI API 几乎可以应用于任何涉及理解或生成自然语言或实现代码等场景 提供一系列具有不同学习训练的模型 xff0c 适用于
  • 使用全局阈值进行灰度图像二值化

    1 原理 选取阈值的一种方法就是图像直方图的视觉检测 选择 T 的另一个方法是反复实验 xff0c 选取不同的阈值 xff0c 直到观测者觉得产生了较好的结果为止 xff0c 这在交互环境下特别有效 例如 xff0c 这种方法允许 使用者通