基本的全局阈值处理Otsu方法进行最佳全局阈值处理

article/2025/9/19 13:31:49

前言

图像阈值处理在图像分割中处于核心地位!本节将重点介绍一些常见的阈值处理方法。

 

一、基本的全局阈值处理

选取阈值往往是通过直方图来选择的,一方面我们可以人为的设置一个阈值进行一次二值化处理达到全局阈值处理的目的,但这样的阈值处理往往效果并不好;另一方面我们也可以先人为的设置一个阈值,之后通过迭代的方法得到最合适的阈值再进行二值化处理,这种方法显然比前者要更加适合。

二、使用步骤

1.为全局阈值选择一个初始值T(通常我们选择矩阵的均值作为初始值)

2.使用T分割图像,产生两组像素:所有的灰度值均大于T的像素组G1以及所有的灰度值均小于T的像素组G2。

3.分别计算G1和G2中像素的平均灰度值m1,m2

4.令T=(m1+m2)/2

5.重复步骤234直到得到的相邻的T的差值小于预定义的▲T值为止

6.使用imb2bw进行图像分割,若为8比特图像则应采用T/255

三、代码及工作区展示

I1=imread('zhiwen.tif');
count=0;
T=mean2(I1);%求矩阵的均值
done =false;
%以下为迭代过程
while ~donecount=count+1;g=I1>T;Tnext=0.5*(mean(I1(g))+mean(I1(~g)));%分别计算两个区域各自的像素的灰度平均值done =abs(T-Tnext)<0.5;%设置预定义值为0.5T=Tnext;
end
g=im2bw(I1,T/255);%图像为8比特
subplot(131),imshow(I1),title('原图');
subplot(132),imhist(I1),title('原图直方图');
subplot(133),imshow(g),title('全局阈值分割图');

 

 

 

四、结果展示及分析

根据图像结果可以看到最终得到的全局阈值处理图像相较于原本图像对比度更加明显,也更加清晰,阈值处理达到了预期效果。

根据工作区我们可以看到最终T=160.0102,count=4,这证明我们一共进行了四次迭代才满足了预定义值0.5,最终的T值在直方图中来看确实将两个峰值左右分开,如果采用肉眼观察直接确定几乎是不可能取到这么合适的值的。

五、Otsu方法进行最佳全局阈值处理

在原图的直方图分布并没有显著的波谷,或者说仅存在一波峰甚至没有波峰时,采用上述的方法进行迭代分类效果并不理想,这个时候我们可以采用Otsu方法进行最佳全局阈值处理。Otsu方法采用了类间方差最大化的思想,也就是说方差越大,越接近于正确分割图像的阈值,而这种最佳测度完全基于直接由图像直方图得到的参数。

使用matlab中的工具箱函数graythresh可以实现Otsu方法进行最佳全局阈值处理,语法为:

                                                                                                                                   [T,SM]=graythresh(f)

其中f是输入的原图,T就是我们希望得到的阈值,SM是可分性测度。最后我们仍然采用im2bw进行图像分割。

六、代码展示

I1=imread('cell.tif');
%使用Otsu方法分割图像
[T,SM]=graythresh(I1);%采用Otsu方法得到阈值T
I2=im2bw(I1,T);%按照给定的阈值T进行图像分割
subplot(221),imshow(I1),title('原图');
subplot(222),imhist(I1),title('原图直方图');
subplot(223),imshow(I2),title('Otsu方法阈值图');%使用基于全局阈值处理
count=1;
T=mean2(I1);
done=false;
while ~donecount=count+1;g=I1>T;Tnext=0.5*(mean(I1(g))+mean(I1(~g)));done=abs(T-Tnext)<0.05;T=Tnext;
end
I3=im2bw(I1,T/255);
subplot(224),imshow(I3),title('基于全局的阈值处理图');

在这里我们对同样一幅图像分别进行了基于全局的阈值处理和Otsu方法的最佳全局阈值处理进行比较。

七、结果展示及分析

可以看到Otsu方法的分割明显要优于基本的全局阈值处理,Otsu方法成功地将细胞边界分割了出来,实现了图像分割的预定目标。

根据图像直方图我们可以发现,在没有明显的波谷时,采用基本的全局阈值处理并不能得到预想的图像分割效果,这是因为阈值T不能通过迭代很好的确定导致的,这时我们就要采用Otsu方法进行图像分割。


总结

阈值处理在图像分割中占有非常重要的地位,一般而言我们可以选择的阈值处理方式有两种,分别是基本的全局阈值处理和利用Otsu方法进行最佳全局阈值处理。前者采用了迭代的思想进行阈值处理,后者则利用了方差最大化的思想进行处理。当图像直方图中具有明显的波谷或者说波峰之间的分界十分明显时,采用基本的全局阈值处理往往可以很好的解决问题;但是如果直方图不能满足上述需求,则应采用Otsu方法进行最佳的全局阈值处理。


http://chatgpt.dhexx.cn/article/IdmPphDm.shtml

相关文章

阈值调整

1.不平衡分类问题的阈值调整 如上图所示&#xff0c;正负例样本不平衡&#xff0c;负样本多&#xff0c;分类器就会更容易把图片分成负样本&#xff0c;因此要设置阈值&#xff0c; 如何选择阈值&#xff1a; 1.ROC曲线上的最优阈值 2.PR曲线上的最优阈值

神经网络阈值是什么意思,神经网络阈值如何确定

BP神经网络中初始权值和阈值的设定 1、首先需要了解BP神经网络是一种多层前馈网络。2、以看一下在matlab中BP神经网络的训练函数&#xff0c;有梯度下降法traingd,弹性梯度下降法trainrp&#xff0c;自适应lr梯度下降法traingda等。 3、在matlab中命令行窗口中定义输入P&…

图像的阈值处理

一般情况下&#xff0c;一张图片分为前景和背景&#xff0c;我们感兴趣的一般的是前景部分&#xff0c;所以我们一般使用阈值将前景和背景分割开来&#xff0c;使我们感兴趣的图像的像素值为1&#xff0c;不感兴趣的我0&#xff0c;有时一张图我们会有几个不同的感兴趣区域&…

神经网络阈值是什么意思,神经网络的权值和阈值

神经网络权值怎么确定&#xff1f; 神经网络的权值是通过对网络的训练得到的。如果使用MATLAB的话不要自己设定&#xff0c;newff之后会自动赋值。也可以手动&#xff1a;{};{}。一般来说输入归一化&#xff0c;那么w和b取0-1的随机数就行。 神经网络的权值确定的目的是为了让…

opencv c++ 二值图像、阈值计算方法、全局阈值、自适应阈值

1、图像定义&#xff1a; 彩色图像 &#xff1a;三通道&#xff0c;像素值一般为0~255&#xff1b; 灰度图像&#xff1a;单通道&#xff0c;像素值一般为0~255&#xff1b; 二值图像&#xff1a;单通道&#xff0c;像素值一般为0&#xff08;黑色&#xff09;、255&#xff08…

图像分割 - 阈值处理 - 全局阈值处理

目录 1. 介绍 2. 代码实现 3. 代码讲解 1. 介绍 当目标和背景像素的灰度分布非常不同的时候&#xff0c;可以对整个图像使用全局阈值 在大多数的应用中&#xff0c;图像之间通常存在足够的变化&#xff0c;全局阈值是一种合适的办法。所以&#xff0c;需要一种对图像做阈值…

硬阈值 软阈值

1 定义 1.1 硬阈值 硬阈值的定义如下&#xff1a; 相当于 1.2 软阈值 软阈值的定义如下&#xff1a; 相当于 1.3 二者对比&#xff08;可视化解释&#xff09; 这是一张很经典地表述软阈值和硬阈值区别的图&#xff0c;其中软阈值是蓝色的线&#xff0c;他没有突变&#xff1…

神经网络阈值是什么意思,神经网络阈值怎么设置

BP神经网络中初始权值和阈值的设定 1、首先需要了解BP神经网络是一种多层前馈网络。2、以看一下在matlab中BP神经网络的训练函数&#xff0c;有梯度下降法traingd,弹性梯度下降法trainrp&#xff0c;自适应lr梯度下降法traingda等。 3、在matlab中命令行窗口中定义输入P&…

图像处理--阈值处理

图像二值化 图像二值化就是将图像上的像素点的灰度值设置为两个值&#xff0c;一般为0&#xff08;表示黑色&#xff09;和255&#xff08;表示白色&#xff09;&#xff0c;可以将整个图像呈现出明显的黑白效果。 最常用的方法就是先将图像灰度处理&#xff0c;然后设定一个阈…

两种划分阈值的方法

风险等级划分的时候可以降低主观性的一些系统方法 方法一&#xff1a;分层聚类法 凝聚层次聚类/分裂层次聚类 重点&#xff1a;确定层次聚类的簇数&#xff0c;画出树状图&#xff0c;基本就能得到你的区间范围&#xff0c;但数据量大的时候还是得再用代码跑 方法二&#xf…

“阀值”与“阈值”的区别

真相请看下图红色框里内容&#xff08;手动微笑&#xff09; 啥&#xff1f;&#xff1f;你跟我说没看懂&#xff0c;好吧&#xff0c;说的再明白点&#xff0c;“阀&#xff08;f&#xff09;值”是一个错误的用词&#xff0c;其正确用法是“阈&#xff08;y&#xff09;值”。…

【p116】

#查询score表中为196004&#xff0c;课程号为1201的学生成绩 #查询student表中姓周的学生情况 #查询数学成绩第2~5名的信息 #查询通信专业最高分的学生的情况 #查询1004课程的最高分,最低分&#xff0c;平均成绩 #查询至少有3名学生选修且以4开头的课程号和平均分数 #将计算机专…

《JDK学习》使用JDK的keytool生成p12证书

由于前段时间在研究itext技术中的签章技术中遇到了数字签名的问题&#xff0c;需要用到p12证书&#xff0c;因此就撰写一篇用我们jdk自带的keytool 工具生成p12证书的方法供各位交流。 keytool 简介 keytool 是java 用于管理密钥和证书的工具. 其功能包括&#xff1a; 创建并管…

日志 P11,P12

日志&#xff1a; 复制一个04.内容与03是一样的. 标准日志文件&#xff1a; 在mybatis-config.xml中写入setting设置&#xff0c;配置日志文件&#xff08;注意setting只能放在properties与typeAliases的中间&#xff09;。 setting中参数的内容可以在mybatis官方文档查找。…

xcode ios 怎么导入p12证书

注意&#xff1a;在哪台电脑上生成的根证书才能在哪台电脑上导出p12&#xff0c;在另外的电脑上是没有导出p12的选项的&#xff08;或者是灰的点不了&#xff09; 1.双击p12文件&#xff0c;将其导入到钥匙串&#xff0c;或者直接把p12文件拖入到钥匙串里 2.如下图&#xff0c;…

iOS证书(.p12)和描述文件(.mobileprovision)申请

原文链接 : iOS证书(.p12)和描述文件(.mobileprovision)申请 如果你从事过iOS开发&#xff0c;大概都会了解到iOS有两种证书和描述文件&#xff1a; 证书类型使用场景开发(Development)证书和描述文件用于开发测试&#xff0c;在 HBuilderX 中打包后可在真机环境调试发布(Dist…

java工具keytool生成p12数字证书文件

最近做毕设的时候需要用到数字证书&#xff0c;于是就用java来生成 Keytool是用于管理和证书的工具&#xff0c;位于%JAVA_HOME%/bin目录** 首选找到keytool.exe 然后在上面的路径显示框中输入CMD&#xff0c;然后回车 进入后输入以下代码 keytool -genkeypair -alias serv…

P12:Sequential的使用

1、CIFAR10 model的结构&#xff1a; 2、定义网络&#xff1a; class Tudui(nn.Module):def __init__(self):super(Tudui, self).__init__()self.conv1 Conv2d(3, 32, 5, stride1, padding2)self.maxpool1 MaxPool2d(kernel_size2)self.conv2 Conv2d(32, 32, kernel_size5,…

仅使用p12文件和mobileprovision文件打包

前言&#xff1a;iOS发展到现在&#xff0c;必须使用开发者账号才能运行&#xff0c;打包&#xff1b;但有时候跟别人合作开发&#xff0c;别人不会把开发者账号密码给你&#xff0c;只给了一个P12证书和mobileprovision描述文件(如下图) 我们需要利用这两个文件打包。 1.双击…

P12 JWindow 窗口

P12 JWindow 窗口 1.概述2.JWindow 代码实例3.效果演示4.实现鼠标拖动 JWindow 窗口5.效果演示 系统&#xff1a;Win10 Java&#xff1a;1.8.0_333 IDEA&#xff1a;2020.3.4 Gitee&#xff1a;https://gitee.com/lijinjiang01/JavaSwing 1.概述 JWindow&#xff1a;一个容器&…