Matlab 重采样矩阵和在单个矩阵中恢复

Matlab 重采样矩阵和在单个矩阵中恢复,matlab,Matlab,我是新加入这个论坛的,所以请耐心等待。 我研究这个Matlab问题已经有一段时间了: 我有一个tif格式的数字高程模型(DEM)新_sub(x,y)。所以它是一个x×y矩阵,包含高度(z)。我希望以不同的分辨率对该DEM的部分进行重采样,并将其恢复到另一个矩阵中。到目前为止,我一直在使用for循环更改DEM不同区域的分辨率,然后将结果写入xyz文件: x y z 1 1 123 1 2 233 1 3 231 2 1 235 2 2 531 23452 等等。 代码如下: xmax = size

我是新加入这个论坛的,所以请耐心等待。 我研究这个Matlab问题已经有一段时间了:

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

x y z 1 1 123 1 2 233 1 3 231 2 1 235 2 2 531 23452

等等。 代码如下:

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,但想不出一个聪明的方法来使用它

非常感谢你的帮助


THeo

对我来说,最简单的方法就是使用。您可以将立面图视为图像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

对我来说,最简单的方法就是使用。您可以将立面图视为图像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

要在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
我建议你仔细阅读并使用

现在,为了获得您提到的“x y z”格式,首先使用生成x和y坐标的矩阵

[X, Y] = meshgrid(1:n:size(M,1), 1:n:size(M,2))
请注意,我使用
n
来减少样本
X
Y
。现在,您只需展平三个矩阵并将它们组合起来:

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

最后,要保存为文件,我建议您在Matlab命令promt中键入
help save
help dlmwrite
,并使用这些函数中的任何一个来保存
final
在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
我建议你仔细阅读并使用

现在,为了获得您提到的“x y z”格式,首先使用生成x和y坐标的矩阵

[X, Y] = meshgrid(1:n:size(M,1), 1:n:size(M,2))
请注意,我使用
n
来减少样本
X
Y
。现在,您只需展平三个矩阵并将它们组合起来:

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

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

,感谢这个有价值的提示,但我不打算插值,因为我正在从Matlab导出xyz数据,以便在第二个程序中对它们进行三角剖分。也许“重采样”这个词有点误导。不过,这是非常好的了解,为今后的工作!感谢这个有价值的提示,但我不打算插值,因为我正在从Matlab导出xyz数据,以便在第二个程序中对它们进行三角剖分。也许“重采样”这个词有点误导。不过,这是非常好的了解,为今后的工作!非常感谢这个解决方案。我开始在我的代码中实现它,它运行得非常好,比我以前使用的循环解决方案快得多。现在我只需要在一个GUI上工作,让用户在数字高程模型中选择不同分辨率的矩形没问题,如果可行,请将其标记为已接受(问题左上角的箭头轮廓),然后如果您喜欢,也应该向上投票,但我认为你可能需要更多的声誉:/祝你好运的GUI和一定要通过我张贴的链接!看来我需要15个名声才能这么做!非常感谢这个解决方案。我开始在我的代码中实现它,它运行得非常好,比我以前使用的循环解决方案快得多。现在我只需要在一个GUI上工作,让用户在数字高程模型中选择不同分辨率的矩形没问题,如果可行,请将其标记为已接受(问题左上角的箭头轮廓),然后如果您喜欢,也应该向上投票,但我认为你可能需要更多的声誉:/祝你好运的GUI和一定要通过我张贴的链接!看来我需要15个名声才能这么做!