




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、函數(shù)名:Watershed功能:用標(biāo)記-分水嶺算法對輸入圖像進(jìn)行分割算法實現(xiàn):無輸入?yún)?shù)說明:OriginalImage-輸入圖像(灰度圖,0255)SeedImage-標(biāo)記圖像(二值圖,0-非標(biāo)記,1-標(biāo)記)LabelImage-輸出圖像(1-第一個分割區(qū)域,2-第二個分割區(qū)域,.)row-圖像行數(shù)col-圖像列數(shù)無=*/voidWINAPICDib:Watershed(unsignedchar*OriginalImage,char*SeedImage,int*LabelImage,introw,intcol)/usingnamespacestd;/標(biāo)記區(qū)域標(biāo)識號,從1開始intNum=0;
2、inti,j;/保存每個隊列種子個數(shù)的數(shù)組vectorSeedCounts;/臨時種子隊列queuequetem;/保存所有標(biāo)記區(qū)域種子隊列的數(shù)組,里面放的是種子隊列的指針vectorqueue*vque;int*array;/指向種子隊列的指針queue*pque;POINTtemp;for(i=0;irow;i+)for(j=0;jcol;j+)LabelImageij=0;intm,n,k=0;BOOLup,down,right,left,upleft,upright,downleft,downright;/8directions./預(yù)處理,提取區(qū)分每個標(biāo)記區(qū)域,并初始化每個標(biāo)記的種子隊
3、列/種子是指標(biāo)記區(qū)域邊緣的點,他們可以在水位上升時向外淹沒(或者說生長)/panswords:我的理解是梯度值較小的象素點,或者是極小灰度值的點。for(i=0;irow;i+)for(j=0;jcol;j+)/如果找到一個標(biāo)記區(qū)域if(SeedImageij=1)/區(qū)域的標(biāo)識號加一Num+;/分配數(shù)組并初始化為零,表示可有256個灰階array=newint256;ZeroMemory(array,256*sizeof(int);種子個數(shù)數(shù)組進(jìn)vector,每次掃描則生成一個數(shù)組,并用區(qū)域標(biāo)識號來做第一維?;叶燃壸龅诙S。/表示某個盆地區(qū)域中某灰階所對應(yīng)的點的數(shù)目。SeedCounts.pu
4、sh_back(array);/分配本標(biāo)記號的優(yōu)先隊列,256個種子隊列,/表示對應(yīng)一個灰階有一個隊列,并且每個隊列可以存儲一個集合的點信息pque=newqueue256;加入到隊列數(shù)組中,對應(yīng)的是本標(biāo)記號Num的vque.push_back(pque);/當(dāng)前點放入本標(biāo)記區(qū)域的臨時種子隊列中temp.x=i;temp.y=j;quetem.push(temp);/當(dāng)前點標(biāo)記為已處理LabelImageij=Num;Seedlmageij=127;表示已經(jīng)處理過/讓臨時種子隊列中的種子進(jìn)行生長直到所有的種子都生長完畢生長完畢后的隊列信息保存在vque中,包括區(qū)域號和灰階,對應(yīng)點數(shù)存儲在see
5、dcounts中while(!quetem.empty()up=down=right=left=FALSE;upleft=upright=downleft=downright=FALSE;/隊列中取出一個種子temp=quetem.front();m=temp.x;n=temp.y;quetem.pop();/注意到127對掃描過程的影響,影響下面的比較,但是不影響while語句中的掃描if(m0)/上方若為可生長點則加為新種子if(Seedlmagem-1n=1)temp.x=m-1;temp.y=n;quetem.push(temp);/如果這樣的話,那么這些標(biāo)記過的區(qū)域?qū)⒃俅卧趙hile
6、循環(huán)中被掃描到,不會,因為值是127新種子點標(biāo)記為已淹沒區(qū)域,而且是當(dāng)前區(qū)域,并記錄區(qū)域號到labellmageLabelImagem-1n=Num;Seedlmagem-1n=127;else/否則上方為不可生長up=TRUE;if(m0&n0)if(Seedlmagem-1n-1=1)左上方若為可生長點則加為新種子temp.x=m-1;temp.y=n-1;quetem.push(temp);/新種子點標(biāo)記為已淹沒區(qū)域,即下一個循環(huán)中以127來標(biāo)識不再掃描,而且是當(dāng)前區(qū)域Labellmagem-1n-1=Num;Seedlmagem-1n-1=127;else/否則左上方為不可生長uple
7、ft=TRUE;if(mrow-1)if(Seedlmagem+1n=1)下方若為可生長點則加為新種子temp.x=m+1;temp.y=n;quetem.push(temp);/新種子點標(biāo)記為已淹沒區(qū)域,而且是當(dāng)前區(qū)域Labellmagem+1n=Num;Seedlmagem+1n=127;else/否則下方為不可生長down=TRUE;if(m(row-1)&n(col-1)if(Seedlmagem+1n+1=1)下方若為可生長點則加為新種子temp.x=m+1;temp.y=n+1;quetem.push(temp);/新種子點標(biāo)記為已淹沒區(qū)域,而且是當(dāng)前區(qū)域Labellmagem+1
8、n+1=Num;Seedlmagem+1n+1=127;else/否則下方為不可生長downright=TRUE;if(n0&n(col-1)if(SeedImagem-1n+1=1)右上方若為可生長點則加為新種子temp.x=m-1;temp.y=n+1;quetem.push(temp);/新種子點標(biāo)記為已淹沒區(qū)域,而且是當(dāng)前區(qū)域LabelImagem-1n+1=Num;SeedImagem-1n+1=127;else/否則右上方為不可生長upright=TRUE;nvo)宀seed_magem彳)=d氓兇曰妖木汀昌豈兇蛍尊T宀iemp.xHmiiemp.yHn-queiem.pushae
9、mpr,/蛍尊汀跡擊兇口番萍岡垃Labe-magm一1一HNUmiseemagem一二27e_se/羽昌卅曰妖木宀TRUEmArowQnvo)宀Seed_mag2m士一二彳二氓兇曰妖木汀昌豈兇蛍尊T宀iemp.xHm+l-iemp.yHn-queiem.pushaempr,/蛍尊汀跡擊兇口番萍岡垃Labe-magem+nNum-seemagem十二二27e_se/羽昌卅曰妖木宀down-eftHTRUE/kT卅氓-nfflw汀承曰妖木“-Z卿汀兇甘-尊-丹3/何陽曰羽妖木淞seedimage丹晞冊。if(up=dow-l1ghi=-eup-edoweuprighi-downhi)宀iemp.x
10、Hmiiemp.yHP二T何卅遊蜀“usss/mmwhi-e陽亠淞洲汀。/Num是當(dāng)前的區(qū)域號/這樣這個二維信息就表示了,某個區(qū)域中對應(yīng)某個灰度級對應(yīng)的成員點的集合與個數(shù)/分別由下面兩個量來表達(dá)vqueNum-10riginallmagemn.push(temp);這兩句中我把Num-1改成了Num.panscodes.SeedCountsNum-1OriginalImagemn+;/while結(jié)束,掃描到quetem為空而止。也就是對應(yīng)所有的節(jié)點都得到不可生長為止(或者是周圍的點要么不可生長,要么已生長)/if結(jié)束/if(Num=5)/return;/在上述過程中,如果標(biāo)記的點為0則表示,沒
11、有掃描到的點,或者表明不是輸入的種子點這里相當(dāng)于是找seedimage傳過來的初始區(qū)域的分水嶺界線的所有的點;并且用標(biāo)號記錄每個區(qū)域,同時集水盆的邊緣點進(jìn)入隊列。/上面是找集水盆的程序。同時也是連通區(qū)域。/*/test這里測試一下剩下的非水盆地的點數(shù)。intseednum;for(i=0;irow;i+)for(j=0;jcol;j+)if(Seedlmageij=0)seednum+;CStringstr;str.Format(preregionnum:%d,Num);AfxMessageBox(str);/*/boolactives;/在某一水位處,所有標(biāo)記的種子生長完的標(biāo)志intWate
12、rLevel;/淹沒過程開始,水位從零開始上升,水位對應(yīng)灰度級,采用四連通法for(WaterLevel=0;WaterLevel180;WaterLevel+)第二維。actives=true;while(actives)actives=false;/依次處理每個標(biāo)記號所對應(yīng)的區(qū)域,且這個標(biāo)記號對應(yīng)的區(qū)域的點的個數(shù)在SeedCounts里面for(i=0;i0)SeedCountsiWaterLevel-;/取出一個點,個數(shù)少一temp=vqueiWaterLevel.front();取出該區(qū)域的一個點,清空這個邊緣點,表示當(dāng)前/灰度級該像素已經(jīng)處理掉了。vqueiWaterLevel.po
13、p();m=temp.x;n=temp.y;/當(dāng)前種子的坐標(biāo)if(m0)if(!Labellmagem-1n)上方若未處理,表示沒有標(biāo)號,應(yīng)該在輸入前已經(jīng)作過初始化為0/本函數(shù)中在開頭也作過初始化temp.x=m-1;temp.y=n;LabelImagem-1n=i+1;上方點標(biāo)記為已淹沒區(qū)域/注意到這個標(biāo)記是與掃描點的區(qū)域號相同,一定在這個標(biāo)號所屬的區(qū)域嗎?是的/這樣在下一輪至少會掃描到這個點,確保不遺漏,但是下一輪的處理會使它合理/歸類嗎?問題還有這樣標(biāo)記并沒有一定將它加入到種子隊列。也就是說它/只是被淹沒而不能向上淹沒。只有滿足下述可生長條件才行。if(Originallmagem-1
14、n=WaterLevel)上方若為可生長點則加入當(dāng)前隊列,當(dāng)前高度的隊列vqueiWaterLevel.push(temp);else/否則加入Originallmagem-1n對應(yīng)的灰度級的隊列,為什么?vqueiOriginallmagem-1n.push(temp);SeedCountsiOriginallmagem-1n+;if(mrow-1)if(!Labellmagem+1n)下方若未處理temp.x=m+1;temp.y=n;LabelImagem+1n=i+1;下方點標(biāo)記為已淹沒區(qū)域if(Originallmagem+1n=WaterLevel)下方若為可生長點則加入當(dāng)前隊列v
15、queiWaterLevel.push(temp);else/否則加入Originallmagem+1n級隊列vqueiOriginallmagem+1n.push(temp);SeedCountsiOriginallmagem+1n+;if(ncol-1)if(!Labellmagemn+1)右邊若未處理temp.x=m;temp.y=n+1;Labellmagemn+1=i+1;右邊點標(biāo)記為已淹沒區(qū)域if(Originallmagemn+10)if(!LabelImagemn-1)左邊若未處理temp.x=m;temp.y=n-1;Labellmagemn-1=i+1;左邊點標(biāo)記為已淹沒區(qū)
16、域if(Originallmagemn-1=WaterLevel)左邊若為可生長點則加入當(dāng)前隊列vqueiWaterLevel.push(temp);else/否則加入Originallmagemn-1級隊列vqueiOriginalImagemn-1.push(temp);SeedCountsiOriginalImagemn-1+;/while循環(huán)結(jié)束SeedCountsiWaterLevel=vqueiWaterLevel.size();/if結(jié)束/for循環(huán)結(jié)束/while循環(huán)結(jié)束/for循環(huán)結(jié)束/*/testwhethertheorigionalsegmentationnumischa
17、nonzeronum=Num;for(m=0;mNum;m+)for(i=0;irow;i+)for(j=0;jcol;j+)if(LabelImageij=m)break;if(LabelImageij=m)break;if(j=col-1&i=row-1&LabelImageij!=m)nonzeronum-;str.Format(”newregionnum:%d,nonzeronum);這表示的是可擴(kuò)張的點AfxMessageBox(str);/*/while(!vque.empty()pque=vque.back();deletepque;vque.pop_back()
18、;while(!SeedCounts.empty()array=SeedCounts.back();deletearray;SeedCounts.pop_back();/在主程序中的調(diào)用代碼如下(用于處理8位圖)/getoneimage.CAPCountMDoc*pDoc=GetDocument();HDIBm_hDIBOptFlo=OnReadimage();/HDIB是Dib圖像句柄LPSTRlpDIB2=(LPSTR):GlobalLock(HGLOBAL)m_hDIBOptFlo);intm_imageH=viewdib.DIBHeight(lpDIB2);intm_imageW=vi
19、ewdib.DIBWidth(lpDIB2);/viewdib.MedianFilter(lpDIB2,m_imageW,m_imageH,3,3,1,1);/filterLPSTRlpDIBBits=viewdib.FindDIBBits(lpDIB2);DWORDDWidth=WIDTHBYTES(m_imageW*8);/watershed.LPSTRlpDIBG=viewdib.MakeGray8Bmp(lpDIB2);lpDIBG=viewdib.GetGrad(lpDIBG);LPSTRlpDIBBitsG=viewdib.FindDIBBits(lpDIBG);inti,k,num=0;intm=0,n=0;/getoritionalimageunsignedchar*ori_image;ori_image=alloc_uszchar_space(m_imageH,m_imageW);for(i=0;im_imageH;i+)for(k=0;km_imageW;k+)ori_imageik=*(lpDIBBitsG+i*DWidth+k);/getseedimagean
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 倉庫機(jī)械租賃合同范本
- 凍肉投放合同范本
- 加工制作合同范本門窗
- 產(chǎn)品推廣居間合同范本
- 加盟合同范本奶茶
- 健身收購合同范本
- 出租黃色圍擋合同范例
- 中國國家展覽中心合同范例
- 住宅租賃房屋合同范例
- 2024年溫州鹿城農(nóng)商銀行招聘筆試真題
- 2024年度-銀行不良清收技巧培訓(xùn)課件(學(xué)員版)
- 《書籍裝幀設(shè)計》 課件 項目3 書籍裝幀整體設(shè)計
- 【可行性報告】2023年糧油加工項目可行性研究分析報告
- 部編版小學(xué)語文四年級下冊第二單元教材分析
- (西師大版)數(shù)學(xué)二年級下冊“雙減”下的堂上作業(yè)設(shè)計
- 參考消息電子版在線閱讀(角度區(qū))
- 2024年山東省春季高考技能考試汽車專業(yè)試題庫-上(單選題匯總)
- 2024年湖南高速鐵路職業(yè)技術(shù)學(xué)院高職單招(英語/數(shù)學(xué)/語文)筆試歷年參考題庫含答案解析
- 2016-2023年湖南鐵路科技職業(yè)技術(shù)學(xué)院高職單招(英語/數(shù)學(xué)/語文)筆試歷年參考題庫含答案解析
- 2016-2023年江蘇農(nóng)林職業(yè)技術(shù)學(xué)院高職單招(英語/數(shù)學(xué)/語文)筆試歷年參考題庫含答案解析
- 狼道的讀后感課件
評論
0/150
提交評論