【圖像分割】基于全局閾值、otsu、自適應(yīng)閾值多種算法實(shí)現(xiàn)圖像分割含Matlab源碼
1 簡(jiǎn)介
重點(diǎn)討論了圖像分割法中的閾值研究法,包括全局閾值法和自適應(yīng)閾值法.對(duì)全局閾值算法中的人工選擇法,迭代式閾值選擇法,最大類間方差法以及自適應(yīng)算法中的分水嶺算法進(jìn)行了重點(diǎn)分析,用Matlab進(jìn)行實(shí)現(xiàn)并給出了實(shí)驗(yàn)結(jié)果。
閾值分割方法是一種常見(jiàn)的區(qū)域并行技術(shù),原理上利用1 個(gè)或者多個(gè)閾值對(duì)像素點(diǎn)的灰度直方圖進(jìn)行區(qū)分,將其分成幾個(gè)不同的類,得到的像素灰度值在同一類的屬于同一個(gè)物體。由于直接利用灰度直方圖可以簡(jiǎn)化計(jì)算的部分,因此,選取一個(gè)適合的閾值就顯得尤為重要。想要找到合適的閾值就離不開(kāi)一個(gè)準(zhǔn)則函數(shù)?[3]。而在實(shí)際的研究中,選擇合適的閾值并不容易,影響閾值設(shè)定的主要因素有光的亮度以及噪聲。隨著研究的進(jìn)步,逐步發(fā)展了幾種解決上述問(wèn)題的辦法,應(yīng)用比較廣泛的有自適應(yīng)閾值法、最大熵法、類間閾值法以及模糊閾值法等。并且為了保證準(zhǔn)確性,至少會(huì)采用 2 種或者更多方法來(lái)確定閾值。首先把想要處理的原始 圖像假設(shè)為?f(x,y),閾值分割的主要任務(wù)就是將原始的輸入函數(shù)轉(zhuǎn) 化成輸出函數(shù)?g(x,y),

得到的函數(shù)?g(x,y)的圖像是二值圖像,利用原圖?f(x,?y)與閾值?p?比較之后,就能得到分割以后的圖像。在現(xiàn)在的研究中,閾值分割算法的核心就是找出最合適的閾值,基于此可以分為人工選擇法和自動(dòng)選擇法,要選擇的就是閾值,人工選擇法就是在通過(guò)人的肉眼分析圖像的直方圖時(shí),根據(jù)經(jīng)驗(yàn)判斷合適的閾值。但是在沒(méi)有人工干預(yù)的情況下,就需要采用自動(dòng)選擇法,這也是在特殊環(huán)境下利用專業(yè)領(lǐng)域的專業(yè)知識(shí)來(lái)進(jìn)行判斷的。
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 仿真結(jié)果

4 參考文獻(xiàn)
[1]李小琦. 基于Matlab的圖像閾值分割算法研究[J]. 軟件導(dǎo)刊, 2014, 13(12):3.
博主簡(jiǎn)介:擅長(zhǎng)智能優(yōu)化算法、神經(jīng)網(wǎng)絡(luò)預(yù)測(cè)、信號(hào)處理、元胞自動(dòng)機(jī)、圖像處理、路徑規(guī)劃、無(wú)人機(jī)等多種領(lǐng)域的Matlab仿真,相關(guān)matlab代碼問(wèn)題可私信交流。
部分理論引用網(wǎng)絡(luò)文獻(xiàn),若有侵權(quán)聯(lián)系博主刪除。
