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