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
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.
  • 41.
  • 42.
  • 43.

3 仿真结果

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

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

4 参考文献

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

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

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

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

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