基本全局阈值处理

article/2025/9/19 12:37:16

基本全局阈值处理

1、全局阈值处理

(1)计算步骤

通常,在图像处理中首选的方法是使用一种能基于图像数据自动地选择阈值的算法,为了自动选阈值,下列迭代过程采用的就是这样的方法:
(1) 针对全局阈值选择初始估计值T。
(2) 用T 分割图像。这会产生两组像素:G1 由所有灰度值大于T 的像素组成,G2 由所有灰度值小于等于T 的像素组成。
(3) 分别计算G1G2 区域内的平均灰度值m1 m2
(4) 计算出新的阈值:


(5) 重复步骤(2)~(4),直到在连续的重复中,T 的差异比预先设定的参数△T 小为止。
(6) 使用函数im2bw 分割图像:

	g = im2bw(f, T/den)
其中,den 是整数(例如一幅8 比特图像的255),是T/den 比率为1 的数值范围内的最大值,正如函数im2bw 要求的那样。

(2)代码

%计算全局阈值
clc;
clear all;
close all;
f=imread('0.tif');
figure;imshow(f);title('原图像');	%显示原图像
%%
%全局阈值分割
count=0;
T=mean2(f);
done=false;
while ~done
    count=count+1;
    g=f>T;
    Tnext=0.5*(mean(f(g))+mean(f(~g)));
    done=abs(T-Tnext)<0.5;
    T=Tnext;
end
disp('count的值为:');
disp(['count=',num2str(count)])  %打印输出count的值
disp('T的值为:');
disp(['T=',num2str(T)])       %打印输出T的值
g=im2bw(f,T/255);
figure;subplot(2,2,1);imshow(f);title('原图像');
subplot(2,2,2);imhist(f);title('f直方图');
subplot(2,2,3);imshow(g);title('阈值后图像');

(3)结果

2、使用边缘改进全局阈值处理

(1)步骤

(1) 用任何方法计算来自f (x,y)的边缘图像。边缘图像可以是梯度或拉普拉斯的绝对值。
(2) 指定阈值T。
(3) 用来自步骤(2)的阈值对来自步骤(1)的图像进行阈值处理,产生一副二值图像gT(x,y)。这幅图像在步骤(4)中选择来自f (x,y)的对应于强边缘的像素并作为标记图像使用。
(4) 仅用f (x,y)中的像素计算直方图,对应gT(x,y)中1 值像素的位置。
(5) 用来自步骤(4)中的直方图,通过全局阈值方法(如Otsu's 方法)来分割f (x,y)。
通常,通过指定T 值(T 值与某个百分比对应)来典型地设置高值(例如90%),因此,在阈值计算中使用图像的边缘上没有多少像素。自定义函数percentile2i可用于这个目的。该函数计算灰度值I,I 对应指定的百分比。语法是:

		I = percentile2i(h, P)
其中,h 是图像的直方图,p 是在[0, 1]范围内的百分比值。输出I 是灰度级(也在[0, 1]范围内),对应第p 个百分点。

(2)代码

%计算全局阈值
clc;
clear all;
close all;
src=imread('a.tif');
figure;imshow(src);title('原图像');%显示原图像
%%
%计算梯度
f = tofloat(src);
sx = fspecial('sobel');
sy = sx';
gx = imfilter(f,sx,'replicate');
gy = imfilter(f,sy,'replicate');
grad = sqrt(gx.*gx + gy.*gy);
grad = grad/max(grad(:));
%%
%得到grad 的直方图,并使用高的百分比(99.9%)估计梯度的阈值
h = imhist(grad);
Q = percentile2i(h, 0.999);
%%
%用Q 对梯度做阈值处理,形成标记图像,并且从f 中提取梯度值比Q大的点,得到结果的直方图:
markerImage = grad > Q;
figure, imshow(markerImage) % Fig. 10.16(c).
fp = f.*markerImage;
figure, imshow(fp) % Fig. 10.16(d).
hp = imhist(fp);
%%
%用结果的直方图得到Otsu 阈值
hp(1) = 0;
bar(hp, 0) % Fig. 10.16(e).
T = otsuthresh(hp);
T*(numel(hp) - 1)
g = im2bw(f, T);
figure, imshow(g)

函数percentile2i定义

function I=percentile2i(h,P)
%PERCENTILE2I Computes an intensity value given a percentile.
% I=PERCENTILE2I(H,P) Given a percentile ,p,and a histogram,
% H, this function computes an intensity ,I representing 
% the Pth percentile and returns the value  in I. P must be in the 
% range [0,1] and I is returned as a value in the range [0,1] also.
% Example:
% I=percentile2i(h,0.5)

% Check value of P
if P<0 || P>1
    error('The percentile must be in the range [0,1].');
end

% Normalized the histogram to unit area.if it is already normalized
% the following computation has no effect.
h=h/sum(h);

% Camulative distribution
C=cumsum(h);
% Calculations.
idx=find(C >= P,1,'first');
% Subtract 1 from idx because indexing starts at 1,but intensities
% start at 0. Also ,normalize to the range [0,1].
I=(idx-1)/(numel(h)-1);

函数otsuthresh定义

function [T, SM] = otsuthresh(h)
%OTSUTHRESH Otsu's optimum threshold given a histogram.
% [T, SM] = OTSUTHRESH(H) computes an optimum threshold, T, in the
% range [0 1] using Otsu's method for a given a histogram, H.
% Normalize the histogram to unit area. If h is already normalized,
% the following operation has no effect.
h = h/sum(h);
h = h(:); % h must be a column vector for processing below.
% All the possible intensities represented in the histogram (256 for
% 8 bits). (i must be a column vector for processing below.)
i = (1:numel(h))';
% Values of P1 for all values of k.
P1 = cumsum(h);
% Values of the mean for all values of k.
m = cumsum(i.*h);
% The image mean.
mG = m(end);
% The between-class variance.
sigSquared = ((mG*P1 - m).^2)./(P1.*(1 - P1) + eps);
% Find the maximum of sigSquared. The index where the max occurs is
% the optimum threshold. There may be several contiguous max values.
% Average them to obtain the final threshold.
maxSigsq = max(sigSquared);
T = mean(find(sigSquared == maxSigsq));
% Normalized to range [0 1]. 1 is subtracted because MATLAB indexing
% starts at 1, but image intensities start at 0.
T = (T - 1)/(numel(h) - 1);
% Separability measure.
SM = maxSigsq / (sum(((i - mG).^2) .* h) + eps);

(3)结果


3、用拉普拉斯边缘信息改进全局阈值处理

(1)代码

%
clc;
clear all;
close all;
src=imread('b.tif');
figure;imshow(src);title('原图像');%显示原图像
%%
%
f = tofloat(src);
imhist(f) 		% 图像直方图
hf = imhist(f);
[Tf SMf] = graythresh(f);
gf = im2bw(f, Tf);      
figure, imshow(gf) 	% 显示阈值图像.
%%
w = [-1 -1 -1; -1 8 -1; -1 -1 -1];
lap = abs(imfilter(f, w, 'replicate')); 
lap = lap/max(lap(:));
h = imhist(lap);
Q = percentile2i(h, 0.995);
markerImage = lap > Q;
fp = f.*markerImage;
figure, imshow(fp) 
hp = imhist(fp);
hp(1) = 0;
figure, bar(hp, 0)
T = otsuthresh(hp);
g = im2bw(f, T);
figure, imshow(g) 

(2)结果




http://chatgpt.dhexx.cn/article/1iQUSIuD.shtml

相关文章

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

前言 图像阈值处理在图像分割中处于核心地位&#xff01;本节将重点介绍一些常见的阈值处理方法。 一、基本的全局阈值处理 选取阈值往往是通过直方图来选择的&#xff0c;一方面我们可以人为的设置一个阈值进行一次二值化处理达到全局阈值处理的目的&#xff0c;但这样的阈值…

阈值调整

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.双击…