灰度閾值分割算法_第1頁(yè)
灰度閾值分割算法_第2頁(yè)
灰度閾值分割算法_第3頁(yè)
灰度閾值分割算法_第4頁(yè)
灰度閾值分割算法_第5頁(yè)
已閱讀5頁(yè),還剩23頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、分享到一鍵分享QQ空間新浪微博百度云收藏人人網(wǎng)騰訊微博百度相冊(cè)開心網(wǎng)騰訊朋友百度貼吧豆瓣網(wǎng)搜狐微博百度新首頁(yè)QQ好友和訊微博更多.百度分享登錄|注冊(cè)窗體頂端窗體底端收藏成功 確定收藏失敗,請(qǐng)重新收藏 確定窗體頂端標(biāo)題 標(biāo)題不能為空網(wǎng)址 標(biāo)簽 摘要 公開 取消收藏 窗體底端分享資訊傳PPT/文檔提問(wèn)題寫博客傳資源創(chuàng)建項(xiàng)目創(chuàng)建代碼片設(shè)置昵稱編輯自我介紹,讓更多人了解你帳號(hào)設(shè)置退出社區(qū)博客論壇下載Share極客頭條服務(wù)CODE英雄會(huì)活動(dòng)CSTO俱樂(lè)部CTO俱樂(lè)部高校俱樂(lè)部奮斗斌斌的專欄解決項(xiàng)目中的瑣碎細(xì)節(jié)問(wèn)題b.zhao_目錄視圖摘要視圖訂閱有獎(jiǎng)?wù)髻Y源,博文分享有內(nèi)涵 人

2、氣博主的資源共享:老羅的Android之旅 微軟Azure英雄會(huì)編程大賽題 關(guān)注CSDN社區(qū)微信,福利多多 社區(qū)問(wèn)答:葉勁峰 游戲引擎架構(gòu) 灰度圖像閾值化分割常見方法總結(jié)及VC實(shí)現(xiàn) 分類: 圖像處理 OpenCV 2011-11-11 23:20 7427人閱讀 評(píng)論(14) 收藏 舉報(bào) 算法圖形byte圖像處理擴(kuò)展目錄(?)+Otsu法最大類間方差法一維交叉熵值法二維OTSU法參考文獻(xiàn) 在圖像處理領(lǐng)域,二值圖像運(yùn)算量小,并且能夠體現(xiàn)圖像的關(guān)鍵特征,因此被廣泛使用。將灰度圖像變?yōu)槎祱D像的常用方法是選定閾值,然后將待處理圖像的每個(gè)像素點(diǎn)進(jìn)行單點(diǎn)處理,即將其灰度值與所設(shè)置的門限進(jìn)行比對(duì),從而得到

3、二值化的黑白圖。這樣一種方式因?yàn)槠渲庇^性以及易于實(shí)現(xiàn),已經(jīng)在圖像分割領(lǐng)域處于中心地位。本文主要對(duì)最近一段時(shí)間作者所學(xué)習(xí)的閾值化圖像分割算法進(jìn)行總結(jié),全文描述了作者對(duì)每種算法的理解,并基于OpenCV和VC6.0對(duì)這些算法進(jìn)行了實(shí)現(xiàn)。最終將源代碼公開,希望大家一起進(jìn)步。(本文的代碼暫時(shí)沒(méi)有考慮執(zhí)行效率問(wèn)題) 首先給出待分割的圖像如下:1、Otsu法(最大類間方差法) 該算法是日本人Otsu提出的一種動(dòng)態(tài)閾值分割算法。它的主要思想是按照灰度特性將圖像劃分為背景和目標(biāo)2部分,劃分依據(jù)為選取門限值,使得背景和目標(biāo)之間的方差最大。(背景和目標(biāo)之間的類間方差越大,說(shuō)明這兩部分的差別越大,當(dāng)部分目標(biāo)被錯(cuò)劃分

4、為背景或部分背景錯(cuò)劃分為目標(biāo)都會(huì)導(dǎo)致這兩部分差別變小。因此,使用類間方差最大的分割意味著錯(cuò)分概率最小。)這是該方法的主要思路。其主要的實(shí)現(xiàn)原理為如下: 1)建立圖像灰度直方圖(共有L個(gè)灰度級(jí),每個(gè)出現(xiàn)概率為p) 2)計(jì)算背景和目標(biāo)的出現(xiàn)概率,計(jì)算方法如下: 上式中假設(shè)t為所選定的閾值,A代表背景(灰度級(jí)為0N),根據(jù)直方圖中的元素可知,Pa為背景出現(xiàn)的概率,同理B為目標(biāo),Pb為目標(biāo)出現(xiàn)的概率。 3)計(jì)算A和B兩個(gè)區(qū)域的類間方差如下: 第一個(gè)表達(dá)式分別計(jì)算A和B區(qū)域的平均灰度值; 第二個(gè)表達(dá)式計(jì)算灰度圖像全局的灰度平均值; 第三個(gè)表達(dá)式計(jì)算A、B兩個(gè)區(qū)域的類間方差。 4)以上幾個(gè)步驟計(jì)算出了單個(gè)

5、灰度值上的類間方差,因此最佳分割門限值應(yīng)該是圖像中能夠使得A與B的類間灰度方差最大的灰度值。在程序中需要對(duì)每個(gè)出現(xiàn)的灰度值據(jù)此進(jìn)行尋優(yōu)。 本人的VC實(shí)現(xiàn)代碼如下。cpp view plaincopyprint?/*函數(shù)名稱:*OneDimentionOtsu()*輸入?yún)?shù):*pGrayMat:二值圖像數(shù)據(jù)*width:圖形尺寸寬度*height:圖形尺寸高度*nTlreshold:經(jīng)過(guò)算法處理得到的二值化分割閾值*返回值:*無(wú)*函數(shù)說(shuō)明:實(shí)現(xiàn)灰度圖的二值化分割最大類間方差法(Otsu算法,俗稱大津算法)*/voidCBinarizationDlg:OneDimentionOtsu(CvMat*

6、pGrayMat,intwidth,intheight,BYTE&nThreshold)doublenHistogram256;/灰度直方圖 doubledVariance256;/類間方差 intN=height*width;/總像素?cái)?shù) for(inti=0;i256;i+)nHistogrami=0.0;dVariancei=0.0;for(i=0;iheight;i+)for(intj=0;jwidth;j+)unsignedcharnData=(unsignedchar)cvmGet(pGrayMat,i,j);nHistogramnData+;/建立直方圖 doublePa=0.0;

7、/背景出現(xiàn)概率 doublePb=0.0;/目標(biāo)出現(xiàn)概率 doubleWa=0.0;/背景平均灰度值 doubleWb=0.0;/目標(biāo)平均灰度值 doubleW0=0.0;/全局平均灰度值 doubledData1=0.0,dData2=0.0;for(i=0;i256;i+)/計(jì)算全局平均灰度 nHistogrami/=N;W0+=i*nHistogrami;for(i=0;i256;i+)/對(duì)每個(gè)灰度值計(jì)算類間方差 Pa+=nHistogrami;Pb=1-Pa;dData1+=i*nHistogrami;dData2=W0-dData1;Wa=dData1/Pa;Wb=dData2/Pb

8、;dVariancei=(Pa*Pb*pow(Wb-Wa),2);/遍歷每個(gè)方差,求取類間最大方差所對(duì)應(yīng)的灰度值 doubletemp=0.0;for(i=0;itemp)temp=dVariancei;nThreshold=i;/* 函數(shù)名稱:* OneDimentionOtsu()* 輸入?yún)?shù):* pGrayMat: 二值圖像數(shù)據(jù)*width: 圖形尺寸寬度*height: 圖形尺寸高度*nTlreshold: 經(jīng)過(guò)算法處理得到的二值化分割閾值* 返回值:* 無(wú)* 函數(shù)說(shuō)明:實(shí)現(xiàn)灰度圖的二值化分割最大類間方差法(Otsu算法,俗稱大津算法)*/void CBinarizationDlg:O

9、neDimentionOtsu(CvMat *pGrayMat, int width, int height, BYTE &nThreshold)double nHistogram256; /灰度直方圖double dVariance256; /類間方差int N = height*width; /總像素?cái)?shù)for(int i=0; i256; i+)nHistogrami = 0.0;dVariancei = 0.0;for(i=0; iheight; i+)for(int j=0; jwidth; j+)unsigned char nData = (unsigned char)cvmGet(

10、pGrayMat, i, j);nHistogramnData+; /建立直方圖double Pa=0.0; /背景出現(xiàn)概率double Pb=0.0; /目標(biāo)出現(xiàn)概率double Wa=0.0; /背景平均灰度值double Wb=0.0; /目標(biāo)平均灰度值double W0=0.0; /全局平均灰度值double dData1=0.0, dData2=0.0;for(i=0; i256; i+) /計(jì)算全局平均灰度nHistogrami /= N;W0 += i*nHistogrami;for(i=0; i256; i+) /對(duì)每個(gè)灰度值計(jì)算類間方差Pa += nHistogrami;Pb

11、 = 1-Pa;dData1 += i*nHistogrami;dData2 = W0-dData1;Wa = dData1/Pa;Wb = dData2/Pb;dVariancei = (Pa*Pb* pow(Wb-Wa), 2);/遍歷每個(gè)方差,求取類間最大方差所對(duì)應(yīng)的灰度值double temp=0.0;for(i=0; itemp)temp = dVariancei;nThreshold = i; 閾值分割結(jié)果如下圖,求解所得的閾值為116. 2、一維交叉熵值法 這種方法與類間最大方差很相似,是由Li和Lee應(yīng)用了信息論中熵理論發(fā)展而來(lái)。首先簡(jiǎn)要介紹交叉熵的概念。 對(duì)于兩個(gè)分布P和Q,

12、定義其信息交叉熵D如下: 這代表的物理意義是兩個(gè)分布之間信息理論距離,另外一種理解是,將分布P變?yōu)镼后所帶來(lái)的信息變化。那么對(duì)于圖像分割來(lái)說(shuō),如果要用分割圖像來(lái)替換原來(lái)的圖像,最優(yōu)的分割依據(jù)應(yīng)該就是使得兩幅圖像之間的交叉熵最小。以下對(duì)最小交叉熵法的過(guò)程進(jìn)行簡(jiǎn)要總結(jié)。 可以假設(shè)上文的P為源圖像的灰度分布,Q為所得到的分割圖像的灰度分布,其中: 上式中H為統(tǒng)計(jì)直方圖; N為圖像總的像素點(diǎn)數(shù); L為源圖像總的灰度級(jí)數(shù); P代表源圖像,其每個(gè)元素代表每個(gè)灰度級(jí)上的灰度分布(平均灰度值); Q為分割后的二值圖像,兩個(gè)u分別代表兩個(gè)分割后的區(qū)域的平均灰度值,其中t為分割圖像所采用的閾值。 根據(jù)以上定義,以

13、每個(gè)灰度級(jí)上的灰度和為計(jì)算量,可以很容易根據(jù)交叉熵的公式,推導(dǎo)出P和Q之間的交叉熵定量表達(dá)式: 根據(jù)上文所述思路,使得D最小的t即為最小交叉熵意義下的最優(yōu)閾值。 作者VC實(shí)現(xiàn)代碼如下。 cpp view plaincopyprint?/*函數(shù)名稱:*MiniCross()*輸入?yún)?shù):*pGrayMat:二值圖像數(shù)據(jù)*width:圖形尺寸寬度*height:圖形尺寸高度*nTlreshold:經(jīng)過(guò)算法處理得到的二值化分割閾值*返回值:*無(wú)*函數(shù)說(shuō)明:實(shí)現(xiàn)灰度圖的二值化分割最小交叉熵算法*/voidCBinarizationDlg:MiniCross(CvMat*pGrayMat,intwidth

14、,intheight,BYTE&nThreshold)doubledHistogram256;/灰度直方圖 doubledEntropy256;/每個(gè)像素的交叉熵 intN=height*width;/總像素?cái)?shù) for(inti=0;i256;i+)dHistogrami=0.0;dEntropyi=0.0;for(i=0;iheight;i+)for(intj=0;jwidth;j+)unsignedcharnData=(unsignedchar)cvmGet(pGrayMat,i,j);dHistogramnData+;/建立直方圖 doublePa=0.0;/區(qū)域1平均灰度值 doubl

15、ePb=0.0;/區(qū)域2平均灰度值 doubleP0=0.0;/全局平均灰度值 doubleWa=0.0;/第一部分熵 doubleWb=0.0;/第二部分的熵 doubledData1=0.0,dData2=0.0;/中間值 doubledData3=0.0,dData4=0.0;/中間值 for(i=0;i256;i+)/計(jì)算全局平均灰度 dHistogrami/=N;P0+=i*dHistogrami;for(i=0;i256;i+)Wa=Wb=dData1=dData2=dData3=dData4=Pa=Pb=0.0;for(intj=0;j256;j+)if(j=i)dData1+=

16、dHistogramj;dData2+=j*dHistogramj;elsedData3+=dHistogramj;dData4+=j*dHistogramj;Pa=dData2/dData1;Pb=dData4/dData3;for(j=0;j256;j+)if(j=i)if(Pa!=0)&(dHistogramj!=0)doubled1=log(dHistogramj/Pa);Wa+=j*dHistogramj*d1/log(2);elseif(Pb!=0)&(dHistogramj!=0)doubled2=log(dHistogramj/Pb);Wb+=j*dHistogramj*d2/

17、log(2);dEntropyi=Wa+Wb;/遍歷熵值,求取最小交叉熵所對(duì)應(yīng)的灰度值 doubletemp=dEntropy0;for(i=1;i256;i+)if(dEntropyitemp)temp=dEntropyi;nThreshold=i;/* 函數(shù)名稱:* MiniCross()* 輸入?yún)?shù):* pGrayMat: 二值圖像數(shù)據(jù)*width: 圖形尺寸寬度*height: 圖形尺寸高度*nTlreshold: 經(jīng)過(guò)算法處理得到的二值化分割閾值* 返回值:* 無(wú)* 函數(shù)說(shuō)明:實(shí)現(xiàn)灰度圖的二值化分割最小交叉熵算法*/void CBinarizationDlg:MiniCross(Cv

18、Mat *pGrayMat, int width, int height, BYTE &nThreshold)double dHistogram256; /灰度直方圖double dEntropy256; /每個(gè)像素的交叉熵int N = height*width; /總像素?cái)?shù)for(int i=0; i256; i+)dHistogrami = 0.0;dEntropyi = 0.0;for(i=0; iheight; i+)for(int j=0; jwidth; j+)unsigned char nData = (unsigned char)cvmGet(pGrayMat, i, j);

19、dHistogramnData+; /建立直方圖double Pa=0.0; /區(qū)域1平均灰度值double Pb=0.0; /區(qū)域2平均灰度值double P0=0.0; /全局平均灰度值double Wa=0.0;/第一部分熵double Wb=0.0; /第二部分的熵double dData1=0.0, dData2=0.0; /中間值double dData3=0.0, dData4=0.0; /中間值for(i=0; i256; i+) /計(jì)算全局平均灰度dHistogrami /= N;P0 += i*dHistogrami;for(i=0; i256; i+)Wa=Wb=dDat

20、a1=dData2=dData3=dData4=Pa=Pb=0.0;for(int j=0; j256; j+)if(j=i)dData1 += dHistogramj;dData2 += j*dHistogramj;elsedData3 += dHistogramj;dData4 += j*dHistogramj;Pa = dData2/dData1;Pb = dData4/dData3;for(j=0; j256; j+)if(j=i)if(Pa!=0)&(dHistogramj!=0)double d1 = log(dHistogramj/Pa);Wa += j*dHistogramj*

21、d1/log(2);elseif(Pb!=0)&(dHistogramj!=0)double d2 = log(dHistogramj/Pb);Wb += j*dHistogramj*d2/log(2);dEntropyi = Wa+Wb;/遍歷熵值,求取最小交叉熵所對(duì)應(yīng)的灰度值double temp=dEntropy0;for(i=1; i256; i+)if(dEntropyitemp)temp = dEntropyi;nThreshold = i; 閾值分割結(jié)果如下圖,求解所得的閾值為106.3、二維OTSU法 這種方法是對(duì)類間最大方差法的擴(kuò)展,將其從求兩個(gè)一維分布最大類間方差擴(kuò)充為求解

22、類間離散度矩陣的跡的最大值,考慮像素點(diǎn)灰度級(jí)的基礎(chǔ)上增加了對(duì)像素點(diǎn)鄰域平均像素值的考慮。 以下按照本人的理解對(duì)該方法的思路以及推倒過(guò)程進(jìn)行分析: 1)首先需要建立二維的灰度統(tǒng)計(jì)直方圖P(f, g); 圖像的灰度級(jí)為L(zhǎng)級(jí),那么其每個(gè)像素點(diǎn)的8鄰域灰度平均值的灰度級(jí)也為L(zhǎng)級(jí),據(jù)此來(lái)構(gòu)建直方圖P。二維統(tǒng)計(jì)直方圖的橫軸為每個(gè)像素點(diǎn)的灰度值f(i, j),縱坐標(biāo)為同一個(gè)點(diǎn)對(duì)應(yīng)的鄰域平均值g(i, j) 其中(0iheight, 0jwidth, 0f(i, j)L),而所對(duì)應(yīng)的P(f,g)整幅圖像中灰度值為f,鄰域灰度均值為g的點(diǎn)的統(tǒng)計(jì)值占總像素點(diǎn)的比例(即為灰度值出現(xiàn)的聯(lián)合概率密度)。其中P的每個(gè)元素

23、滿足如下公式: n為整幅圖像中灰度值為f,鄰域灰度均值為g的點(diǎn)的統(tǒng)計(jì)值; N為圖像總的像素點(diǎn)個(gè)數(shù); 2)對(duì)于下圖所示的二維統(tǒng)計(jì)直方圖,t代表橫坐標(biāo)(灰度值),s代表縱坐標(biāo)(像素點(diǎn)鄰域的灰度均值) 對(duì)已圖像中的閾值點(diǎn)(t,s)來(lái)說(shuō),其灰度值t和其鄰域內(nèi)的灰度均值s不應(yīng)該相差太多,如果t比s大很多(點(diǎn)位于上圖中的II區(qū)域),說(shuō)明像素的灰度值遠(yuǎn)遠(yuǎn)大于其臨域的灰度均值,故而該點(diǎn)很可能是噪聲點(diǎn),反之如果t比s小很多(點(diǎn)位于途中的IV區(qū)域),即該點(diǎn)的像素值比其臨域均值小很多,則說(shuō)明是一個(gè)邊緣點(diǎn)。據(jù)此我們?cè)谶M(jìn)行背景前景分割的時(shí)候忽略這些干擾因素,認(rèn)為這兩個(gè)區(qū)域內(nèi)Pi,j=0。剩下的I區(qū)域和III區(qū)域則分別代

24、表了前景和背景。以下?lián)藖?lái)推導(dǎo)對(duì)于選定的閾值(t, s),進(jìn)行離散度判據(jù)的最優(yōu)推導(dǎo)。 3)推導(dǎo)閾值(t, s)點(diǎn)處的離散度矩陣判據(jù) 根據(jù)上文分析可知,由閾值(t, s)所分割的前景和背景出現(xiàn)的概率如下: 定義兩個(gè)中間變量,方便下面推導(dǎo): 據(jù)此,這兩部分的灰度均值向量可以推導(dǎo)如下(兩個(gè)分量分別根據(jù)灰度值以及每個(gè)點(diǎn)的灰度均值計(jì)算): 整幅圖像的灰度均值向量為: 與一維的大津法一樣的思路,推導(dǎo)類間方差,這里是二維因此要用矩陣形式。參考一維法,可同樣定義類間“方差”矩陣如下: 為了在實(shí)現(xiàn)的時(shí)候,容易判斷出這樣一個(gè)矩陣的“最大值”,因此數(shù)學(xué)中采用矩陣的跡(對(duì)角線之和)來(lái)衡量矩陣的“大小”。因此以該矩陣的

25、跡作為離散度測(cè)度,推導(dǎo)如下: 這樣就可以通過(guò)求解使得這個(gè)參數(shù)最大時(shí)的(t,s)即為所求得的最佳閾值組合。 以下為具體算法實(shí)現(xiàn)過(guò)程: 1)建立二維直方圖 2)對(duì)直方圖進(jìn)行遍歷,計(jì)算每個(gè)(t,s)組合所得到的矩陣離散度,也就是一維大津法中所謂的最大類間方差。 3)求得使“類間方差”最大的(t,s),由于t代表灰度值,s代表改點(diǎn)在其鄰域內(nèi)的灰度均值,因此本人認(rèn)為在選擇閾值時(shí)可以選擇s為最佳,當(dāng)然用t也可以,因?yàn)閺那蠼饨Y(jié)果可以看出,這這個(gè)數(shù)值往往很接近。 具體的實(shí)現(xiàn)代碼如下:cpp view plaincopyprint?/*函數(shù)名稱:*TwoDimentionOtsu()*輸入?yún)?shù):*pGrayMa

26、t:二值圖像數(shù)據(jù)*width:圖形尺寸寬度*height:圖形尺寸高度*nTlreshold:經(jīng)過(guò)算法處理得到的二值化分割閾值*返回值:*無(wú)*函數(shù)說(shuō)明:實(shí)現(xiàn)灰度圖的二值化分割最大類間方差法(二維Otsu算法)*備注:在構(gòu)建二維直方圖的時(shí)候,采用灰度點(diǎn)的3*3鄰域均值*/voidCBinarizationDlg:TwoDimentionOtsu(CvMat*pGrayMat,intwidth,intheight,BYTE&nThreshold)doubledHistogram256256;/建立二維灰度直方圖 doubledTrMatrix=0.0;/離散矩陣的跡 intN=height*wid

27、th;/總像素?cái)?shù) for(inti=0;i256;i+)for(intj=0;j256;j+)dHistogramij=0.0;/初始化變量 for(i=0;iheight;i+)for(intj=0;jwidth;j+)unsignedcharnData1=(unsignedchar)cvmGet(pGrayMat,i,j);/當(dāng)前的灰度值 unsignedcharnData2=0;intnData3=0;/注意9個(gè)值相加可能超過(guò)一個(gè)字節(jié) for(intm=i-1;m=i+1;m+)for(intn=j-1;n=0)&(m=0)&(nwidth)nData3+=(unsignedchar)c

28、vmGet(pGrayMat,m,n);/當(dāng)前的灰度值 nData2=(unsignedchar)(nData3/9);/對(duì)于越界的索引值進(jìn)行補(bǔ)零,鄰域均值 dHistogramnData1nData2+;for(i=0;i256;i+)for(intj=0;j256;j+)dHistogramij/=N;/得到歸一化的概率分布 doublePai=0.0;/目標(biāo)區(qū)均值矢量i分量 doublePaj=0.0;/目標(biāo)區(qū)均值矢量j分量 doublePbi=0.0;/背景區(qū)均值矢量i分量 doublePbj=0.0;/背景區(qū)均值矢量j分量 doublePti=0.0;/全局均值矢量i分量 doubl

29、ePtj=0.0;/全局均值矢量j分量 doubleW0=0.0;/目標(biāo)區(qū)的聯(lián)合概率密度 doubleW1=0.0;/背景區(qū)的聯(lián)合概率密度 doubledData1=0.0;doubledData2=0.0;doubledData3=0.0;doubledData4=0.0;/中間變量 intnThreshold_s=0;intnThreshold_t=0;doubletemp=0.0;/尋求最大值 for(i=0;i256;i+)for(intj=0;j256;j+)Pti+=i*dHistogramij;Ptj+=j*dHistogramij;for(i=0;i256;i+)for(int

30、j=0;j256;j+)W0+=dHistogramij;dData1+=i*dHistogramij;dData2+=j*dHistogramij;W1=1-W0;dData3=Pti-dData1;dData4=Ptj-dData2;/*W1=dData3=dData4=0.0;/對(duì)內(nèi)循環(huán)的數(shù)據(jù)進(jìn)行初始化for(ints=i+1;s256;s+)for(intt=j+1;ttemp)temp=dTrMatrix;nThreshold_s=i;nThreshold_t=j;nThreshold=nThreshold_t;/返回結(jié)果中的灰度值 /nThreshold=100; /* 函數(shù)名稱:

31、* TwoDimentionOtsu()* 輸入?yún)?shù):* pGrayMat: 二值圖像數(shù)據(jù)*width: 圖形尺寸寬度*height: 圖形尺寸高度*nTlreshold: 經(jīng)過(guò)算法處理得到的二值化分割閾值* 返回值:* 無(wú)* 函數(shù)說(shuō)明:實(shí)現(xiàn)灰度圖的二值化分割最大類間方差法(二維Otsu算法)* 備注:在構(gòu)建二維直方圖的時(shí)候,采用灰度點(diǎn)的3*3鄰域均值*/void CBinarizationDlg:TwoDimentionOtsu(CvMat *pGrayMat, int width, int height, BYTE &nThreshold)double dHistogram256256;

32、/建立二維灰度直方圖double dTrMatrix = 0.0; /離散矩陣的跡int N = height*width; /總像素?cái)?shù)for(int i=0; i256; i+)for(int j=0; j256; j+)dHistogramij = 0.0; /初始化變量for(i=0; iheight; i+)for(int j=0; jwidth; j+)unsigned char nData1 = (unsigned char)cvmGet(pGrayMat, i, j); /當(dāng)前的灰度值unsigned char nData2 = 0;int nData3 = 0; /注意9個(gè)值相

33、加可能超過(guò)一個(gè)字節(jié)for(int m=i-1; m=i+1; m+)for(int n=j-1; n=0)&(m=0)&(nwidth)nData3 += (unsigned char)cvmGet(pGrayMat, m, n); /當(dāng)前的灰度值nData2 = (unsigned char)(nData3/9); /對(duì)于越界的索引值進(jìn)行補(bǔ)零,鄰域均值dHistogramnData1nData2+;for(i=0; i256; i+)for(int j=0; j256; j+)dHistogramij /= N; /得到歸一化的概率分布double Pai = 0.0; /目標(biāo)區(qū)均值矢量i分

34、量double Paj = 0.0; /目標(biāo)區(qū)均值矢量j分量double Pbi = 0.0; /背景區(qū)均值矢量i分量double Pbj = 0.0; /背景區(qū)均值矢量j分量double Pti = 0.0; /全局均值矢量i分量double Ptj = 0.0; /全局均值矢量j分量double W0 = 0.0; /目標(biāo)區(qū)的聯(lián)合概率密度double W1 = 0.0; /背景區(qū)的聯(lián)合概率密度 double dData1 = 0.0;double dData2 = 0.0;double dData3 = 0.0;double dData4 = 0.0; /中間變量int nThreshol

35、d_s = 0;int nThreshold_t = 0;double temp = 0.0; /尋求最大值for(i=0; i256; i+)for(int j=0; j256; j+)Pti += i*dHistogramij;Ptj += j*dHistogramij;for(i=0; i256; i+)for(int j=0; j256; j+)W0 += dHistogramij;dData1 += i*dHistogramij;dData2 += j*dHistogramij;W1 = 1-W0;dData3 = Pti-dData1;dData4 = Ptj-dData2;/*W1=dData3=dData4=0.0; /對(duì)內(nèi)循環(huán)的數(shù)據(jù)進(jìn)行初始化for(int s=i+1; s256; s+)for(int t=j+1; t temp)temp = dTrMatrix;nThreshold_s = i;nThreshold_t = j;nThreshold = nThreshold_t; /返回結(jié)果中的灰度值/nThreshold = 100; 閾值分割結(jié)果如下圖,求解所得的閾值為114.(s=114,t=117)參考文獻(xiàn) 1 Nobuyuki Otsu. A Threshold SelectionMethod from Gray-Level His

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論