当前位置 : 主页 > 编程语言 > python >

【图像分割】基于全局阈值、otsu、自适应阈值多种算法实现图像分割含Matlab源

来源:互联网 收集:自由互联 发布时间:2022-06-15
1 简介 重点讨论了图像分割法中的阈值研究法,包括全局阈值法和自适应阈值法.对全局阈值算法中的人工选择法,迭代式阈值选择法,最大类间方差法以及自适应算法中的分水岭算法进行了


 1 简介

重点讨论了图像分割法中的阈值研究法,包括全局阈值法和自适应阈值法.对全局阈值算法中的人工选择法,迭代式阈值选择法,最大类间方差法以及自适应算法中的分水岭算法进行了重点分析,用Matlab进行实现并给出了实验结果。

阈值分割方法是一种常见的区域并行技术,原理上利用1 个或者多个阈值对像素点的灰度直方图进行区分,将其分成几个不同的类,得到的像素灰度值在同一类的属于同一个物体。由于直接利用灰度直方图可以简化计算的部分,因此,选取一个适合的阈值就显得尤为重要。想要找到合适的阈值就离不开一个准则函数 [3]。而在实际的研究中,选择合适的阈值并不容易,影响阈值设定的主要因素有光的亮度以及噪声。随着研究的进步,逐步发展了几种解决上述问题的办法,应用比较广泛的有自适应阈值法、最大熵法、类间阈值法以及模糊阈值法等。并且为了保证准确性,至少会采用 2 种或者更多方法来确定阈值。首先把想要处理的原始 图像假设为 f(x,y),阈值分割的主要任务就是将原始的输入函数转 化成输出函数 g(x,y),

【图像分割】基于全局阈值、otsu、自适应阈值多种算法实现图像分割含Matlab源码_阈值分割

【图像分割】基于全局阈值、otsu、自适应阈值多种算法实现图像分割含Matlab源码_灰度直方图_02

得到的函数 g(x,y)的图像是二值图像,利用原图 f(x, y)与阈值 p 比较之后,就能得到分割以后的图像。在现在的研究中,阈值分割算法的核心就是找出最合适的阈值,基于此可以分为人工选择法和自动选择法,要选择的就是阈值,人工选择法就是在通过人的肉眼分析图像的直方图时,根据经验判断合适的阈值。但是在没有人工干预的情况下,就需要采用自动选择法,这也是在特殊环境下利用专业领域的专业知识来进行判断的。

2 部分代码

function y = isrgb(x)
%ISRGB Return true for RGB image.
% FLAG = ISRGB(A) returns 1 if A is an RGB truecolor image and
% 0 otherwise.
%
% ISRGB uses these criteria to determine if A is an RGB image:
%
% - If A is of class double, all values must be in the range
% [0,1], and A must be M-by-N-by-3.
%
% - If A is of class uint8 or uint16, A must be M-by-N-by-3.
%
% Note that a four-dimensional array that contains multiple RGB
% images returns 0, not 1.
%
% Class Support
% -------------
% A can be of class uint8, uint16, or double. If A is of
% class logical it is considered not to be RGB.
%
% See also ISBW, ISGRAY, ISIND.
% Copyright 1993-2003 The MathWorks, Inc.
% $Revision: 1.15.4.2 $ $Date: 2003/08/23 05:52:55 $
wid = sprintf('Images:%s:obsoleteFunction',mfilename);
str1= sprintf('%s is obsolete and may be removed in the future.',mfilename);
str2 = 'See product release notes for more information.';
warning(wid,'%s\n%s',str1,str2);
y = size(x,3)==3;
if y
if isa(x, 'logical')
y = false;
elseif isa(x, 'double')
% At first just test a small chunk to get a possible quick negative
m = size(x,1);
n = size(x,2);
chunk = x(1:min(m,10),1:min(n,10),:);
y = (min(chunk(:))>=0 && max(chunk(:))<=1);
% If the chunk is an RGB image, test the whole image
if y
y = (min(x(:))>=0 && max(x(:))<=1);
end
end
end

3 仿真结果

【图像分割】基于全局阈值、otsu、自适应阈值多种算法实现图像分割含Matlab源码_阈值分割_03

【图像分割】基于全局阈值、otsu、自适应阈值多种算法实现图像分割含Matlab源码_阈值分割_04

4 参考文献

[1]李小琦. 基于Matlab的图像阈值分割算法研究[J]. 软件导刊, 2014, 13(12):3.

博主简介:擅长智能优化算法、神经网络预测、信号处理、元胞自动机、图像处理、路径规划、无人机等多种领域的Matlab仿真,相关matlab代码问题可私信交流。

部分理论引用网络文献,若有侵权联系博主删除。

【图像分割】基于全局阈值、otsu、自适应阈值多种算法实现图像分割含Matlab源码_灰度直方图_05

【图像分割】基于全局阈值、otsu、自适应阈值多种算法实现图像分割含Matlab源码_自适应_06

网友评论