图像阈值分割是一个非常简单的算法。
对图像像素点,大于阈值,则认为是目标;小于阈值,则认为是背景。
而现在遇到的阈值分割却需要完成如下的多个功能:
1、基本的阈值分割:
大于阈值,则认为是目标;小于,则认为是背景
2、像素值较低才被认为是目标,即要把不等号反向
对图像像素点,小于阈值,认为是目标;大于阈值,则认为是背景。
3、可能进行阈值分割的图像只是标记图像
对标记图像进行分割后,需要在原始的图像上对分割的目标区域进行展示
这就需要输入原始图像
原始图像可能是灰度图像,也有可能是彩色图像
4、多个阈值进行分割
输出每个阈值进行分割的结果
花费了两个小时,完成了单阈值分割完成了功能1、2、3;本来将功能4也整合进来了,但感觉如此一来,代码太过费解,并且有一定的代码冗余,因此将其分离成一个单独的函数,通过调用单阈值分割实现。
功能 2 的实现: 增加一个偏置 标记 bias
若为1,则表示正常情况,大于阈值,则认为是目标
为-1时,则反之。
进行比较时用:bias*image>bias*thresh 对两种情况通用
% 对标记图像进行阈值分割
%
% 标记图像里像素值大于Thresh,则认为时病斑,否则认为是非病斑
%
% 输入:
% image 进行阈值分割的图像
% thresh 分割的阈值
% bias 分割的偏置,默认为1
% bias=+1 大于阈值为1,小于阈值为0
% bias=-1 大于阈值为0,小于阈值为1
% bgImage 背景图像,image上标识为目标的区域被保留,而标识为背景的则删除
% 默认为进行阈值分割的图像,即image
%
% 输出:
% labBinaryImage 标识病斑图像、二值图像
% labSrcImage 在背景图像上作标记,标识病斑区域
%
% [labBinaryImage,labSrcImage]=ThreshSegement(image,thresh);
% [labBinaryImage,labSrcImage]=ThreshSegement(image,thresh,bias);
% [labBinaryImage,labSrcImage]=ThreshSegement(image,thresh,bias,bgimage);
%
% 2007-11-08
%
function [labBinaryImage,labSrcImage]=ThreshSegement(image,thresh,varargin)
iptchecknargin(2,4,nargin,mfilename); % 检测输入参数数量
iptcheckinput(image,{'numeric'},{'2d','real','nonsparse'}, mfilename,'image',1);
iptcheckinput(thresh,{'numeric'},{'row','nonempty','real'},mfilename, 'thresh',2);
thresh=thresh(1); % 只取第一个阈值
bias=1; % 偏置,默认为1
if(nargin>2) % 指定偏置
bias=varargin{1};
end
if(bias~=1) % 偏置只允许取值1和-1
bias=-1;
end
image=double(image); % 类型转换
iptcheckinput(bias,{'numeric'},{'row','nonempty','integer'},mfilename, 'bias',3);
if(nargin>3) % 显示的背景图像
bgImage=varargin{2};
if( (size(bgImage,1)~=size(image,1))||(size(bgImage,2)~=size(image,2)) )
error('背景图像大小需与分割图像完全一致。');
end
else
bgImage=image; % 默认为进行阈值分割的图像image
end
iptcheckinput(bgImage,{'numeric'},{'real','nonsparse'}, mfilename,'bgImage',4);
% 阈值分割,生成两幅标记图像
labBinaryImage=zeros(size(image)); % 在二值图像上标识病斑区域
labBinaryImage(find(bias*image>=bias*thresh))=1;
if ( nargout>1 ) % 输出背景图像上标识病斑区域
for cur=1:size(bgImage,3) % 对每个平面均进行标记,灰度图像与彩色图像均可
curLabSrcImage=bgImage(:,:,cur);
curLabSrcImage(find(bias*image<bias*thresh))=0;
labSrcImage(:,:,cur)=curLabSrcImage;
end
end
但也还存在一个问题,就是边界情况。即 bias*image=bias*thresh 的像素点的类别。bias取不同值其归类规则略有差别。比如归类规则:bias*image>bias*thresh,bias=1时表示大于阈值则认为是目标像素;bias=-1则小于等于阈值认为是目标像素。两者差一个等号。不能做到一致。
分享到:
相关推荐
《图像阈值分割在Matlab中的应用》 图像阈值分割是图像处理中的一种基础方法,主要用于将图像分成前景和背景两部分。在Matlab环境下,实现这一过程相对简单,但也具备一定的灵活性以适应不同需求。本文将详细介绍...
阈值分割是最常见也是最简单的图像分割方法之一,它通过设定一个或多个阈值来将图像像素分为两类,如前景和背景。常见的阈值分割算法包括全局阈值、自适应阈值、Otsu阈值等。全局阈值适用于图像背景和前景灰度值分布...
本文将深入探讨如何利用MATLAB实现基于遗传算法的图像阈值分割。 **一、图像阈值分割** 图像阈值分割是图像处理中的基本操作,它通过设定一个或多个阈值将图像分为两个或多个部分。在二值化图像中,通常将像素值...
描述中提到,“基于MATLAB图像阈值分割,有不同的方法,如人工阈值分割,大津法阈值分割等”。这里涉及到两种阈值分割的主要方法: 1. **人工阈值分割**:这种方法通常适用于已知特定阈值的情况。程序员或研究者...
总之,`autoThreshold.m`文件中的迭代法自动阈值分割算法在MATLAB环境中提供了强大的图像处理功能,能够适应不同场景的需求,实现高质量的图像二值化。理解和掌握这种算法对于进行图像处理研究和应用具有重要意义。
"MATLAB自适应阈值分割"是利用自适应阈值算法进行图像分割的一种方法,它可以根据图像局部特性自动确定合适的分割阈值,从而更好地处理图像的对比度变化和光照不均匀问题。 自适应阈值分割,顾名思义,与全局阈值...
matlab 实现图像阈值分割 Matlab 是一个功能强大且流行的数值计算软件,对图像处理具有非常好的支持。图像阈值分割是图像处理中的一种基本技术,用于将图像分割成不同的区域,以便于进一步的处理和分析。 Matlab ...
全局阈值分割与Otsu阈值分割是数字图像处理中的两种重要技术,它们主要用于将图像分割成前景和背景两部分。在这个MATLAB实现的压缩包中,我们重点关注如何运用这两种方法来处理图像。 首先,让我们理解全局阈值分割...
阈值分割是图像处理中的一个基础且重要的环节,主要用于将图像二值化,即将图像的像素值分为两类,通常为黑色和白色。在Matlab中,阈值分割提供了丰富的工具和函数来帮助我们实现这一过程。本文将深入探讨四种阈值...
总之,自动多阈值分割是MATLAB图像处理中的一个重要组成部分,通过合理选择和应用各种算法,我们可以有效地处理复杂的图像数据,提高图像分析的准确性和效率。如果你需要深入学习或应用这项技术,建议结合提供的...
总的来说,理解并掌握如何在MATLAB中实现自适应阈值分割是图像处理技术中的重要一环。通过深入学习和实践,我们可以更好地理解和处理各种复杂的图像数据,提高图像分析的准确性和可靠性。"fgcl.m"函数的源代码分析将...
Ostu方法又名最大类间差方法,通过统计整个图像的直方图特性来实现全局阈值T的自动选取,其算法步骤为: 1) 先计算图像的直方图,即将图像所有的像素点按照0~255共256个bin,统计落在每个bin的像素点数量 2) 归一化...
总结来说,基于MATLAB的阈值分割是图像处理的基础技术,通过合理选择和调整阈值、结合其他图像处理方法,可以有效地完成二值图像分割任务。这个压缩包提供的"基于matlab的阈值分割.doc"文档很可能是详细介绍了上述...
在本MATLAB图像处理专栏中,我们将深入探讨这一主题,特别是如何利用MATLAB实现不同的阈值分割方法。该资源包含了灰度化、二值化、局部阈值和最大类间方差法(Otsu's method)的应用,所有源代码均能运行,并且通过...
MATLAB作为强大的数值计算和可视化平台,为图像处理提供了丰富的工具箱和函数,使得图像阈值分割算法的实现变得相对简单。本文主要探讨基于MATLAB的图像阈值分割技术,特别是最大熵法、迭代法和类间类内方差比法。 ...
通过求差分曲线,利用阈值分割算法对图像进行自动多阈值分割
本文使用迭代法进行图像的分割,重点在于可以自动检测阈值大小。检测出来阈值大小后继而实现分割
采用迭代方法寻找分割的最佳点,算法速度比较快。算法采用matalb编写,可执行。
在提供的压缩包文件"大津法Otsu单阈值分割matlab"中,很可能包含了完成以上步骤的MATLAB代码,这对于初学者来说是一份很好的学习资料。通过阅读和理解代码,你可以更好地掌握大津法的原理及其在MATLAB中的实现,从而...
阈值分割是基于像素灰度值的一种图像二值化技术,即通过设定一个特定的阈值,将所有灰度值高于阈值的像素标记为一类(如白色,表示前景),低于阈值的像素标记为另一类(如黑色,表示背景)。这种方法简单高效,但...