地形因子提取(MATLAB)

    以某区域的DEM数据(.tif)为基础,通过MATLAB实现地形因子的提取,并进行可视化表达。

    本次提取的地形因子主要包括:坡度、坡向、坡度变率、坡向变率、曲率、粗糙度、凹凸系数(面积、体积)。

目录

一 准备

二 文件读取

三 进行计算

(1)坡度

(2)坡向

(3)坡度变率

(4)坡向变率

(5)曲率

(6)粗糙度

(7)凹凸系数

四 结果可视化

五 实验结果

六 说明


一 准备

(1)要提取区域的.tif文件。

(2)MATLAB 2022b(其他版本也可以)。

(3)新建脚本文件。

二 文件读取

  MATLAB在读取文件时,根目录为文件所在位置,所以.tif数据可以直接放在与,m文件相同的位置,可以避免路径写错的问题。

  使用readgeoraster函数读取DEM数据,readgeoraster函数可以读取Z和R两个信息,Z表示地形高度数据;R表示空间参考对象。(注:要进行提取的tif数据要具有这两项)

代码如下:

% 读取 DEM 数据
[Z, R] = readgeoraster('你的DEM数据.tif');

三 进行计算

(1)坡度

    使用gradient函数计算DEM的坡度,再使用atan函数进行坡度的计算。

    坡度的计算原理为:i = h / l x 100%

    其中:h-高度差,l-水平距离,i-坡度。即两点的高程差与其水平距离的百分比。

% 计算 DEM 数据的梯度
[fx, fy] = gradient(Z, R.CellExtentInWorldX, R.CellExtentInWorldY); 
% 计算坡度
slope = atan(sqrt(fx.^2 + fy.^2)); 

(2)坡向

    坡向以度为单位按顺时针方向进行测量,角度范围介于 0 度(正北)到 360 度(仍是正北,循环一周)之间。坡向格网中各像元的值均表示该像元的坡度所面对的方向。

    注意:平坡没有方向,平坡的值被指定为 -1。

 % 计算 DEM 数据的梯度
[fx, fy] = gradient(Z, R.CellExtentInWorldX, R.CellExtentInWorldY);
aspect = atan2(-fx, -fy) * 180 / pi; % 计算坡向(以角度为单位)

(3)坡度变率

    坡度变率是地面坡度在微分空间的变化率,是根据坡度的求算原理,在坡度的基础上再求一次坡度。代码如下:

% 计算 DEM 的坡度变率
[slopeX, slopeY] = gradient(slope, R.CellExtentInWorldX, R.CellExtentInWorldY);

(4)坡向变率

    与坡度变率的计算原理相同,坡向变率就是地面坡向在微分空间的变化率,即在坡向的基础上再求一次坡向,代码如下:

% 计算 DEM 的坡向变率
[aspectX, aspectY] = gradient(aspect, R.CellExtentInWorldX, R.CellExtentInWorldY);

(5)曲率

    地面曲率是描述地形起伏变化的一个重要指标,可以用于地形分析、水文模拟等。使用MATLAB进行地面曲率的计算,要对DEM进行两次梯度运算,代码如下:

% 计算 DEM 的地面曲率
[dx, dy] = gradient(Z, R.CellExtentInWorldX, R.CellExtentInWorldY);
[dxx, ~] = gradient(dx, R.CellExtentInWorldX, R.CellExtentInWorldY);
[~, dyy] = gradient(dy, R.CellExtentInWorldX, R.CellExtentInWorldY);
H = -sqrt(dxx.^2 + dyy.^2);

(6)粗糙度

    地表粗糙度也是描述地表起伏变化的一个重要指标,可以用于土地利用评价、水文模拟等。计算过程为:首先计算DEM的梯度矩阵,再计算得到幅值矩阵(d),然后使用std2函数计算梯度矩阵的标准差(粗糙度指标),代码如下:

% 计算 DEM 的粗糙度
[dx, dy] = gradient(Z, R.CellExtentInWorldX, R.CellExtentInWorldY);
d = sqrt(dx.^2 + dy.^2);
r = std2(d);

(7)凹凸系数

    地表曲率、地表粗糙度、凹凸系数都是描述地表起伏变化的重要指标,我们使用grandient函数计算DEM的梯度,得到梯度矩阵(H),然后代入公式计算DEM的凹凸系数,代码如下:

% 计算 DEM 的凸凹系数
[dx, dy] = gradient(Z, R.CellExtentInWorldX, R.CellExtentInWorldY);
[dxx, ~] = gradient(dx, R.CellExtentInWorldX, R.CellExtentInWorldY);
[~, dyy] = gradient(dy, R.CellExtentInWorldX, R.CellExtentInWorldY);
H = dxx + dyy;
C = abs(H) ./ sqrt(1 + dx.^2 + dy.^2).^3;

四 结果可视化

    使用figure函数对结果进行可视化,并导出可视化结果。

    有多种表达形式,使用多子图(subplot),使用绘图函数(imagesc、plot),或者直接设置路径保存到电脑的指定位置,或者通过设置figure将读取的DEM数据和提取的地形因子分别显示。

    其次,设置title、axis、legend、grid等属性对可视化结果的标题、坐标轴、图例、格网等进行显示,以坡度的可视化为例,代码如下:

% 可视化结果
figure;
imagesc(slope);
colorbar;
title('Slope');

五 实验结果

(1)坡度提取结果

(2)坡向提取结果

(3)坡度变率提取结果

 (4)坡向变率提取结果 

(5)曲率提取结果 

(6)粗糙度提取结果 

(7)凹凸系数提取结果 

六 说明

    最后,在本次实验中对DEM提取面积和体积主要用到: geotiffread函数读取DEM 数据; abs 函数和R.cellExtentInlworldx、R.cellExtentInWorldY属性计算每个像元的面积;使用ones函数将每个像元的面积乘以高程赋值给一个与 DEM 数据相同大小的矩阵;使用sum函数将所有像元的体积相加,得到DEM的体积。

    本次实验设计的算法能够有效地提取出DEM数据中的地形特征,并能够对地形特征进行可视化和分析。该算法在地形分析、地质勘探、环境监测等领域具有广泛的应用前景。

(需要完整代码及运行结果请留言~

评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值