自然水系 或分水嶺 自動提取的matlab實現方案

2022-05-08 04:39:04 字數 2405 閱讀 2723

水系提取演算法(d8)的matlab實現

d8演算法是當今非常成熟的提取水系(或分水嶺)的計算機實現方法。這裡筆者結合自身的程式設計實踐介紹d8演算法的matlab實現過程,謹與大家分享。

d8演算法分為兩部分實現:每個柵格點水流方向的計算;每個柵格點匯水面積的計算。

1、水流方向的計算

在水流方向的計算中,本人結合matlab內嵌的濾波工具,利用乙個簡單的非線性濾波來實現,具體內容包括乙個自己編輯的確定水流方向的函式flowdirection和若干指令碼命令,如下:

以下是自己編輯的flowdirection函式**:

function output=flowdirection(a)

n=size(a);

for i=1:n(2)

k=0;

b=-inf;

for j=[1:4,6:9]

if rem(j,2)==0

r(j)=a(5,i)-a(j,i);

else

r(j)=(a(5,i)-a(j,i))/sqrt(2);

endif r(j)>b

b=r(j);

k=j;

endendoutput(i)=k;

end執行的指令碼**如下:

>> uiopen('f:\課件\2009田淑芳\正射校正\',1)%開啟dem高程資料,生成的資料矩陣名可自行定義,這裡預設為dem

>>dem=mat2gray(dem);%高程資料歸一化處理

>>dem=padarray(dem,[1 1],'replicate');%對資料邊緣進行自動填充

>>direc8=colfilt(dem,[3 3],'sliding',@flowdirection);%執行非線性濾波,得到方向矩陣,得到的值分別為.其方向意義如上圖矩陣所示,如1代表北西向,8代表正東

1、匯水面積的計算

這裡筆者根據自己的程式設計實踐經驗,給出乙個函式來計算不同視窗大小下匯水面積的大小。函式**如下:

function f=flowareax(a,x)

%引數a為水流方向矩陣,x為表徵視窗大小的引數,

b=a;

[m n]=size(b);

f=ones([m+2 n+2 x]);%預設每點有一初始水量

for i=1:m

for j=1:n

if a(i,j)==1

f(i,j,1)=f(i,j,1)+1;

elseif a(i,j)==2

f(i+1,j,1)=f(i+1,j,1)+1;

elseif a(i,j)==3

f(i+2,j,1)=f(i+2,j,1)+1;

elseif a(i,j)==4

f(i,j+1,1)=f(i,j+1,1)+1;

elseif a(i,j)==6

f(i+2,j+1,1)=f(i+2,j+1,1)+1;

elseif a(i,j)==7

f(i,j+2,1)=f(i,j+2,1)+1;

elseif a(i,j)==8

f(i+1,j+2,1)=f(i+1,j+2,1)+1;

else

f(i+2,j+2,1)=f(i+2,j+2,1)+1;

endendend%通過該迴圈確定經過一步流動時某一點水流量

for s=2:x

for i=1:m

for j=1:n

if a(i,j)==1

f(i,j,s)=f(i,j,s)+f(i+1,j+1,s-1);

elseif a(i,j)==2

f(i+1,j,s)=f(i+1,j,s)+f(i+1,j+1,s-1);

elseif a(i,j)==3

f(i+2,j,s)=f(i+2,j,s)+f(i+1,j+1,s-1);

elseif a(i,j)==4

f(i,j+1,s)=f(i,j+1,s)+f(i+1,j+1,s-1);

elseif a(i,j)==6

f(i+2,j+1,s)=f(i+2,j+1,s)+f(i+1,j+1,s-1);

elseif a(i,j)==7

f(i,j+2,s)=f(i,j+2,s)+f(i+1,j+1,s-1);

elseif a(i,j)==8

f(i+1,j+2,s)=f(i+1,j+2,s)+f(i+1,j+1,s-1);

else

f(i+2,j+2,s)=f(i+2,j+2,s)+f(i+1,j+1,s-1);

end end

endendf=f(2:m+1,2:n+1,:);

該函式的執行結果為乙個三維資料體,其中f(:,:,1)、f(:

,:,2)、。。。。f(:

,:,x)依次代表了不同視窗下每個柵格點的匯水面積,可以根據對比他們的效果並且根據需要選擇不同的資料層。

需要幫助

影象處理分水嶺演算法實驗報告

一 實驗目的 1.通過matlab實驗的具體操作來掌握空間影象處理演算法 2.通過實驗來驗證所學知識,達到學以致用 3.通過實驗來了解分水嶺演算法的優缺點。二 實驗原理 分水嶺分割方法,是一種基於拓撲理論的數學形態學的分割方法,其基本思想是把影象看作是測地學上的拓撲地貌,影象中每一點畫素的灰度值表示...

分水嶺完小紅領巾心向黨活動總結

為進一步增強廣大少年兒童對黨和社會主義祖國的樸素感情,我校結合實際,開展了豐富多彩的活動,深入推進了 紅領巾心向黨 主題教育活動的開展,為迎接黨的十八大勝利召開,表達 紅領巾心向黨 的美好心願。並取得較好的效果,現將活動總結如下 一 舉行 唱紅歌 誦紅詩 贊祖國 為主題的活動 通過此次活動,加強同學...

分水嶺小學學校教學工作計畫

分水嶺小學教學 工作計畫 2014 2015第二學期 分水嶺小學教學工作計畫 2014 2015第二學期 一 指導思想 本學期,堅持以黨的十八屆三中 四中全會精神為指導,以提公升教學質量為根本,以提高教師隊伍素質為關鍵的工作思路,努力構建優質高效課堂教學模式,深入推進素質教育,我校的教學工作以提高課...