阈值分割与区域分割
本文主要包括以下內(nèi)容
- 閾值分割技術(shù)
- 基于區(qū)域的圖像分割技術(shù)
- 本章的典型案例
- 基于LoG和Canny算子的精確邊緣檢測(cè)
- 基于Hough變換的直線檢測(cè)
- 圖像的四叉樹分解
閾值分割
我們?cè)?.5節(jié)學(xué)習(xí)過(guò)灰度閾值變換的相關(guān)知識(shí), 利用灰度閾值變換分割圖像就稱為閾值分割, 它是一種基本的圖像分割方法。
闕值分割的基本思想是確定一個(gè)閾值, 然后把每個(gè)像素點(diǎn)的灰度值和閾值相比較,根據(jù)比較的結(jié)果把該像素劃分為兩類:前景或者背景,閾值分割可以分成以下3步:
- 確定閾值.
- 將閾值和像素比較,.
- 把像素歸類
其中第1步閾值最重要。閾值的選擇將直接影響分割的準(zhǔn)確性以及由此產(chǎn)生的圖像描述,分析的正確性。
閾值分割方法
閾值分割常用的方法一般有以下幾種。
實(shí)驗(yàn)法
實(shí)驗(yàn)法是通過(guò)人眼的觀察, 對(duì)已知某些特征的圖像, 只要試驗(yàn)不同的閾值, 然后看是否滿足已知特征即可。這種方法的不足在于適用范圍窄,
使用前必須了解圖像的某些特征, 譬如平均灰度等,而且分割后圖像質(zhì)量的好壞受主觀局限性很大。
根據(jù)直方圖谷底確定閾值
如果圖像的前景物體內(nèi)部和背景區(qū)域的灰度值分布都比較均勻, 那么這個(gè)圖像的灰度直方圖將具有明顯雙峰, 此時(shí)可以選擇兩峰之間的谷底作為閾值。
其表達(dá)式為:
注意:由于直方圖是各灰度的像素統(tǒng)計(jì),其峰值和谷底特性不一定代表目標(biāo)和背景.因此,如果沒(méi)有圖像其他方面的知識(shí),只靠直方圖進(jìn)行圖像分割不一定準(zhǔn)確 .
迭代選擇閾值法
迭代式閾值選擇方法的基本思想是:開始選擇一個(gè)閾值作為初始估計(jì)值,然后按照某種規(guī)則不斷地更新這一估計(jì)值,直到滿足給定的條件為止。這個(gè)過(guò)程的關(guān)鍵在于選擇怎么樣的 迭代規(guī)則。一個(gè)好的迭代規(guī)則必須既能夠快速收斂,又能夠在每一個(gè)迭代過(guò)程中產(chǎn)生優(yōu)于上次迭代的結(jié)果。下面是一種迭代選擇閾值算法:
(1)選擇一個(gè)T的初始估計(jì)值。
(2)利用閾值T把圖像分為兩個(gè)區(qū)域R1, 和R2
(3)對(duì)區(qū)域R1和R2中的所有像素計(jì)算平均灰度值μ1和μ2
(4)計(jì)算新的閾值:
(5)重復(fù)步驟2-4, 直到逐次迭代所得的T值小于事先定義的參數(shù)T。
最小均方誤差法
最小均方誤差法也是常用的閾值分割法之一。這種方法通常以圖像中的灰度為模式特征,假設(shè)各模式的灰度是獨(dú)立分布的隨機(jī)變量,并假設(shè)圖像中待分割的模式服從一定的概率分布。一般來(lái)說(shuō),采用的是正態(tài)分布,即高斯概率分布。
首先假設(shè)一幅圖像僅包含兩個(gè)主要的灰度區(qū)域前景和背景。令z表示灰度值,p(z)表示灰度值概率密度函數(shù)的估計(jì)值。假設(shè)概率密度函數(shù)一個(gè)對(duì)應(yīng)于背景的灰度值,另一個(gè)對(duì)應(yīng)于圖像中前景即對(duì)象的灰度值。則描述圖像中整體灰度變換的混合密度函數(shù)是:
其中 P1是前景中具有值z(mì)的像素出現(xiàn)的概率, P2是背景中具有值z(mì)的像素出現(xiàn)的概率,兩者的關(guān)系為:
P1+P2=1
最大類間方差法
在對(duì)圖像進(jìn)行閾值分割時(shí),選定的分割閾值應(yīng)使前景區(qū)域的平均灰度、背景區(qū)域的平均灰度與整幅圖像的平均灰度之間差別最大,這種差異用區(qū)域的方差來(lái)表示。由此,Otsu在1978年提出了最大方差法。該算法在判決分析最小二乘法原理的基礎(chǔ)上推導(dǎo)得出,計(jì)算過(guò)程簡(jiǎn)單是一種穩(wěn)定、常用的算法。
讓T在[O,L-1]范圍內(nèi)依次取值, 使類間方差最大的T值便是最佳區(qū)域分割閾值。
該方法不需要人為設(shè)定其他參數(shù),是一種自動(dòng)選擇閾值的方法,而且能得到較好的結(jié)果。它不僅適用于包含兩個(gè)區(qū)域的單閾值選擇,也同樣適用于多區(qū)域的多閾值選擇。
Matlab實(shí)現(xiàn)
最大類間方差法
Matlab中和闕值變換相關(guān)的兩個(gè)主要函數(shù)是im2bw和graythresh。實(shí)際上,利用graythresh函數(shù)即可實(shí)現(xiàn)最大類間方差法。
迭代選擇閾值法
function [Ibw, thres] = autothreshold(I) % 迭代法自動(dòng)閾值分割 % % 輸入:I - 要進(jìn)行自動(dòng)閾值分割的灰度圖像 % 輸出:Ibw - 分割后的二值圖像 % thres - 自動(dòng)分割采用的閾值thres = 0.5 * (double(min(I(:))) + double(max(I(:)))); %初始閾值 done = false; %結(jié)束標(biāo)志 while ~doneg = I >= thres;Tnext = 0.5 * (mean(I(g)) + mean(I(~g)));done = abs(thres - Tnext) < 0.5;thres = Tnext; end;Ibw = im2bw(I, thres/255); % 二值化
區(qū)域分割
前面所講的圖像分割方法都是基于像素的灰度來(lái)進(jìn)行閾值分割, 本節(jié)將討論以區(qū)域?yàn)榛A(chǔ)的圖像分割技術(shù)。傳統(tǒng)的區(qū)域分割方法有區(qū)域生長(zhǎng)和區(qū)域分裂與合井, 其中最基礎(chǔ)的是區(qū)域生長(zhǎng)法。
區(qū)域生長(zhǎng)及其實(shí)現(xiàn)
區(qū)域生長(zhǎng)是根據(jù)事先定義的準(zhǔn)則將像素或者子區(qū)域聚合成更大區(qū)域的過(guò)程。其基本思想是從一組生長(zhǎng)點(diǎn)開始(生長(zhǎng)點(diǎn)可以是單個(gè)像素,也可以為某個(gè)小區(qū)域),將與該生長(zhǎng)點(diǎn)性質(zhì)相似的相鄰像素或者區(qū)域與生長(zhǎng)點(diǎn)合并,形成新的生長(zhǎng)點(diǎn),重復(fù)此過(guò)程直到不能生長(zhǎng)為止。生長(zhǎng)點(diǎn)和相鄰區(qū)域的相似性判據(jù)可以是灰度值、紋理、顏色等多種圖像信息。
區(qū)域生長(zhǎng)算法
區(qū)域生長(zhǎng)一般有3個(gè)步驟。
(1)選擇合適的生長(zhǎng)點(diǎn)。
(2)確定相似性準(zhǔn)則即生長(zhǎng)準(zhǔn)則。
(3)確定生長(zhǎng)停止條件。
一般來(lái)說(shuō), 在無(wú)像素或者區(qū)域滿足加入生長(zhǎng)區(qū)域的條件時(shí), 區(qū)域生長(zhǎng)就會(huì)停止。
上述方法比較的是單個(gè)像素與其鄰域的灰度特征以實(shí)現(xiàn)區(qū)域生長(zhǎng),也有一種混合型區(qū)域生長(zhǎng)把圖像分割成若干小區(qū)域,比較相鄰小區(qū)域的相似性,如果相似則合并。在實(shí)際中,區(qū) 域生長(zhǎng)時(shí)經(jīng)常還要考慮到生長(zhǎng)的”歷史”,還要根據(jù)區(qū)域的尺寸、形狀等圖像的全局性質(zhì)來(lái)決定區(qū)域的合并。
matlab實(shí)現(xiàn)
function J = regionGrow(I) % 區(qū)域生長(zhǎng),需要以交互方式設(shè)定初始種子點(diǎn),具體方法為鼠標(biāo)單擊圖像中一點(diǎn)后,按下回車鍵 % % 輸入:I - 原圖像 % 輸出:J - 輸出圖像if isinteger(I)I=im2double(I); end figure,imshow(I),title('原始圖像') [M,N]=size(I); [y,x]=getpts; %獲得區(qū)域生長(zhǎng)起始點(diǎn) x1=round(x); %橫坐標(biāo)取整 y1=round(y); %縱坐標(biāo)取整 seed=I(x1,y1); %將生長(zhǎng)起始點(diǎn)灰度值存入seed中 J=zeros(M,N); %作一個(gè)全零與原圖像等大的圖像矩陣J,作為輸出圖像矩陣 J(x1,y1)=1; %將J中與所取點(diǎn)相對(duì)應(yīng)位置的點(diǎn)設(shè)置為白 sum=seed; %儲(chǔ)存符合區(qū)域生長(zhǎng)條件的點(diǎn)的灰度值的和 suit=1; %儲(chǔ)存符合區(qū)域生長(zhǎng)條件的點(diǎn)的個(gè)數(shù) count=1; %記錄每次判斷一點(diǎn)周圍八點(diǎn)符合條件的新點(diǎn)的數(shù)目 threshold=0.15; %閾值,注意需要和double類型存儲(chǔ)的圖像相符合 while count>0s=0; %記錄判斷一點(diǎn)周圍八點(diǎn)時(shí),符合條件的新點(diǎn)的灰度值之和count=0;for i=1:Mfor j=1:Nif J(i,j)==1if (i-1)>0 & (i+1)<(M+1) & (j-1)>0 & (j+1)<(N+1) %判斷此點(diǎn)是否為圖像邊界上的點(diǎn)for u= -1:1 %判斷點(diǎn)周圍八點(diǎn)是否符合閾值條件for v= -1:1if J(i+u,j+v)==0 & abs(I(i+u,j+v)-seed)<=threshold& 1/(1+1/15*abs(I(i+u,j+v)-seed))>0.8J(i+u,j+v)=1;%判斷是否尚未標(biāo)記,并且為符合閾值條件的點(diǎn)%符合以上兩條件即將其在J中與之位置對(duì)應(yīng)的點(diǎn)設(shè)置為白count=count+1;s=s+I(i+u,j+v); %此點(diǎn)的灰度之加入s中endendendendendendendsuit=suit+count; %將n加入符合點(diǎn)數(shù)計(jì)數(shù)器中sum=sum+s; %將s加入符合點(diǎn)的灰度值總合中seed=sum/suit; %計(jì)算新的灰度平均值 end
選擇不同的生長(zhǎng)點(diǎn),結(jié)果不同。
區(qū)域分裂與合并
區(qū)域生長(zhǎng)是從一組生長(zhǎng)點(diǎn)開始的,另一種方法是在開始時(shí)將圖像分割為一系列任意不相交的區(qū)域, 然后將它們合并或者拆分以滿足限制條件, 這就是區(qū)域分裂與合并。 通過(guò)分裂, 可以將不同特征的區(qū)域分離開, 而通過(guò)合并, 可以將相同特征的區(qū)域合并起來(lái)。
區(qū)域分裂與合并算法
圖像先分裂為如圖9.22Ca)所示;第二次分裂時(shí),如圖(b)所示,由于左下角區(qū)域滿足P(Ri)=TRUE,則不進(jìn)行分裂操作;第三次分裂時(shí),如圖(c)所示,僅僅右邊的突出部分 P(Ri)=FALSE, 需要進(jìn)行分裂操作,其余不變,完成后,分裂停止;最后,對(duì)兩個(gè)相鄰區(qū)域 實(shí)行合并,一直得到最后的結(jié)果,如圖(d)所示。
區(qū)域分裂與合并對(duì)分割復(fù)雜的場(chǎng)景圖像比較有效,如果引入應(yīng)用領(lǐng)域知識(shí),則可以更好地提高分割效果。
區(qū)域分裂的Matlab實(shí)現(xiàn)
在Matlab中, 和區(qū)域分裂相關(guān)的3個(gè)主要函數(shù)分別是qtdecomp、qtgetblk和qtsetblk。
(1) qtdecomp函數(shù)
Matlab的IPT函數(shù)qtdecomp可以進(jìn)行四叉樹分解。該函數(shù)首先將圖像劃分成相等大4的4塊,然后對(duì)每一個(gè)塊進(jìn)行一致性檢查。如果該塊不符合一致性標(biāo)準(zhǔn), 則將該塊繼續(xù)分為4塊; 否則不對(duì)其進(jìn)行進(jìn)一步的分割。這個(gè)過(guò)程將會(huì)一直重復(fù)直至每一個(gè)塊都符合一致性標(biāo)
準(zhǔn), 分解的結(jié)果可能會(huì)包含許多大小不同的塊。
qtdecomp函數(shù)的常用調(diào)用形式為:
S = qtdecomp(I,threshold,[mindim,maxdim])
threshold是分割成的子塊中允許的閾值,默認(rèn)值為0.如杲子塊中最大元素和最小元 素的差值小于該閾值就認(rèn)為滿足一致性條件.對(duì)于double型矩陣,threshold將直接作為閾值;而對(duì)于uinit8和uintl6類型的矩陣,threshold將被乘以255和65535以作為實(shí)際閾值.對(duì)于圖像而言,threshold的取值范圍是0到1.
[mindim maxdim]是尺度閾值.mindim參數(shù)可以屏蔽函數(shù)對(duì)尺度上小于mindim的子塊的處理,而不論這個(gè)子塊是否滿足一致性條件;如果參數(shù)形式為[mindim maxdim], 則表示不產(chǎn)生小于mindim尺度的子塊,也不保留大于maxdim尺度的子塊,此時(shí) maxdim/mindim必須是2的整數(shù)次冪
注意: qtdecomp函數(shù)主要適用于邊長(zhǎng)是2的整數(shù)次冪的正方形圖像, 如128x128,512x512, 此時(shí)分解可一直進(jìn)行至子塊大小為1x1。對(duì)于長(zhǎng)寬不是2的整數(shù)次冪的圖像, 分解可能無(wú)法進(jìn)行到底. 例如, 對(duì)于96x96
的圖像, 將首先分解為48x48, 然后是24x24, 12*12, 6*6, 最后是3x3, 無(wú)法再繼續(xù)分解. 此時(shí)必須指定mindim參數(shù)為3或是2的整數(shù)次幕與3的乘積.
(2) qtgetblk函數(shù)
在得到稀疏矩陣S后, 利用IPT函數(shù)qtgetblk可進(jìn)一步獲得四叉樹分解后所有指定大小的子塊像素及位置信息。常用調(diào)用形式為:
[vals,r,c]=qtgetblk(I,S,dim)
稀疏矩陣S是經(jīng)過(guò)qtdecomp函數(shù)處理的輸出結(jié)果.
dim是指定子塊的大小
vals是dim*dim*k的三維矩陣,包含I中所有符合條件的子塊數(shù)據(jù)。其中k為符合 條件的dim*dim的大小的子塊的個(gè)數(shù),vals(:.:,i)表示符合條件的第i個(gè)子塊的內(nèi)容.
r和c均為列向量,分別表示圖像I中符合條件子塊左上角的縱坐標(biāo)(行索引)和橫坐標(biāo)(列索引).
(3) qtsetblk函數(shù)
在將圖像劃分為子塊后, 還需要使用函數(shù)qtsetblk將四叉樹分解所得到的子塊中符合條件的部分全部替換為指定的子塊。函數(shù)語(yǔ)法為:
J = qtsetblk(I,S,dim,vals)
S是I經(jīng)過(guò)qtdecomp函數(shù)處理的結(jié)果.
dim是指定的子塊大小.
vals是dim*dim*k的三維矩陣,包含了用來(lái)替換原有子塊的新子塊信息.其中K應(yīng)為圖像I中大小為dim*dim的子塊的總數(shù),vals(:,:,i)表示要替換的第i個(gè)子塊.
小結(jié)
圖像分割問(wèn)題是一個(gè)十分困難的問(wèn)題。因?yàn)榉指詈蟮膱D像是系統(tǒng)目標(biāo)的一個(gè)函數(shù), 所以根本不存在理想的或正確的分割。
物體及其組成部件的二維表現(xiàn)形式受到光照條件、透視畸變、觀察點(diǎn)變化、遮擋等的影響。此外, 物體及其組成部件與背景之間在視覺(jué)上可能無(wú)法區(qū)分。因此, 人們無(wú)法預(yù)測(cè)能夠從圖像中抽取出哪些與物體識(shí)別相關(guān)的初始信息。
唯一可以肯定的是,這一過(guò)程將在本質(zhì)上具有不可靠性。某些有用的信息能夠被抽取出,且同時(shí)也會(huì)出現(xiàn)許多錯(cuò)誤。因此,在任何應(yīng)用領(lǐng)域中都不存在最優(yōu)解。分割結(jié)果的好壞或者正確與否, 目前還沒(méi)有一個(gè)統(tǒng)一的評(píng)價(jià)判斷標(biāo)準(zhǔn), 大都從分割的視覺(jué)效果和實(shí)際的應(yīng)用場(chǎng)景來(lái)判斷。
總結(jié)
- 上一篇: 神经网络相关的笔试题目集合(一)
- 下一篇: ScrollView与TableView