版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、分水嶺算法code /Image Watershed Segmentation /This is the implementation of the algorithm based on immersion model. / = = / = Module: Watershed.cpp / = - = = / = Version 01 Date: 04/21/2003 / = - = = / = = / = Written by F / = e-mail: gong200 / = = / Permission to use, copy, or modify this
2、software and its documentation / for educational and research purposes only is hereby granted without / fee, provided that this copyright notice appear on all copies and / related documentation. For any other uses of this software, in original / or modified form, including but not limited to distrib
3、ution in whole / or in part, specific prior permission must be obtained from / the author(s). / / THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND, / EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY / WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR
4、PURPOSE. / / IN NO EVENT SHALL RUTGERS UNIVERSITY BE LIABLE FOR ANY SPECIAL, / INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND, OR ANY / DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, / WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY / THEORY OF LIABILITY,
5、ARISING OUT OF OR IN CONNECTION WITH THE USE / OR PERFORMANCE OF THIS SOFTWARE. / =#include <queue> #include <vector> #include <windows.h> /*= 函數(shù)名 : Watershed 功能 : 用標記-分水嶺算法對輸入圖像進行分割 算法實現(xiàn) : 無 輸入?yún)?shù)說明 : OriginalImage -輸入圖像(灰度圖,0255) SeedImage -標記圖像(二值圖,0-非 標 記,1-標記) LabelImage -輸出圖像(
6、1-第一個分割 區(qū) 域,2-第二個分割區(qū)域,.) row -圖像行數(shù) col -圖像列數(shù) 返回值說明 : 無 =*/ void Watershed(const int *OriginalImage, char* SeedImage, int *LabelImage , int row, int col) using namespace std; /標記區(qū)域標識號,從1開始 int Num=0; int i,j; /保存每個隊列種子個數(shù)的數(shù)組 vector<int*> SeedCounts; /臨時種子隊列 queue<POINT> que; /保存所有標記區(qū)域種子隊列的
7、數(shù)組 vector<queue<POINT>* > qu; int* array; queue<POINT> *uu; POINT temp; for(i=0;i<row;i+) for(j=0;j<col;j+) LabelImageij=0; int m,n,k=0; int up,down,right,left,upleft,upright,downleft,downright; /預處理,提取區(qū)分每個標記區(qū)域,并初始化每個標記的種子隊列 /種子是指標記區(qū)域邊緣的點,他們可以在水位上升時向外淹沒(或者說生長) for(i=0;i<ro
8、w;i+) for(j=0;j<col;j+) /如果找到一個標記區(qū)域 if(SeedImageij=1) /區(qū)域的標識號加一 Num+; /分配數(shù)組并初始化為零 array=new int256; ZeroMemory(array,256*sizeof(int); / SeedCounts.push_back(array); /分配本標記的優(yōu)先隊列 uu=new queue<POINT>256; /加入到隊列數(shù)組中 qu.push_back(uu); /當前點放入本標記區(qū)域的臨時種子隊列中 temp.x=i; temp.y=j; que.push(temp); /當前點標記
9、為已處理 LabelImageij=Num; SeedImageij=127; /讓種子隊列中的種子進行生長直到所有的種子都生 長 完畢while(!que.empty() up=down=right=left=0; upleft=upright=downleft=downright=0; /隊列中取出一個種子 temp=que.front(); m=temp.x; n=temp.y; que.pop(); if(m>0) /上方若為可生長點則加為新種子 if(SeedImagem-1n=1) temp.x=m-1; temp.y=n; que.push(temp); /新種子點標記為已
10、淹沒 區(qū) 域 LabelImagem-1n=Num ; SeedImagem-1n=127; else/否則上方為不可生長 up=1; if(m>0&&n>0) if(SeedImagem-1n-1=1)/左 上 方若為可生長點則加為新種子 temp.x=m-1; temp.y=n-1; que.push(temp); /新種子點標記為已淹沒 區(qū) 域 LabelImagem-1n-1=Num; SeedImagem-1n-1=12 7; else/否則左上方為不可生長 upleft=1; if(m<row-1) if(SeedImagem+1n=1)/下方 若
11、 為可生長點則加為新種子 temp.x=m+1; temp.y=n; que.push(temp); /新種子點標記為已淹沒 區(qū) 域 LabelImagem+1n=Num ; SeedImagem+1n=127; else/否則下方為不可生長 down=1; if(m<(row-1)&&n<(col-1) if(SeedImagem+1n+1=1)/下 方 若為可生長點則加為新種子 temp.x=m+1; temp.y=n+1; que.push(temp); /新種子點標記為已淹沒 區(qū) 域 LabelImagem+1n+1=Num; SeedImagem+1n+1
12、=12 7; else/否則下方為不可生長 downright=1; if(n<col-1) if(SeedImagemn+1=1)/右方 若 為可生長點則加為新種子 temp.x=m; temp.y=n+1; que.push(temp); /新種子點標記為已淹沒 區(qū) 域 LabelImagemn+1=Num ; SeedImagemn+1=127; else/否則右方為不可生長 right=1; if(m>0&&n<(col-1) if(SeedImagem-1n+1=1)/右 上 方若為可生長點則加為新種子 temp.x=m-1; temp.y=n+1;
13、 que.push(temp); /新種子點標記為已淹沒 區(qū) 域LabelImagem-1n+1=Num; SeedImagem-1n+1=12 7; else/否則右上方為不可生長 upright=1; if(n>0) if(SeedImagemn-1=1)/左方 若 為可生長點則加為新種子 temp.x=m; temp.y=n-1; que.push(temp); /新種子點標記為已淹沒 區(qū) 域 LabelImagemn-1=Num ; SeedImagemn-1=127; else/否則左方為不可生長 left=1; if(m<(row-1)&&n>0)
14、 if(SeedImagem+1n-1=1)/左 下 方若為可生長點則加為新種子 temp.x=m+1; temp.y=n-1; que.push(temp); /新種子點標記為已淹沒 區(qū) 域 LabelImagem+1n-1=Num; SeedImagem+1n-1=12 7; else/否則左方為不可生長 downleft=1; /上下左右只要有一點不可生長,那么本點 為 初始種子隊列中的一個 if(up|down|right|left| upleft|downleft|upright|downright) temp.x=m; temp.y=n; quNum-1OriginalImagem
15、n.push(temp); SeedCountsNum-1OriginalImagemn+; /while結(jié)束 bool actives;/在某一水位處,所有標記的種子生長完的標志 int WaterLevel; /淹沒過程開始,水位從零開始上升 for(WaterLevel=0;WaterLevel<256;WaterLevel+) actives=true; while(actives) actives=false; /依次處理每個標記區(qū)域 for(i=0;i<Num;i+) if(!quiWaterLevel.empty() actives=true; while(SeedC
16、ountsiWaterLevel>0) SeedCountsiWaterLevel-; temp=quiWaterLevel.front(); quiWaterLevel.pop(); m = temp.x; n = temp.y;/當前種子的坐標 if(m>0) if(!LabelImagem-1n)/上方若 未處理 temp.x=m-1; temp.y=n; LabelImagem-1n=i+1;/上方點標記為已淹沒區(qū)域 if(OriginalImagem-1n<=WaterLevel)/上方若為可生長點則加入當前隊列 quiWaterLevel.push(temp);
17、else/否則加入 OriginalImagem-1n級隊列 quiOriginalImagem-1n.push(temp); SeedCountsiOriginalImagem-1n+; if(m<row-1) if(!LabelImagem+1n)/下方若 未處理 temp.x=m+1; temp.y=n; LabelImagem+1n=i+1;/下方點標記為已淹沒區(qū)域 if(OriginalImagem+1n<=WaterLevel)/下方若為可生長點則加入當前隊列 quiWaterLevel.push(temp); else/否則加入 OriginalImagem+1n級隊
18、列 quiOriginalImagem+1n.push(temp); SeedCountsiOriginalImagem+1n+; if(n<col-1) if(!LabelImagemn+1)/右邊若 未處理 temp.x=m; temp.y=n+1; LabelImagemn+1=i+1;/右邊點標記為已淹沒區(qū)域 if(OriginalImagemn+1<=WaterLevel)/右邊若為可生長點則加入當前隊列 quiWaterLevel.push(temp); else/否則加入 OriginalImagemn+1級隊列 quiOriginalImagemn+1.push(temp); SeedCountsiOriginalImagemn+1+; if(n>0) if(!LabelImagemn-1)/左邊若未處理 temp.x=m; temp.y=n-1; LabelImagemn-1=i+1;/左邊點標記為已淹沒區(qū)域 if(OriginalImagemn-1<=WaterLevel)/左邊若為可生長點則加入當前隊列 quiWaterLevel.push(temp); else/否則加入 OriginalImagemn-1級隊列 quiO
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 地面輻射供暖系統(tǒng)地面磚面層施工技術(shù)探討
- 初一理化生神經(jīng)系統(tǒng)組成
- 語法練習和答案-定語從句練習
- 高中語文專題3文明的對話第12課傳統(tǒng)文化與文化傳統(tǒng)課件蘇教版必修
- 2024-2025學年八年級上學期英語期中復習之Unit1~unit4語法復習及練習(譯林版)
- 專業(yè)技術(shù)人員繼續(xù)教育答案職業(yè)生涯規(guī)劃與管理滿分
- 六年級心理健康教育教案參考修改版
- 匯率制與匯率政策
- Unit 5 A healthy lifestyle Reading2課時練(無答案)
- 部編版二上語文識字4田家四季歌圖文
- (新版)特種設(shè)備安全管理取證考試題庫(濃縮500題)
- 公司信息化調(diào)研情況匯報(4篇)
- 期中測試卷-2024-2025學年統(tǒng)編版語文五年級上冊
- 小學數(shù)學小專題講座《數(shù)學教學生活化-》
- 2024年秋國家開放大學《形勢與政策》大作業(yè)試題:中華民族現(xiàn)代文明有哪些鮮明特質(zhì)?建設(shè)中華民族現(xiàn)代文明的路徑是什么?【附:2份參考答案】
- 北師大版(2019) 選擇性必修第一冊 Unit 3 Conservation Lesson 3 The Road to Destruction教案
- 黑龍江省哈爾濱市第四十七中學校2024-2025學年(五四制)九年級上學期9月月考語文試題
- 教科版五年級上冊科學全冊教學反思
- 2024至2030年中國高嶺土產(chǎn)業(yè)園區(qū)市場深度調(diào)查與投資前景咨詢報告
- 中學英語八年級《How often do you exercise》說課稿
- 2024江蘇揚州市邗江區(qū)邗糧農(nóng)業(yè)發(fā)展限公司招聘總賬會計1人(高頻重點提升專題訓練)共500題附帶答案詳解
評論
0/150
提交評論