計(jì)算機(jī)圖形學(xué)課程設(shè)計(jì)報(bào)告(論文)-基于均值聚類(lèi)算法的細(xì)胞圖像分割原理_第1頁(yè)
計(jì)算機(jī)圖形學(xué)課程設(shè)計(jì)報(bào)告(論文)-基于均值聚類(lèi)算法的細(xì)胞圖像分割原理_第2頁(yè)
計(jì)算機(jī)圖形學(xué)課程設(shè)計(jì)報(bào)告(論文)-基于均值聚類(lèi)算法的細(xì)胞圖像分割原理_第3頁(yè)
計(jì)算機(jī)圖形學(xué)課程設(shè)計(jì)報(bào)告(論文)-基于均值聚類(lèi)算法的細(xì)胞圖像分割原理_第4頁(yè)
計(jì)算機(jī)圖形學(xué)課程設(shè)計(jì)報(bào)告(論文)-基于均值聚類(lèi)算法的細(xì)胞圖像分割原理_第5頁(yè)
已閱讀5頁(yè),還剩18頁(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)介

計(jì)算機(jī)圖形學(xué)課程設(shè)計(jì)報(bào)告論文 --目錄1FCM聚類(lèi)算法基本描述………………22K均值聚類(lèi)算法基本描述……………33K均值聚類(lèi)算法在細(xì)胞圖像中的應(yīng)用………………54基于HLS顏色空間和K均值聚類(lèi)算法的細(xì)胞圖像分割………75心得體會(huì)……………86參考文獻(xiàn)……………87程序代碼……………9基于均值聚類(lèi)算法的細(xì)胞圖像分割原理1FCM聚類(lèi)算法基本描述FCM聚類(lèi)算法通過(guò)歸一化處理,一個(gè)數(shù)據(jù)集的隸屬度的和總等于1。(2-7)那么,F(xiàn)CM的價(jià)值函數(shù)就是式(2-1)的一般化形式:(1-1)如果表示每一個(gè)樣本的維數(shù),是一個(gè)矩陣;表示樣本數(shù)目,通常表示圖像像素?cái)?shù);表示聚類(lèi)數(shù)目;是矢量隸屬于第類(lèi)的隸屬度函數(shù),滿足且;聚類(lèi)中心是矩陣,和更新等式分別為:(1-2)對(duì)于每一個(gè)模糊隸屬度,由控制模糊度的權(quán)重指數(shù);為相似性測(cè)度。1.1FCM聚類(lèi)算法步驟:Step1:設(shè)置目標(biāo)函數(shù)精度,模糊指數(shù)(通常取2),最大迭代次數(shù);Step2:初始化模糊聚類(lèi)中心;Step3:由式(1-2)更新模糊劃分矩陣和聚類(lèi)中心Step4:若或則結(jié)束聚類(lèi);否則,并轉(zhuǎn)Step3;Step5:由所得得到各像素點(diǎn)分類(lèi)結(jié)果。2K均值聚類(lèi)算法基本描述K均值聚類(lèi),即眾所周知的硬C均值聚類(lèi),已被廣泛應(yīng)用于數(shù)據(jù)挖掘技術(shù)。它的核心思想是把n個(gè)向量Xj(j=1,2,…,n)分為個(gè)組Gi(I=1,2,…,c),并求每組的聚類(lèi)中心,使得非相似性(或距離)指標(biāo)的價(jià)值函數(shù)(或目標(biāo)函數(shù))達(dá)到最小。當(dāng)選擇歐幾里德距離為組j中向量xk與相應(yīng)聚類(lèi)中心ci間的非相似性指標(biāo)時(shí),價(jià)值函數(shù)可定義為:(2-1)這里是組內(nèi)的價(jià)值函數(shù)。這樣的值依賴(lài)于的幾何特性和的位置。如果用一個(gè)通用距離函數(shù)代替組中的向量,則相應(yīng)的總價(jià)值函數(shù)可表示為:(2-2)為簡(jiǎn)單起見(jiàn),這里用歐幾里德距離作為向量的非相似性指標(biāo),距離計(jì)算可用每個(gè)像素的RGB(rx,gx,bx)值與個(gè)聚類(lèi)中心的值分別做計(jì)算,距離的計(jì)算式為。劃分過(guò)的組一般用一個(gè)的二維隸屬矩陣來(lái)定義。如果第個(gè)數(shù)據(jù)點(diǎn)xj屬于組,則中的元素為1,否則該元素取0。一旦確定聚類(lèi)中心,可導(dǎo)出如下使式(2-1)最小的:(2-3)如果是的最近的聚類(lèi)中心,那么屬于組。由于一個(gè)給定數(shù)據(jù)只能屬于一個(gè)組,所以隸屬矩陣具有如下性質(zhì):(2-4)且(2-5)另一方面,如果固定則使(2-1)式最小的最佳聚類(lèi)中心就是組中所有向量的均值:(2-6)這里是的規(guī)模或。2.1K均值聚類(lèi)算法實(shí)現(xiàn)步驟為:步驟1:初始化聚類(lèi)中心ci(I=1,2,。。,c),可從所有數(shù)據(jù)點(diǎn)中隨機(jī)取個(gè)點(diǎn)。步驟2:用式(2-3)確定隸屬矩陣。步驟3:根據(jù)式(2-1)計(jì)算價(jià)值函數(shù)。如果它小于某個(gè)確定的閾值,或它相對(duì)上次價(jià)值函數(shù)值的改變量小于某個(gè)控制值,則獲得聚類(lèi)中心值,算法停止。步驟4:根據(jù)式(2-6)修正聚類(lèi)中心,返回步驟2。分群數(shù)C聚類(lèi)中心迭代次數(shù)分類(lèi)時(shí)間(ms)K-MeansFCMK-MeansFCMK-MeansFCM3H:309,344,18S:23,16,16L:61,72,85H:300,346,19S:27,18,18L:60,75,8861223421094H:307,341,353,28S:24,16,15,18L:60,70,78,86H:312,330,341,21S:26,18,17,20L:68,78,82,8761828247652.2均值聚類(lèi)在細(xì)胞區(qū)域初分割中的效果比較3K均值聚類(lèi)算法在細(xì)胞圖像中的應(yīng)用:兩種均值聚類(lèi)算法在圖像分割中都有不同的應(yīng)用,限于論文篇幅,這里只對(duì)K聚類(lèi)均值算法的應(yīng)用為例。K均值聚類(lèi)算法把個(gè)對(duì)象分為K類(lèi),以使類(lèi)內(nèi)具有較高的相似度,而類(lèi)間的相似度較低。與其它聚類(lèi)算法一樣,K均值聚類(lèi)也是一個(gè)迭代尋優(yōu)的過(guò)程。算法的基本思想:首先隨機(jī)選取個(gè)點(diǎn)作為初始聚類(lèi)中心,然后,基于給定的聚類(lèi)目標(biāo)函數(shù)(或者說(shuō)是聚類(lèi)效果判別準(zhǔn)則),把數(shù)據(jù)對(duì)象歸到離它最近的那個(gè)聚類(lèi)中心所在的類(lèi),對(duì)調(diào)整后的新類(lèi)計(jì)算新的聚類(lèi)中心,如果相鄰兩次的聚類(lèi)中心沒(méi)有大的變化,說(shuō)明數(shù)據(jù)對(duì)象調(diào)整結(jié)束,聚類(lèi)準(zhǔn)則函數(shù)已經(jīng)收斂。如果在一次迭代算法中,所有的數(shù)據(jù)對(duì)象被正確分類(lèi),標(biāo)志著已經(jīng)收斂,至此算法結(jié)束。該算法的步驟如下:(1)給定大小為的數(shù)據(jù)集,令,選取k個(gè)初始聚類(lèi)中心其中K代表迭代次數(shù);(2計(jì)算每個(gè)樣本數(shù)據(jù)對(duì)象與聚合中心的距離滿足則;(3)令I(lǐng)=I+1,計(jì)算新的聚類(lèi)中心和誤差平方和準(zhǔn)則;(4)判斷,若,則算法結(jié)束,否則I=I+1,返回(2)繼續(xù)計(jì)算,直到滿足要求的迭代精度為止。從上面的算法可以看出,K均值聚類(lèi)的特點(diǎn)為調(diào)整一個(gè)數(shù)據(jù)對(duì)象后就修改一次聚類(lèi)中心和準(zhǔn)則函數(shù)值,當(dāng)考察完n個(gè)數(shù)據(jù)對(duì)象后,一次迭代運(yùn)算完成,新的聚類(lèi)中心和值也計(jì)算出來(lái)。如果在一次迭代前后,值沒(méi)有變化,說(shuō)明計(jì)算已經(jīng)收斂。在迭代過(guò)程中,值逐漸減小,直到它的最小值為止。用K均值聚類(lèi)首先對(duì)原始的彩色細(xì)胞圖像在HLS空間進(jìn)行聚類(lèi),很顯然,背景與不同顏色的細(xì)胞分屬于不同的類(lèi),根據(jù)細(xì)胞的像素值點(diǎn)選區(qū)合適的閾值。K均值聚類(lèi)算法中的是是事先給定的,這個(gè)K值的選定是很難估計(jì)的。針對(duì)這一特點(diǎn),有的算法是通過(guò)類(lèi)的自動(dòng)合并和分裂,得到較為合理的類(lèi)型數(shù)目K,有些根據(jù)方差分析理論,應(yīng)用混合統(tǒng)計(jì)量來(lái)確定最佳分類(lèi)數(shù)[1]。根據(jù)血液細(xì)胞的特征,我們選取k=4,實(shí)驗(yàn)結(jié)果證明,取得了良好的效果。如圖所示:4基于HLS顏色空間和K均值聚類(lèi)算法的細(xì)胞圖像分割同樣的,我們這里只介紹一下基于HLS顏色空間的圖像聚類(lèi)。由于在HLS空間,而H、L和S值相距很大,因此在選擇聚類(lèi)參數(shù)時(shí),采用下列方法:dcolor:顏色距離差α、β、γ:HLS各自在顏色空間距離中的權(quán)值:四種顏色的HLS空間值hcolor,lcolor,scoloror:圖片顏色的HLS空間值在此處α、β、γ的值依經(jīng)驗(yàn)分別取為0,8、260和300。計(jì)算步驟如下:取出圖片上的像素點(diǎn)并將其從RGB空間之值轉(zhuǎn)換成HLS空間之值。2)將得到的值與數(shù)理統(tǒng)計(jì)得到的四類(lèi)數(shù)值進(jìn)行比較計(jì)算(利用上面公式)并得到相應(yīng)的dcolor。3)將四個(gè)dcolor進(jìn)行比較,取出其最小值。4)通過(guò)最小值所屬類(lèi)得到所求像素點(diǎn)所屬類(lèi)(藍(lán)、黃、白、黑)。5)將所求像素點(diǎn)的顏色值更改為所屬類(lèi)的顏色值,即:黑(0,0,0),藍(lán)(0,0,255),黃(255,255,0),白(255,255,255)。6)統(tǒng)計(jì)各個(gè)類(lèi)別的中心,即對(duì)屬于該類(lèi)別所有點(diǎn)去均值。7)將新得到的均值與數(shù)理統(tǒng)計(jì)得到的均值進(jìn)行比較,其比較公式是:如果flag=0,則將得到的聚類(lèi)中心替換前一迭代中心,并轉(zhuǎn)步驟1。如果flag=1,聚類(lèi)分割完成,結(jié)束聚類(lèi)計(jì)算。從上面步驟可以看出聚類(lèi)所得到四類(lèi)的值不僅RGB顏色值不同,而且R+G+B的值也不同,而且由于目標(biāo)值是數(shù)理統(tǒng)計(jì)得到的值,這點(diǎn)不僅可以使得聚類(lèi)中心的判斷可以不需要那么嚴(yán)格,而且其迭代次數(shù)也可大大地降低,基本上經(jīng)過(guò)1~2次迭代就可以得到很好的聚類(lèi)效果。5心得體會(huì)經(jīng)過(guò)兩天的課程設(shè)計(jì),我從中學(xué)到了很多。首先,我對(duì)計(jì)算機(jī)圖形學(xué)關(guān)于均值聚類(lèi)算法這一節(jié)有了更透徹的理解。我明白了K均值聚類(lèi)和FCM兩種算法的原理,以及兩者之間各自的優(yōu)缺點(diǎn),我領(lǐng)會(huì)在圖像分割中兩種算法帶來(lái)的不同效果。其次,在完成報(bào)告論文的過(guò)程中,提高了我完成論文的水平,相信這會(huì)為我順了地完成畢業(yè)設(shè)計(jì)論文打下良好的基礎(chǔ)。最后,我想說(shuō)的是,這樣的課程設(shè)計(jì)對(duì)我們的將來(lái)同樣大有裨益。通過(guò)本次課程設(shè)計(jì),不僅讓我們掌握了圖像分割技術(shù)的基本原理,還讓我們學(xué)會(huì)如何將理論應(yīng)用與實(shí)踐的動(dòng)手能力。6參考文獻(xiàn)【1】《計(jì)算機(jī)圖形學(xué)算法基礎(chǔ)(英文版)》機(jī)械工業(yè)出版社【2】《華東交通大學(xué)學(xué)報(bào)》基于模糊均值聚類(lèi)和圖像可控細(xì)化技術(shù)的血液細(xì)胞統(tǒng)計(jì)系統(tǒng)的設(shè)計(jì)蔣先剛7程序代碼部分7.1彩色圖像RGB均值聚類(lèi)procedureTMDIChild。RGB_KMeansClick(Sender:TObject);var//基于顏色R、G、B分量的均值聚類(lèi)算法Found:Boolean;p:pByteArray;Bmp:TBitmap;g,i,k,x,y,MinGroupNum,IteriationTime,Num:integer;GroupCount,OldGroup,NewGroup,Distance:arrayofinteger;GroupRGB:arrayofarrayofinteger;beginself。DoubleBuffered:=true;//設(shè)置雙緩沖Bmp:=Tbitmap。Create;//創(chuàng)建Bmp格式圖像Bmp。Assign(BloodImage。Picture。Bitmap);Bmp。PixelFormat:=pf24bit;Num:=StrToInt(ClusterNumEdit。Text);SetLength(GroupCount,Num);SetLength(OldGroup,3*Num);SetLength(NewGroup,3*Num);SetLength(GroupRGB,Num,3);SetLength(Distance,Num);fori:=0toNum-1dobeginGroupCount[i]:=1;//設(shè)置初始的顏色中心fork:=i*3toi*3+2doNewGroup[k]:=240-i*100;end;IteriationTime:=0;Found:=False;while(notFound)dobegininc(IteriationTime);fork:=0to3*Num-1doOldGroup[k]:=NewGroup[k];fori:=0toNum-1dobeginGroupCount[i]:=1;fork:=0to2doGroupRGB[i,k]:=1;end;fory:=0toBmp。Height-1dobeginp:=Bmp。ScanLine[y];forx:=0toBmp。Width-1dobeginfork:=0toNum-1doDistance[k]:=0;MinGroupNum:=0;fork:=0to2doDistance[0]:=Distance[0]+sqr(NewGroup[k]-p[3*x+k]);fori:=1toNum-1dobeginFork:=0to2doDistance[i]:=Distance[i]+sqr(NewGroup[3*i+k]-p[3*x+k]);//設(shè)置距離范圍ifDistance[i]<Distance[MinGroupNum]thenMinGroupNum:=i;end;Inc(GroupCount[MinGroupNum]);Fork:=0to2doGroupRGB[MinGroupNum,k]:=GroupRGB[MinGroupNum,k]+p[3*x+k];end;end;fori:=0toNum-1dofork:=0to2doNewGroup[i*3+k]:=Trunc(GroupRGB[i,k]/GroupCount[i]);fork:=0to3*Num-1dobeginif(NewGroup[k]<>OldGroup[k])thenBreak;ifk=3*Num-1thenFound:=True;end;IteriationTimeEdit。Text:=IntToStr(IteriationTime);end;fory:=0toBmp。Height-1dobeginp:=Bmp。ScanLine[y];forx:=0toBmp。Width-1dobeginfork:=0toNum-1doDistance[k]:=0;MinGroupNum:=0;fork:=0to2doDistance[0]:=Distance[0]+sqr(NewGroup[k]-p[3*x+k]);fori:=1toNum-1dobegin//得到新的聚類(lèi)中心的各維變量(紅、綠、藍(lán))Fork:=0to2doDistance[i]:=Distance[i]+sqr(NewGroup[3*i+k]-p[3*x+k]);ifDistance[i]<Distance[MinGroupNum]thenMinGroupNum:=i;end;fork:=0to2dobegin//按新的分類(lèi)顏色進(jìn)行重繪p[3*x+k]:=NewGroup[MinGroupNum*3+k];end;end;end;BloodImage。Picture。Bitmap。Assign(Bmp);bmp。Free;end;7.2彩色圖像HSL均值聚類(lèi)procedureTMDIChild。HLS_KMeansClick(Sender:TObject);var//基于顏色H、S、L可調(diào)的均值聚類(lèi)算法Found:Boolean;p:pByteArray;Bmp:TBitmap;IteriationTime,i,k,x,y,MinGroupNum,Num:integer;GroupCount,OldGroup,NewGroup,Distance:arrayofinteger;HSL,Det:arrayofInteger;GroupRGB:arrayofarrayofinteger;H,S,L,R,G,B:Integer;beginself。DoubleBuffered:=true;//設(shè)置雙緩沖Bmp:=Tbitmap。Create;Bmp。Assign(BloodImage。Picture。Bitmap);Bmp。PixelFormat:=pf24bit;Num:=StrToInt(ClusterNumEdit。Text);SetLength(Det,3);SetLength(GroupCount,Num);SetLength(OldGroup,3*Num);SetLength(NewGroup,3*Num);SetLength(GroupRGB,Num,3);SetLength(Distance,Num);SetLength(HSL,3);fori:=0toNum-1dobeginGroupCount[i]:=1;fork:=i*3toi*3+2doNewGroup[k]:=trunc(100-(100/Num)*i);end;IFHCheckBox。Checked=TRUEThenDeT[0]:=1ElseDeT[0]:=0;IFSCheckBox。Checked=TRUEThenDeT[1]:=1ElseDeT[1]:=0;IFLCheckBox。Checked=TRUEThenDeT[2]:=1ElseDeT[2]:=0;IteriationTime:=0;Found:=False;while(notFound)doBegin//設(shè)置轉(zhuǎn)換圖像的尺寸Inc(IteriationTime);fork:=0to3*Num-1doOldGroup[k]:=NewGroup[k];fori:=0toNum-1dobeginGroupCount[i]:=1;fork:=0to2doGroupRGB[i,k]:=1;end;fory:=0toBmp。Height-1dobeginp:=Bmp。ScanLine[y];forx:=0toBmp。Width-1dobeginRGB_TO_HSL(p[3*x+2],p[3*x+1],p[3*x+0],H,S,L);HSL[0]:=trunc(H/3。6);HSL[1]:=S;HSL[2]:=L;fork:=0toNum-1doDistance[k]:=0;MinGroupNum:=0;Fork:=0to2do

Distance[0]:=Distance[0]+DeT[K]*sqr(NewGroup[k]-HSL[K]);fori:=1toNum-1dobegin//哪個(gè)點(diǎn)的顏色與哪個(gè)類(lèi)的距離最小,就將這個(gè)點(diǎn)分配到那個(gè)類(lèi)Fork:=0to2doDistance[i]:=Distance[i]+DeT[K]*sqr(NewGroup[3*i+k]-HSL[K]);ifDistance[i]<Distance[MinGroupNum]thenMinGroupNum:=i;end;Inc(GroupCount[MinGroupNum]);Fork:=0to2doGroupRGB[MinGroupNum,k]:=GroupRGB[MinGroupNum,k]+HSL[K];end;end;fori:=0toNum-1dofork:=0to2do//新類(lèi)的顏色為這個(gè)群類(lèi)的顏色的平均植NewGroup[i*3+k]:=Trunc(GroupRGB[i,k]/GroupCount[i]);fork:=0to3*Num-1dobeginif(NewGroup[k]<>OldGroup[k])thenBreak;ifk=3*Num-1thenFound:=True;end;end;IteriationTimeEdit。Text:=IntToStr(IteriationTime);fory:=0toBmp。Height-1dobegin//將每個(gè)點(diǎn)分配到不同類(lèi)的顏色p:=Bmp。ScanLine[y];forx:=0toBmp。Width-1dobeginRGB_TO_HSL(p[3*x+2],p[3*x+1],p[3*x+0],H,S,L);//RGB圖像向HSL圖像空間轉(zhuǎn)變HSL[0]:=trunc(H/3。6);HSL[1]:=S;HSL[2]:=L;fork:=0toNum-1doDistance[k]:=0;MinGroupNum:=0;Fork:=0to2doDistance[0]:=Distance[0]+DeT[K]*sqr(NewGroup[k]-HSL[K]);//距離判斷fori:=1toNum-1dobegin//與哪個(gè)類(lèi)的距離最小,就將這個(gè)點(diǎn)分配到那個(gè)類(lèi)的顏色Fork:=0to2doDistance[i]:=Distance[i]+DeT[K]*sqr(NewGroup[3*i+k]-HSL[K]);ifDistance[i]<Distance[MinGroupNum]thenMinGroupNum:=i;end;//將HSL的值變?yōu)镽,G,B的值H:=NewGroup[MinGroupNum*3+0];//色調(diào)S:=NewGroup[MinGroupNum*3+1];//飽和度L:=NewGroup[MinGroupNum*3+2];//亮度HSL_TO_RGB(trunc(3。6*H),S,L,R,G,B);p[3*x+2]:=R;p[3*x+1]:=G;p[3*x+0]:=B;end;end;BloodImage。Picture。Bitmap。Assign(Bmp);bmp。Free;end;7.3彩色圖像FCMprocedureTMDIChild。GrayFCMClick(Sender:TObject);varFound,Update:bool;p:PByteArray;i,j,k,x,y,a,b,c,g,MinGroupNum,Num,IteriationTime:Integer;Bmp:TBitmap;UpperTemp,DownTemp,v,vl:arrayofsingle;OldMatrix,NewMatrix,u:arrayofarrayofsingle;Dis,Gray:arrayofsingle;Temp,oldj,newj:single;beginself。DoubleBuffered:=true;//設(shè)置雙緩沖Bmp:=Tbitmap。Create;Bmp。Assign(BloodImage。Picture。Bitmap);Bmp。PixelFormat:=pf24bit;Num:=StrToInt(ClusterNumEdit。Text);SetLength(OldMatrix,Num,Bmp。Height*Bmp。Width);SetLength(NewMatrix,Num,Bmp。Height*Bmp。Width);SetLength(u,Num,Bmp。Height*Bmp。Width);SetLength(Gray,Bmp。Height*Bmp。Width);SetLength(v,Num);SetLength(vl,Num);SetLength(Dis,Num);SetLength(UpperTemp,Num);SetLength(DownTemp,Num);Randomize;//隨機(jī)數(shù)種子化forj:=0toBmp。Height*Bmp。Width-1dobeginTemp:=0。0;fori:=0toNum-1dobegin//取Uij的初始值u[i,j]:=0。1+random(100);//隨機(jī)設(shè)定UijTemp:=Temp+u[i,j];//U0j+U1j+。。。+Ucjend;fori:=0toNum-1dobeginu[i,j]:=u[i,j]/Temp;//歸一化end;end;Found:=False;Update:=false;//求所有特征Xi//fory:=0toBmp。Height-1dobeginp:=Bmp。ScanLine[y];forx:=0toBmp。Width-1dobegin//Gray[y*Bmp。Width+x]:=0。299*P[3*x+2]+0。587*P[3*x+1]+0。11*P[3*x];end;//endxend;//endyFound:=false;Update:=false;IteriationTime:=0;newj:=0;//開(kāi)始迭代//while(notFound)dobeginoldj:=newj;//記錄上一次價(jià)值函數(shù)的值fori:=0toNum-1doforj:=0toBmp。Height*Bmp。Width-1doOldMatrix[i,j]:=u[i,j];////計(jì)算聚類(lèi)中心//fori:=0toNum-1dobeginUpperTemp[i]:=0;DownTemp[i]:=0;vl[i]:=v[i];end;forj:=0toBmp。Width*Bmp。Height-1dofori:=0toNum-1dobeginUpperTemp[i]:=UpperTemp[i]+sqr(u[i,j])*Gray[j];DownTemp[i]:=DownTemp[i]+sqr(u[i,j]);end;fori:=0toNum-1dobeginv[i]:=UpperTemp[i]/(DownTemp[i]+0。001);end;ifIteriationTime=0then//迭代的第一次beginfork:=0tonum-1dov[k]:=255/(k+1);end;//更新u矩陣//forj:=0toBmp。Width*Bmp。Height-1dobeginfori:=0toNum-1dobegin//如果dij=||Vi-Xj||=c,滿足精度要求,update=true,temp=i,跳出x循環(huán)ifdistance(v[i],Gray[j])<3thenbeginupdate:=True;Temp:=i;break;end;//如果對(duì)于所有Vi,||Vi-Xj||<>0,update=falseifi=Num-1thenupdate:=false;end;ifupdatethenbeginfori:=0toNum-1dobeginifi=tempthenu[i,j]:=1elseu[i,j]:=0;end;endelsebegintemp:=0;fori:=0toNum-1dobeginfork:=0toNum-1dobegintemp:=temp+sqr(distance(v[i],Gray[j])/distance(v[k],Gray[j]));end;u[i,j]:=1/temp;end;end;update:=false;end;Temp:=0;fori:=0toNum-1doforj:=0toBmp。Height*Bmp。Width-1dobeginTemp:=Temp+distance(OldMatrix[i,j],u[i,j]);end;iftemp<0。5thenfound:=Trueelsefound:=false;if(notfound)thenbeginx:=0;fori:=0toNum-1dobeginif(trunc(v[i])=trunc(vl[i]))thenInc(x);end;ifx=3thenfound:=Trueelsefound:=false;end;Inc(IteriationTime);ifIteriationTime=50thenfound:=true;//最多迭代50次IteriationTimeEdit。Text:=IntToStr(IteriationTime);end;//endwhilefory:=0toBmp。Height-1dobeginp:=Bmp。ScanLine[y];forx:=0toBmp。Width-1dobegin//將各點(diǎn)的灰度取已分的各類(lèi)的顏色fork:=0toNum-1doDis[k]:=0;MinGroupNum:=0;fork:=0to2doDis[0]:=Dis[0]+sqr(v[0]-p[3*x+k]);fori:=1toNum-1dobeginfork:=0to2doDis[i]:=Dis[i]+sqr(v[i]-p[3*x+k]);ifDis[i]<Dis[MinGroupNum]thenMinGroupNum:=i;end;fork:=0to2dobegin//各點(diǎn)取已分群的灰度等級(jí)p[3*x+k]:=round(v[MinGroupNum]);end;end;end;BloodImage。Picture。Bitmap。Assign(Bmp);bmp。Free;end;////////////////////////////////////////////////7.4灰色圖像FCMprocedureTMDIChild。ColorFCMClick(Sender:TObject);varFound,Update:bool;p:PByteArray;i,j,k,x,y,a,b,c,g,MinGroupNum,red,green,blue,Num,IteriationTime:Integer;Bmp:TBitmap;UpTemp,DownTemp,v:arrayofsingle;Temp,oldj,newj:single;OldMatrix,NewMatrix,u:arrayofarrayofsingle;RGBSub:arrayofsingle;dis:arrayofsingle;uLimit,obj:single;beginself。DoubleBuffered:=true;//設(shè)置雙緩沖Bmp:=Tbitmap。Create;Bmp。Assign(BloodImage。Picture。Bitmap);Bmp。PixelFormat:=pf24bit;Num:=StrToInt(ClusterNumEdit。Text);SetLength(OldMatrix,3*Num,3*Bmp。Height*Bmp。Width);SetLength(NewMatrix,3*Num,3*Bmp。Height*Bmp。Width);SetLength(u,3*Num,3*Bmp。Height*Bmp。Width);SetLength(RGBSub,3*Bmp。Height*Bmp。Width);SetLength(v,3*Num);SetLength(UpTemp,3*Num);SetLength(DownTemp,3*Num);SetLength(dis,3*Num);Randomize;IteriationTimeEdit。Text:='0';forj:=0toBmp。Height*Bmp。Width-1dobeginTemp:=0。0;fori:=0to3*Num-1dobegin//取Uij的初始值u[i,j]:=0。1+0。01*random(300);//隨機(jī)設(shè)定UijTemp:=Temp+u[i,j];//U0j+U1j+。。。+Ucjend;fori:=0toNum*3-1dobeginu[i,j]:=u[i,j]/Temp;//歸一化處理end;end;Found:=False;Update:=false;uLimit:=0。05;//求所有Xi//fory:=0toBmp。Height-1dobeginp:=Bmp。ScanLine[y];forx:=0toBmp。Width-1dobeginfork:=0to2doRGBSub[3*(y*Bmp。Width+x)+k]:=P[3*x+k];end;//endxend;//endyFound:=false;Update:=false;IteriationTime:=0;newj:=0;//開(kāi)始迭代//while(notFound)dobeginIteriationTimeEdit。Text:=IntToStr(IteriationTime);oldj:=newj;//記錄上一次價(jià)值函數(shù)的值fori:=0to3*Num-1doforj:=0to3*Bmp。Height*Bmp。Width-1doOldMatrix[i,j]:=u[i,j];//計(jì)算聚類(lèi)中心//fori:=0to3*Num-1dobeginv[i]:=0;UpTemp[i]:=0;DownTemp[i]:=0;end;ifg=0then//第一次迭代,取初始值beginfori:=0toNum-1dobeginfork:=0to2do//初始的類(lèi)的顏色中心v[3*i+k]:=100-(100/(1+k))*(i+1)end;end;forj:=0to3*Bmp。Width*Bmp。Height-1dofori:=0to3*Num-1dobeginUpTemp[i]:=UpTemp[i]+sqr(u[i,j])*RGBSub[j];DownTemp[i]:=DownTemp[i]+sqr(u[i,j]);end;fori:=0to3*Num-1dobeginv[i]:=UpTemp[i]/(0。001+DownTemp[i]);end;//更新u矩陣//forj:=0to3*Bmp。Width*Bmp。Height-1dobeginfori:=0to3*Num-1dobegin//如果dij=||Vi-Xj||=c,//如每個(gè)點(diǎn)的顏色與類(lèi)的顏色距離滿足精度要求ifdistance(v[i],RGBSub[j])<9thenbeginupdat

溫馨提示

  • 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)論