matlab - 如何从非网格 XZY 点生成 DEM? ( Octave /MATLAB)

标签 matlab octave

我有相当大的 LiDAR 数据 block (约 1600 万点云),我已将其缩减为 X、Y、Z 数据(例如):

436003.73  8758000.16  330.97  
436007.17  8758000.40  330.49  
436009.98  8758000.25  330.26  
436011.71  8758000.16  330.10 

我想创建此数据的 DEM,但由于数据集庞大,我的计算机发现这很困难。我不是特别精通 MATLAB/Octave,但我正在学习。 目前我正在使用 griddatameshgrid 命令,如下所示:

cd ~/Octave
dem=load('436003_ed.txt');
x=dem(:,1);
y=dem(:,2);
z=dem(:,3);
minx=min(x);
miny=min(y);
minz=min(z);
maxz=max(z);
maxx=max(x);
maxy=max(y);
rijx=minx:2:maxx;
rijy=miny:2:maxy;
[XI,YI]=meshgrid(rijx,rijy);
ZI=griddata(x,y,z,XI,YI);

...这就是我在对数据进行网格化时内存不足的情况。

我假设部分问题是因为我将整个数据集作为变量 (dem=load('436003_ed.txt');) 打开为 ~500MB 文件,这当然是非常耗费内存。有人告诉我可以使用 fopen 命令的替代方法:

fid=fopen('436003_ed.txt');
XYZ=fscanf(fid,'%f %f  %f');  

然而,这似乎提供了一种奇怪的格式,因为它本身并没有加载到 RAM 中?

有没有一种方法可以让我逐行加载它,将每个 Z 值放入适当的 DEM 单元格中,同时计算该单元格的总高程和命中数(这样我就可以平均高程之后)生成 DEM?这将否定 meshgridgriddata 命令的使用。
作为一个全新的人,我不知道要查找和使用哪些命令!

非常感谢。我有 MATLAB R2013b,如果有帮助的话,我也一直在通过 Octave 做一些这样的事情。

更新 我使用一些名为 GDAL 的命令行工具库(特别是 http://www.gdal.org/ GDAL 网格)解决了这个问题。这帮助我对数据进行网格化。虽然这是对我的查询的回答,但这并不是我正在寻找的确切答案。 虽然我原来的方法可能会起作用,但如果我的计算机有足够的内存,还有其他方法可以在 MATLAB 中编写脚本 - 使用 fscanffopen 命令 - 我还发现如何正确执行此操作。

最佳答案

Octave 目前使用 GraphicsMagick 或 ImageMagick 进行图像 IO。但是,这两个项目都只处理整数,而您的数据是 float ,因此您将无法使用典型的 imwrite 函数将其另存为图像。如果你真的想将它保存为图像,你可以编写你自己的 libtiff 接口(interface)。不过,我相信 Matlab 可以处理浮点图像。

关于您的代码,我不知道您会如何处理内存不足的问题,但您有一些不必要的行。您可以替换:

x=dem(:,1);
y=dem(:,2);
z=dem(:,3);
minx=min(x);
miny=min(y);
minz=min(z);
maxz=max(z);
maxx=max(x);
maxy=max(y);
rijx=minx:2:maxx;
rijy=miny:2:maxy;

与:

mins = min (dem);
maxs = max (dem);
rijx = mins(1):2:maxs(1);
rijy = mins(2):2:maxs(2);

关于matlab - 如何从非网格 XZY 点生成 DEM? ( Octave /MATLAB),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20868480/

相关文章:

matlab - 在 MATLAB 中将文本放入非事件轴

matlab - 在 "positive"Y 轴上绘制一组负数据

matlab - Matlab 中使用近似最近邻 (FLANN) 的快速库

matlab - 在MATLAB中将stringptrptr参数传递给C-DLL函数foo(char **)-清除指针会使MATLAB崩溃

c++ - 3D 头部的透视投影和 Z 缓冲以形成面部图像

matrix - 有效地将向量解包为二进制矩阵 Octave

linux - 从源代码构建 Octave 包

vectorization - Octave : Vectorized implementation of the cartesian product of two vectors

c++ - mkoct 文件错误

python - 使用 oct2py 的困难