`
kofsky
  • 浏览: 201801 次
  • 性别: Icon_minigender_1
  • 来自: 重庆
社区版块
存档分类
最新评论

图像阈值分割Matlab版

阅读更多
图像阈值分割是一个非常简单的算法。
对图像像素点,大于阈值,则认为是目标;小于阈值,则认为是背景。

而现在遇到的阈值分割却需要完成如下的多个功能:
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版.pdf

    《图像阈值分割在Matlab中的应用》 图像阈值分割是图像处理中的一种基础方法,主要用于将图像分成前景和背景两部分。在Matlab环境下,实现这一过程相对简单,但也具备一定的灵活性以适应不同需求。本文将详细介绍...

    基于MATLAB的图像阈值分割算法的研究

    阈值分割是最常见也是最简单的图像分割方法之一,它通过设定一个或多个阈值来将图像像素分为两类,如前景和背景。常见的阈值分割算法包括全局阈值、自适应阈值、Otsu阈值等。全局阈值适用于图像背景和前景灰度值分布...

    matlab:基于遗传算法的图像阈值分割

    本文将深入探讨如何利用MATLAB实现基于遗传算法的图像阈值分割。 **一、图像阈值分割** 图像阈值分割是图像处理中的基本操作,它通过设定一个或多个阈值将图像分为两个或多个部分。在二值化图像中,通常将像素值...

    20组 阈值分割_matlab_阈值分割_

    描述中提到,“基于MATLAB图像阈值分割,有不同的方法,如人工阈值分割,大津法阈值分割等”。这里涉及到两种阈值分割的主要方法: 1. **人工阈值分割**:这种方法通常适用于已知特定阈值的情况。程序员或研究者...

    matlab迭代法自动阈值分割算法

    总之,`autoThreshold.m`文件中的迭代法自动阈值分割算法在MATLAB环境中提供了强大的图像处理功能,能够适应不同场景的需求,实现高质量的图像二值化。理解和掌握这种算法对于进行图像处理研究和应用具有重要意义。

    MATLAB自适应阈值分割

    "MATLAB自适应阈值分割"是利用自适应阈值算法进行图像分割的一种方法,它可以根据图像局部特性自动确定合适的分割阈值,从而更好地处理图像的对比度变化和光照不均匀问题。 自适应阈值分割,顾名思义,与全局阈值...

    matlab 实现图像阈值分割

    matlab 实现图像阈值分割 Matlab 是一个功能强大且流行的数值计算软件,对图像处理具有非常好的支持。图像阈值分割是图像处理中的一种基本技术,用于将图像分割成不同的区域,以便于进一步的处理和分析。 Matlab ...

    数字图像处理之全局阈值分割与Otsu阈值分割MATLAB实现.zip

    全局阈值分割与Otsu阈值分割是数字图像处理中的两种重要技术,它们主要用于将图像分割成前景和背景两部分。在这个MATLAB实现的压缩包中,我们重点关注如何运用这两种方法来处理图像。 首先,让我们理解全局阈值分割...

    阈值分割 Matlab

    阈值分割是图像处理中的一个基础且重要的环节,主要用于将图像二值化,即将图像的像素值分为两类,通常为黑色和白色。在Matlab中,阈值分割提供了丰富的工具和函数来帮助我们实现这一过程。本文将深入探讨四种阈值...

    自动多阈值分割MATLAB程序 自动多阈值分割MATLAB程序

    总之,自动多阈值分割是MATLAB图像处理中的一个重要组成部分,通过合理选择和应用各种算法,我们可以有效地处理复杂的图像数据,提高图像分析的准确性和效率。如果你需要深入学习或应用这项技术,建议结合提供的...

    自适应阈值分割matlab算法

    总的来说,理解并掌握如何在MATLAB中实现自适应阈值分割是图像处理技术中的重要一环。通过深入学习和实践,我们可以更好地理解和处理各种复杂的图像数据,提高图像分析的准确性和可靠性。"fgcl.m"函数的源代码分析将...

    OSTU多阈值分割MATLAB程序

    Ostu方法又名最大类间差方法,通过统计整个图像的直方图特性来实现全局阈值T的自动选取,其算法步骤为: 1) 先计算图像的直方图,即将图像所有的像素点按照0~255共256个bin,统计落在每个bin的像素点数量 2) 归一化...

    基于matlab的阈值分割.rar_matlab 阈值分割_二值图像分割_分割算法_阈值分割matlab

    总结来说,基于MATLAB的阈值分割是图像处理的基础技术,通过合理选择和调整阈值、结合其他图像处理方法,可以有效地完成二值图像分割任务。这个压缩包提供的"基于matlab的阈值分割.doc"文档很可能是详细介绍了上述...

    MATLAB图像处理专栏--阈值分割算法

    在本MATLAB图像处理专栏中,我们将深入探讨这一主题,特别是如何利用MATLAB实现不同的阈值分割方法。该资源包含了灰度化、二值化、局部阈值和最大类间方差法(Otsu's method)的应用,所有源代码均能运行,并且通过...

    基于matlab的图像阈值分割算法

    MATLAB作为强大的数值计算和可视化平台,为图像处理提供了丰富的工具箱和函数,使得图像阈值分割算法的实现变得相对简单。本文主要探讨基于MATLAB的图像阈值分割技术,特别是最大熵法、迭代法和类间类内方差比法。 ...

    自动多阈值分割matlab程序

    通过求差分曲线,利用阈值分割算法对图像进行自动多阈值分割

    MATLAB迭代法检测阈值图像分割

    本文使用迭代法进行图像的分割,重点在于可以自动检测阈值大小。检测出来阈值大小后继而实现分割

    最佳阈值分割算法matlab

    采用迭代方法寻找分割的最佳点,算法速度比较快。算法采用matalb编写,可执行。

    大津法Otsu单阈值分割matlab

    在提供的压缩包文件"大津法Otsu单阈值分割matlab"中,很可能包含了完成以上步骤的MATLAB代码,这对于初学者来说是一份很好的学习资料。通过阅读和理解代码,你可以更好地掌握大津法的原理及其在MATLAB中的实现,从而...

    阈值图像分割系统 利用Matlab软件进行编程显示

    阈值分割是基于像素灰度值的一种图像二值化技术,即通过设定一个特定的阈值,将所有灰度值高于阈值的像素标记为一类(如白色,表示前景),低于阈值的像素标记为另一类(如黑色,表示背景)。这种方法简单高效,但...

Global site tag (gtag.js) - Google Analytics