Visual C 實現(xiàn)數(shù)字圖像的分割_第1頁
Visual C 實現(xiàn)數(shù)字圖像的分割_第2頁
Visual C 實現(xiàn)數(shù)字圖像的分割_第3頁
Visual C 實現(xiàn)數(shù)字圖像的分割_第4頁
Visual C 實現(xiàn)數(shù)字圖像的分割_第5頁
已閱讀5頁,還剩8頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、Visual C+ 實現(xiàn)數(shù)字圖像的分割一、前言用計算機(jī)進(jìn)行數(shù)字圖像處理的目的有兩個,一是產(chǎn)生更適合人類視覺觀察和識別的圖像,二是希望計算機(jī)能夠自動進(jìn)行識別和理解圖像。無論是為了何種目的,圖像處理的關(guān)鍵一步是對包含有大量各式各樣景物信息的圖像進(jìn)行分解。分解的最終結(jié)果就是圖像被分成一些具有各種特征的最小成分,這些成分就稱為圖像的基元。產(chǎn)生這些基元的過程就是圖像分割的過程。圖像分割作為圖像處理領(lǐng)域中極為重要的內(nèi)容之一,是實現(xiàn)圖像分析與理解的基礎(chǔ)。從概念上來說,所謂圖像分割就是按照一定的原則將一幅圖像或景物分為若干個部分或子集的過程。目前圖像處理系統(tǒng)中我們只能得到二維圖像信息,因此只能進(jìn)行圖像分割而不

2、是景物分割(景物是三維信息);圖像分割也可以理解為將圖像中有意義的特征區(qū)域或者需要應(yīng)用的特征區(qū)域提取出來,這些特征區(qū)域可以是像素的灰度值、物體輪廓曲線、紋理特性等,也可以是空間頻譜或直方圖特征等。在圖像中用來表示某一物體的區(qū)域,其特征都是相近或相同的,但是不同物體的區(qū)域之間,特征就會急劇變化。目前已經(jīng)提出的圖像分割方法很多,從分割依據(jù)的角度來看,圖像的分割方法可以分為相似性分割和非連續(xù)性分割。相似性分割就是將具有同一灰度級或相同組織結(jié)構(gòu)的像素聚集在一起,形成圖像的不同區(qū)域;非連續(xù)性分割就是首先檢測局部不連續(xù)性,然后將它們連接在一起形成邊界,這些邊界將圖像分成不同的區(qū)域。由于不同種類的圖像,不同

3、的應(yīng)用場合,需要提取的圖像特征是不同的,當(dāng)然對應(yīng)的圖像特征提取方法也就不同,因此并不存在一種普遍適應(yīng)的最優(yōu)方法。圖像分割方法又可分為結(jié)構(gòu)分割方法和非結(jié)構(gòu)分割方法兩大類。結(jié)構(gòu)分割方法是根據(jù)圖像的局部區(qū)域象素的特征來實現(xiàn)圖像分割,如閾值分割、區(qū)域生長、邊緣檢測、紋理分析等,這些方法假定事先知道這些區(qū)域的特性,或者在處理過程中能夠求得這些特性,從而能夠?qū)ふ腋鞣N形態(tài)或研究各像素群。非結(jié)構(gòu)分割法包括統(tǒng)計模式識別、神經(jīng)網(wǎng)絡(luò)方法或其它利用景物的先驗知識實現(xiàn)的方法等等。這些內(nèi)容由于專業(yè)性很強(qiáng),就不在本文討論內(nèi)容中了,有興趣的讀者可以參考圖像處理的專業(yè)書籍。總之,圖像分割可以分為圖像的邊緣提取和圖像的二值化二部

4、分內(nèi)容,下面我們首先來討論一下各種常用的圖像邊緣提取的方法。二、圖像邊緣檢測數(shù)字圖像的邊緣檢測是圖像分割、目標(biāo)區(qū)域的識別、區(qū)域形狀提取等圖像分析領(lǐng)域十分重要的基礎(chǔ),是圖像識別中提取圖像特征的一個重要屬性,圖像理解和分析的第一步往往就是邊緣檢測,目前它以成為機(jī)器視覺研究領(lǐng)域最活躍的課題之一,在工程應(yīng)用中占有十分重要的地位。物體的邊緣是以圖像的局部特征不連續(xù)的形式出現(xiàn)的,也就是指圖像局部亮度變化最顯著的部分,例如灰度值的突變、顏色的突變、紋理結(jié)構(gòu)的突變等,同時物體的邊緣也是不同區(qū)域的分界處。圖像邊緣有方向和幅度兩個特性,通常沿邊緣的走向灰度變化平緩,垂直于邊緣走向的像素灰度變換劇烈,根據(jù)灰度變化的

5、特點,可分為階躍型、房頂型和凸緣型,如圖一所示,這些變化對應(yīng)圖像中不同的景物。需要讀者注意的是,實際分析中圖像要復(fù)雜的多,圖像邊緣的灰度變化情況并不僅限于上述標(biāo)準(zhǔn)情況。(a)階躍型(b) 房頂型(c) 凸緣型圖一 邊緣灰度變換的幾種類型由于邊緣是圖像上灰度變化最劇烈的地方,傳統(tǒng)的邊緣檢測就是利用了這個特點,對圖像各個像素點進(jìn)行微分或求二階微分來確定邊緣像素點。一階微分圖像的峰值處對應(yīng)著圖像的邊緣點;二階微分圖像的過零點處對應(yīng)著圖像的邊緣點。根據(jù)數(shù)字圖像的特點,處理圖像過程中常采用差分來代替導(dǎo)數(shù)運算,對于圖像的簡單一階導(dǎo)數(shù)運算,由于具有固定的方向性,只能檢測特定方向的邊緣,所以不具有普遍性。為了

6、克服一階導(dǎo)數(shù)的缺點,我們定義了圖像的梯度為梯度算子為 ,它是圖像處理中最常用的一階微分算法,式子中 表示圖像的灰度值,圖像梯度的最重要性質(zhì)是梯度的方向是在圖像灰度最大變化率上,它恰好可以放映出圖像邊緣上的灰度變化。圖像邊緣提取的常用梯度算子有Robert算子、Sobel算子、Prewitt算子、Krisch算子等。下面以邊緣檢測Sobel算子為例來講述數(shù)字圖像處理中邊緣檢測的實現(xiàn):對于數(shù)字圖像,可以用一階差分代替一階微分;xf(x,y)=f(x,y)-f(x-1,y);yf(x,y)=f(x,y)-f(x,y-1);求梯度時對于平方和運算及開方運算,可以用兩個分量的絕對值之和表示,即:Sobe

7、l梯度算子是先做成加權(quán)平均,再微分,然后求梯度,即:xf(x,y)= f(x-1,y+1) + 2f(x,y+1) + f(x+1,y+1)- f(x-1,y-1) - 2f(x,y-1) - f(x+1,y-1);yf(x,y)= f(x-1,y-1) + 2f(x-1,y) + f(x-1,y+1)- f(x+1,y-1) - 2f(x+1,y) - f(x+1,y+1);Gf(x,y)=|xf(x,y)|+|yf(x,y)|;上述各式中的像素之間的關(guān)系見圖二 F(x-1,y-1)F(x,y-1)F(x+1,y-1)F(x-1,y)F(x,y)F(x+1,y)F(x-1,y+1)F(x,y

8、+1)F(x+1,y+1) 圖二 Sober算子中各個像素點的關(guān)系圖我在視圖類中定義了響應(yīng)菜單命令的邊緣檢測Sobel算子實現(xiàn)灰度圖像邊緣檢測的函數(shù)(圖像數(shù)據(jù)的獲取可以參見我在天極網(wǎng)上發(fā)表的的相關(guān)文章):void CDibView:OnMENUSobel()CClientDC pDC(this);HDC hDC=pDC.GetSafeHdc();/獲取當(dāng)前設(shè)備上下文的句柄;SetStretchBltMode(hDC,COLORONCOLOR);HANDLE data1handle;LPDIBHDRTMAPINFOHEADER lpDIBHdr;CDibDoc *pDoc=GetDocument

9、();HDIB hdib;unsigned char *lpDIBBits;unsigned char *data;hdib=pDoc->m_hDIB;/得到圖象數(shù)據(jù);lpDIBHdr=(LPDIBHDRTMAPINFOHEADER)GlobalLock(HGLOBAL)hdib);lpDIBBits= lpDIBHdr +* (LPDWORD)lpDIBHdr + 256*sizeof(RGBQUAD);/得到指向位圖像素值的指針;data1handle=GlobalAlloc(GMEM_SHARE,WIDTHBYTES(lpDIBHdr->biWidth*8)*lpDIBHdr

10、->biHeight);/申請存放處理后的像素值的緩沖區(qū)data=(unsigned char*)GlobalLock(HGLOBAL)data1handle);AfxGetApp()->BeginWaitCursor();int i,j,buf,buf1,buf2;for( j=0; jbiHeight; j+)/以下循環(huán)求(x,y)位置的灰度值for( i=0; ibiWidth; i+)if(i-1)>=0)&&(i+1)biWidth)&&(j-1)>=0)&&(j+1)biHeight)/對于圖像四周邊界處的向素

11、點不處理 buf1=(int)*(lpDIBBits+(i+1)*WIDTHBYTES(lpDIBHdr->biWidth*8)+(j-1)+2*(int)*(lpDIBBits+(i+1)*WIDTHBYTES(lpDIBHdr->biWidth*8)+(j) +(int)(int)*(lpDIBBits+(i+1)*WIDTHBYTES(lpDIBHdr->biWidth*8)+(j+1);buf1=buf1-(int)(int)*(lpDIBBits+(i-1)*WIDTHBYTES(lpDIBHdr->biWidth*8)+(j-1)-2*(int)(int)*

12、(lpDIBBits+(i-1)*WIDTHBYTES(lpDIBHdr->biWidth*8)+(j)-(int)(int)*(lpDIBBits+(i-1)*WIDTHBYTES(lpDIBHdr->biWidth*8)+(j+1);/以上是對圖像進(jìn)行水平(x)方向的加權(quán)微分buf2=(int)(int)*(lpDIBBits+(i-1)*WIDTHBYTES(lpDIBHdr->biWidth*8)+(j+1)+2*(int)(int)*(lpDIBBits+(i)*WIDTHBYTES(lpDIBHdr->biWidth*8)+(j+1)+(int)(int)*

13、(lpDIBBits+(i+1)*WIDTHBYTES(lpDIBHdr->biWidth*8)+(j+1);buf2=buf2-(int)(int)*(lpDIBBits+(i-1)*WIDTHBYTES(lpDIBHdr->biWidth*8)+(j-1)-2*(int)(int)*(lpDIBBits+(i)*WIDTHBYTES(lpDIBHdr->biWidth*8)+(j-1)-(int)(int)*(lpDIBBits+(i+1)*WIDTHBYTES(lpDIBHdr->biWidth*8)+(j-1);/以上是對圖像進(jìn)行垂直(y)方向加權(quán)微分buf=a

14、bs(buf1)+abs(buf2);/求梯度if(buf>255) buf=255;if(buf<0)buf=0;*(data+i*WIDTHBYTES(lpDIBHdr->biWidth*8)+j)=(BYTE)buf;else *(data+i*lpDIBHdr->biWidth+j)=(BYTE)0;for( j=0; jbiHeight; j+)for( i=0; ibiWidth; i+)*(lpDIBBits+i*WIDTHBYTES(lpDIBHdr->biWidth*8)+j)=*(data+i*WIDTHBYTES(lpDIBHdr->b

15、iWidth*8)+j); /處理后的數(shù)據(jù)寫回原緩沖區(qū)StretchDIBits (hDC,0,0,lpDIBHdr->biWidth,lpDIBHdr->biHeight,0,0,lpDIBHdr->biWidth,lpDIBHdr->biHeight,lpDIBBits,(LPDIBHDRTMAPINFO)lpDIBHdr,DIB_RGB_COLORS,SRCCOPY);上述的數(shù)學(xué)分析讀者可能看起來有些吃力,不過不要緊,對與邊緣檢測,大家只要知道有若干個檢測模板(既邊緣檢測矩陣)可以直接實現(xiàn)檢測功能就行了,現(xiàn)在將常用的檢測實現(xiàn)公式列出如下(檢測模版可以從相應(yīng)的算法很

16、容易的得到):Roberts算子:Gi,i=|fi,j-fi+1,j+1|+|fi+1,j-fi,j+1|;Sobe算子:Gi,i=|fi-1,j+1+2fi,j+1+fi+1,j+1-fi-1,j-1-2fi,j-1-fi+1,j-1|+|fi-1,j-1+2fi-1,j+fi-1,j+1-fi+1,j-1-2fi+1,j-fi+1,j+1|;其中Gi,j表示處理后(i,j)點的灰度值,fi,j表示處理前該點的灰度值。Kirsch算子實現(xiàn)起來相對來說稍微麻煩一些,它采用8個模板對圖像上的每一個像素點進(jìn)行卷積求導(dǎo)數(shù),這8個模板代表8個方向,對圖像上的8個特定邊緣方向作出最大響應(yīng),運算中取最大值

17、作為圖像的邊緣輸出(上述算法中用到的8個模板在下面的實現(xiàn)代碼中給出)。為了便于讀者理解該算法的實現(xiàn),這里我們給出實現(xiàn)該算法的函數(shù)代碼,讀者可以稍加改動應(yīng)用到自己的項目中去。BOOL Kirsch(BYTE *pData,int Width,int Height)/定義實現(xiàn)Kirsch算法的8個模板;int i,j,s,t,k,max,sum8;static a33=+5,+5,+5,-3,0,-3,-3,-3,-3;static a133=-3,+5,+5,-3,0,+5,-3,-3,-3;static a233=-3,-3,+5,-3,0,+5,-3,-3,+5;static a333=-3

18、,-3,-3,-3,0,+5,-3,+5,+5;static a433=-3,-3,-3,-3,0,-3,+5,+5,+5;static a533=-3,-3,-3,+5,0,-3,+5,+5,-3;static a633=+5,-3,-3,+5,0,-3,+5,-3,-3;static a733=+5,+5,-3,+5,0,-3,-3,-3,-3;BYTE *pData1;if(pData=NULL)AfxMessageBox("圖像數(shù)據(jù)為空,請讀取圖像數(shù)據(jù)!");return FALSE;pData1=(BYTE*)new charWidth*Height;if(pDa

19、ta1=NULL)AfxMessageBox("圖像緩沖數(shù)據(jù)區(qū)申請失敗,請重新申請圖像數(shù)據(jù)緩沖區(qū)!");return FALSE ;memcpy(pData1,pData, Width*8*Height);/kirsch算子處理,對每一像素點求取八個方向的導(dǎo)數(shù);for(i=1;i<Height-1;i+)for(j=1;j<Width-1;j+) sum1=sum2=sum3=sum4=sum5=sum6=sum7=sum8=0;for(t=-1;t<2;t+)for(s=-1;s<2;s+) sum1+=*(pData+WIDTHBYTES(Wid

20、th*8)*(i+t)+j+s)*a1+t1+s;sum2+=*(pData+WIDTHBYTES(Width*8)*(i+t)+j+s)*a11+t1+s; sum3+=*(pData+WIDTHBYTES(Width*8)*(i+t)+j+s)*a21+t1+s; sum4+=*(pData+WIDTHBYTES(Width*8)*(i+t)+j+s)*a31+t1+s; sum5+=*(pData+WIDTHBYTES(Width*8)*(i+t)+j+s)*a41+t1+s; sum6+=*(pData+WIDTHBYTES(Width*8)*(i+t)+j+s)*a51+t1+s;

21、sum7+=*(pData+WIDTHBYTES(Width*8)*(i+t)+j+s)*a61+t1+s; sum8+=*(pData+WIDTHBYTES(Width*8)*(i+t)+j+s)*a71+t1+s;/取最大方向的導(dǎo)數(shù);for(k=0;k<8;k+) max=0; if(max<sumk)max=sumk;if(max<0)max=0;if(max>255)max=255;*(pData1+ Width*8*i+j)=max;memcpy(pData,pData1, Width*8*Height);delete pData1;return TRUE;另

22、外還有一種稱為拉普拉斯的算子是不依賴于邊緣方向的二階微分算子,其表示式 ,對于數(shù)字圖像來說拉普拉斯算子可以簡單表示為:GI,j=|fi+1,j+fi-1,j+f(i,j+1)+fi,j-1-4fi,j|;它是一個標(biāo)量而不是向量,具有旋轉(zhuǎn)不變,既各向同性的性質(zhì),它常常用在圖像處理的過程中。梯度算子和拉普拉斯算子對噪聲敏感,它們都使噪聲成份加強(qiáng),因此在處理含有較大噪聲的圖像時,常常先對圖像進(jìn)行平滑操作,然后再進(jìn)行二階微分,這就產(chǎn)生了所謂的LOG(又稱為Marr方法)邊緣檢測方法。它先用高斯函數(shù)對圖像進(jìn)行平滑,然后再用拉普拉斯算子進(jìn)行運算??偟膩碚f,傳統(tǒng)的邊緣檢測算子的噪聲平滑能力和邊緣定位能力是矛

23、盾的,為了克服這個不足,正確地得到圖像的邊緣信息,人們提出了很多方法,如多尺度空間濾波、Facet模型檢測邊緣、模板匹配、Hough變換、小波變換、人工神經(jīng)網(wǎng)絡(luò)、模糊推理等算法。但這些方法絕大多數(shù)沒有經(jīng)典的算法精簡,要么難以獲得合理的計算復(fù)雜度,要么需要人為的調(diào)節(jié)各種參數(shù),有時甚至難以實時運行。因為傳統(tǒng)邊緣的定義為圖像中灰度的突變,所以這樣定義邊緣既失去了邊緣的部分信息,又把噪聲的影響包含在了邊緣中。其實,邊緣往往具有以下特征:1)灰度突變;2)是不同區(qū)域的邊界;3)具有方向性;根據(jù)邊緣的這三個特征,可以判斷所關(guān)心的區(qū)域其特征是否存在差異來判斷是否存在邊緣的可能性。如果特征沒有差異,則認(rèn)為是平

24、滑區(qū);如果特征有差異,則判斷為邊緣點。算法的具體實現(xiàn)步驟如下:1) 設(shè)置四個3x3模板如圖三所示,顯而易見,四個模板分別按0、45、90、135以(x,y)點為中心將3x3的區(qū)域分成兩個部分,按照這四個模板分別對圖像中的每一像素點進(jìn)行卷積求和操作。2)對圖像中每一像素點求的四個結(jié)果求絕對值,將每個結(jié)果分別與一個閾值比較,如果其中任意一結(jié)果大于或等于閾值T,則該模板的中心點所對應(yīng)的圖像像素點的灰度值為255,否則為0。 圖三 邊緣提取模板對于有噪聲的圖像,由于噪聲是隨機(jī)分布的,因此不論(x,y)是有效邊界點還是處于平坦區(qū)域內(nèi)部,沿邊緣方向劃分的兩個區(qū)域R1和R2的噪聲分布和噪聲強(qiáng)度,在

25、概率上相同。從四個模板的結(jié)構(gòu)可以看出,噪聲的影響基本上被相應(yīng)的抵消,不會對邊緣提取產(chǎn)生太大的影響,因此該算法具有較好的抗噪能力,克服了傳統(tǒng)的邊界提取僅考慮灰度突變的情況的局限。經(jīng)實驗證明該方法有較強(qiáng)的抗噪聲性能。為了更好的對比各種算法進(jìn)行邊緣檢測的效果,我們對一幅汽車圖像進(jìn)行了處理,下圖中的a、b、c、d是分別通過LOG算子、Sober算子、Kirsch算子和使用上述算法檢測得到的邊緣。(a) 原始圖像(b)LOG算子(c) Sober算子(d) Kirsch算子(e) 模板檢測法 圖四 圖像的邊緣檢測從上面的處理后的效果圖來說,只有最后一種算法處理后肉眼看不出有噪聲點,所以從去噪和

26、提取邊緣的綜合效果來看,我們上述介紹的模板檢測算法還是比較另人滿意的。三、圖像的二值化所謂二值圖像,就是指圖像上的所有點的灰度值只用兩種可能,不為"0"就為"255",也就是整個圖像呈現(xiàn)出明顯的黑白效果。為了得到理想的二值圖像,一般采用閾值分割技術(shù),它對物體與背景有較強(qiáng)對比的圖像的分割特別有效,它計算簡單而且總能用封閉、連通的邊界定義不交疊的區(qū)域。所有灰度大于或等于閾值的像素被判決為屬于物體,灰度值用"255"表示,否則這些像素點被排除在物體區(qū)域以外,灰度值為"0",表示背景。這樣一來物體的邊界就成為這樣一些內(nèi)部的

27、點的集合,這些點都至少有一個鄰點不屬于該物體。如果感興趣的物體在內(nèi)部有均勻一致的灰度值,并且其處在一個具有另外一個灰度值的均勻背景下,使用閾值法可以得到比較好的效果。如果物體同背景的差別不在灰度值上(比如紋理不同),可以將這個性質(zhì)轉(zhuǎn)換為灰度的差別,然后利用閾值化技術(shù)來分割該圖像。為了使分割更加魯棒,適用性更強(qiáng),系統(tǒng)應(yīng)該可以自動選擇閾值?;谖矬w、環(huán)境和應(yīng)用域等知識的圖像分割算法比基于固定閾值的算法更具有普遍性和適應(yīng)性。這些知識包括:對應(yīng)于物體的圖像灰度特性、物體的尺寸、物體在圖像中所占的比例、圖像中不同類型物體的數(shù)量等。其中圖像直方圖就是一種灰度特性,通常被用來作為分割圖像的工具。閾值分割法分

28、為全局閾值法和局部閾值分割法。所謂局部閾值分割法是將原始圖像劃分成較小的圖像,并對每個子圖像選取相應(yīng)的閾值。在閾值分割后,相鄰子圖像之間的邊界處可能產(chǎn)生灰度級的不連續(xù)性,因此需用平滑技術(shù)進(jìn)行排除。局部閾值法常用的方法有灰度差直方圖法、微分直方圖法。局部閾值分割法雖然能改善分割效果,但存在幾個缺點:(1)每幅子圖像的尺寸不能太小,否則統(tǒng)計出的結(jié)果無意義。(2)每幅圖像的分割是任意的,如果有一幅子圖像正好落在目標(biāo)區(qū)域或背景區(qū)域,而根據(jù)統(tǒng)計結(jié)果對其進(jìn)行分割,也許會產(chǎn)生更差的結(jié)果。(3)局部閾值法對每一幅子圖像都要進(jìn)行統(tǒng)計,速度慢,難以適應(yīng)實時性的要求。全局閾值分割方法在圖像處理中應(yīng)用比較多,它在整幅

29、圖像內(nèi)采用固定的閾值分割圖像。經(jīng)典的閾值選取以灰度直方圖為處理對象。根據(jù)閾值選擇方法的不同,可以分為模態(tài)方法、迭代式閾值選擇等方法。這些方法都是以圖像的直方圖為研究對象來確定分割的閾值的。另外還有類間方差閾值分割法、二維最大熵分割法、模糊閾值分割法、共生矩陣分割法、區(qū)域生長法等等。對于比較簡單的圖像,可以假定物體和背景分別處于不同的灰度級,圖像被零均值高斯噪聲污染,所以圖像的灰度分布曲線近似認(rèn)為是由兩個正態(tài)分布函數(shù)( )和( )疊加而成,圖像的直方圖將會出現(xiàn)兩個分離的峰值,如圖五所示。對于這樣的圖像,分割閾值可以選擇直方圖的兩個波峰間的波谷所對應(yīng)的灰度值作為分割的閾值。這種分割方法不可避免的會

30、出現(xiàn)誤分割,使一部分本屬于背景的像素被判決為物體,屬于物體的一部分像素同樣會被誤認(rèn)為是背景??梢宰C明,當(dāng)物體的尺寸和背景相等時,這樣選擇閾值可以使誤分概率達(dá)到最小。在大多數(shù)情況下,由于圖像的直方圖在波谷附近的像素很稀疏,因此這種方法對圖像的分割影響不大。這一方法可以推廣到具有不同灰度均值的多物體圖像。 圖五 雙峰直方圖迭代式閾值選擇算法是對上一種方法的改進(jìn),它首先選擇一個近似閾值T,將圖像分割成兩部分 和 ,計算區(qū)域 和 的均值 和 ,選擇新的分割閾值T=( )/2,重復(fù)上述步驟直到 和不再變化為止。后來"熵"的概念被引入了圖像處理技術(shù),人們提出了許多基于熵的閾值

31、分割法。1980年,Pun提出了最大后驗熵上限法,1985年,Kapur等人提出了一維最大熵閾值法,1989年Arutaleb將一維最大熵閾值法與Kirby等人的二維閾值方法相結(jié)合,提出了二維熵閾值法。對于一維最大熵分割方法,它的思想是統(tǒng)計圖像中每一個灰度級出現(xiàn)的概率 ,計算該灰度級的熵 ,假設(shè)以灰度級T分割圖像,圖像中低于T灰度級的像素點構(gòu)成目標(biāo)物體(O),高于灰度級T的像素點構(gòu)成背景(B),那么各個灰度級在本區(qū)的分布概率為:O區(qū): i=1,2,t B區(qū): i=t+1,t+2L-1 上式中的 ,這樣對于數(shù)字圖像中的目標(biāo)和背景區(qū)域的熵分別為: 對圖像中的每一個灰度級分別求取w= ,選取使w最大

32、的灰度級作為分割圖像的閾值,這就是一維最大熵閾值圖像分割法。我們定義了一個函數(shù)GetMaxHtoThrod()來實現(xiàn)該算法,它的返回值就是用來分割圖像的閾值。int GetMaxHtoThrod(BYTE *pData,int Width,int Height)int i,j,t;float p256,a1,a2,num256,max,pt;if(pData=NULL)AfxMessageBox("圖像數(shù)據(jù)為空,請讀取圖像數(shù)據(jù)!");return -1;/初始化數(shù)組p;for(i=0;i<256;i+)pi=0.0f;/統(tǒng)計各個灰度級出現(xiàn)的次數(shù);for(i=0;i&l

33、t;Height;i+)for(j=0;j<Width;j+)p*(pData+ Width*8)*i+j+;/統(tǒng)計各個灰度級出現(xiàn)的概率;for(j=0;j<256;j+)pj=pj/(Width*Height);/對每一個灰度級進(jìn)行比較;for(i=0;i<256;i+)a1=a2=0.0f;pt=0.0f;for(j=0;j<=i;j+)pt+=pj;for(j=0;j<=i;j+)a1+=(float)pj/pt*logf(pj/pt);for(j=i+1;j<256;j+)a2+=(float)pj/(1-pt)*logf(pj/(1-pt);numi=a1+a2;max=0.0f;/找到使類的熵最大的灰度

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論