1

このフォーラムは初めてなので、ご容赦ください。私はしばらくの間、このMatlabの問題に取り組んできました:

デジタル標高モデル (DEM) new_sub(x,y) を tif 形式で持っています。つまり、高さ (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

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 に答える