用Matlab 实现移动曲面拟合法生成DEM
标签: Matlab 移动曲面拟合法 DEM 分类: [E]【 MATLAB 】2006-12-22 10:02
用Matlab 实现移动曲面拟合法生成DEM
杜玉军
(武汉大学测绘工程0408班 200431610007 武汉 430079)
摘要:移动曲面拟合法是DEM格网点内插常用的一种方法,利用Matlab可以轻松实现该方法生成DEM。
关键字:移动曲面拟合法 DEM Matlab
1. 概述
为了获取规则格网DEM,内插是必不可少的过程。内插的方法很多,其中移动曲面拟合法由于其方法灵活、计算简便、精度较高、占用内存较少等诸多优点而经常被使用。
2. 实现原理
移动曲面拟合法是一种以待定点为中心的逐点内插法,它以每个待定点为中心,定义一个局部函数去拟合周围的数据点。其过程为:
(1) 对每个格网点,从数据点中检索出邻近的个(至少6个)数据点。
以待定点()为圆心,以选定长为半径作圆,凡落入圆内的数据点都被采用。
Xpi=Xi-XYpi=Yi-Y
di2= Xpi2+Ypi2
di
标准对话框
fid1=fopen(strcat(pathname,filename),'rt'); %以只读形式打开
if fid1==-1 %若没有选择文件则警告
msgbox('Input File or Path is not correct','Warning','warn');
break;
end
Dt=load(filename); %获取数据
fclose(fid1);
·函数文件2
function zp=GridZ(pt,x,y,s0)
%移动曲面拟合法内插(x,y)处的高程
%pt为数据点矩阵,s0为单点平均占用面积
N=length(pt); %点数
n0=8; %搜索点数
%初始化各值
n=1; m=1; %计数器
xp=0; yp=0; d2=0; %原点在(x,y)时数据点坐标和与(x,y)距离的平方
ptin.x=0; ptin.y=0; ptin.z=0; din2=0; %落入搜索范围内的数据点坐标值和与(x,y)距离的平方
ptout.x=0; ptout.y=0; ptout.z=0; dout2=0; %搜索区外的数据点坐标和距离
P=0; %权阵
for k=1:N
xp(k)=pt(k,1)-x; yp(k)=pt(k,2)-y;
d2(k)=xp(k)^2+yp(k)^2;
if d2(k)
经验 做法是以数据点距该格网点最小距离的3倍为初始搜索半径;本程序采用的是预估计范围的方法,即:先计算出单个数据点平均占用的面积S0,继而得到个点的大致范围×S0,将其视为正方形,以其中心到正方形顶点的距离(对角线长一半)为初始搜索半径(R=(n×S0)× /2)。
可以看到,生成的DEM与原貌拟合的较好,程序运行效果较为满意。但本程序算法上还存在一些缺陷,如没有将数据进行分块,对于每个格网点都要进行全范围的搜索,计算所有数据点到该点的距离,使计算时间非常长。本例共15个数据点、32×32的格网,大约要1秒钟;若有100个数据点、200×200的格网,则计算时间达到2.5分钟;如果数据再多,则不会在短时间内完成。故还无法处理大量数据。
参考文献:
(1) 王佩军,徐亚明.摄影测量学(测绘工程专业).武汉大学出版社.2006.4
(2) 张祖勋,张剑清.数字摄影测量学.武汉大学出版社.2005.1
点坐标生成DEM(in matlab)
clear;
x=[1; 2; 3; 4; 5; 6; 7; 8; 9; 10];
y=[21; 12; 13; 14; 15; 16; 17; 18; 11; 19];
z=[21.2; 22.8; 21.7; 22.9; 21.2; 22.5; 21.3; 22.5; 21.5; 22.7];
step=[20 21 22 23 24 25 26]; % 等高距1m %
figure;
plot(x,y,'.','markersize',10);
tri=delaunay(x,y);
hold on;
triplot(tri,x,y);
hold off;
figure;
trimesh(tri,x,y,z);
[xi,yi]=meshgrid(0:0.1:11,10:0.1:22);
zi=griddata(x,y,z,xi,yi,'v4');
figure;
[c,h]=contour(xi,yi,zi,step);
clabel(c,h);
xlabel('x坐标');ylabel('y坐标');