1

我是这个论坛的新手,所以请多多包涵。我一直在研究这个 Matlab 问题一段时间:

我有一个 tif 格式的数字高程模型 (DEM) new_sub(x,y)。所以它是一个包含高度 (z) 的 x×y 矩阵。我希望以不同的分辨率重新采样这个 DEM 的部分并将其恢复到另一个矩阵中。到目前为止,我一直在使用 for 循环来更改 DEM 不同区域的分辨率,然后将结果写入 xyz 文件:

xyz 1 1 123 1 2 233 1 3 231 2 1 235 2 2 531 2 3 452

等等。这是代码:

xmax = size(new_sub,2);
ymax = size(new_sub,1);

for k=1:200 % y
    for l=1:xmax % x
        fprintf(fid, '%d %d %d \n',l,xmax+1-k,new_sub(k,l));
    end
end

% 1:4
for k=200/2+1:size(new_sub,1)/2
    for l=1:size(new_sub,2)/2
        fprintf(fid, '%d %d %d \n',l*2,ymax+2-k*2,new_sub(k*2,l*2));
    end
end

这确实有效,但似乎相当复杂。此外,它不允许我将重采样区域存储在 Matlab 中的单个矩阵中。

有没有更有效的方法来重新采样具有不同分辨率的矩阵的某些区域,将它们写入包含所有重新采样区域的新矩阵,然后将其写入文件?我正在研究repmap,但想不出一个聪明的方法来使用它!

非常感谢您的帮助!

西奥

4

2 回答 2

1

在 Matlab 中重新采样矩阵:

例如矩阵M

M = [1  2  3  4  5; 
     6  7  8  9  10; 
     11 12 13 14 15; 
     16 17 18 19 20; 
     21 22 23 24 25];

如果我们想对每第 n 个像素进行采样,就这么简单:

m = M(1:n:end, 1:n:end)

因此对于n=2

m = 1  3  5
    11 13 15
    21 23 25

我建议您阅读 matlab 中的索引以及使用冒号运算符在 matlab 中创建向量

现在为了获得您提到的“xy z”格式,首先使用meshgrid生成 X 和 Y 坐标矩阵。

[X, Y] = meshgrid(1:n:size(M,1), 1:n:size(M,2))

注意我n用来下采样XY. 现在您只需要展平三个矩阵并将它们组合起来:

final = [X(:), Y(:), m(:)]

最后保存为文件,我建议您键入help savehelp dlmwrite在 Matlab 命令 promt 中并使用这些函数中的任何一个来保存final

于 2013-04-16T10:55:50.130 回答
0

对我来说,最简单的方法是使用imresize。您可以将您的高程图视为图像 I。然后您可以通过索引和重新缩放来剪切部分,如下所示:

I = imread('my.tiff'); % read
section = I(1:200, :); % cut the first 200 rows and all columns
sectionResized = imresize(section, [numrows numcols]) % resample
imwrite(sectionResized, 'mynew.tiff'); % save
于 2013-04-16T10:36:17.180 回答