2017-06-05 3 views
0

私はセグメント化された領域のインデックスを含む2次元行列[n,m]を持っています。私は形状を変更するか、元の値を失うことなく、任意のサイズ[n',m']にmatlabの行列をサイズ変更する必要があります。言い換えれば、セグメント化された領域を拡張する必要があります。私はreshpaeを使用しようとしましたが、スケールは高さと幅の両方で似ていなければならないので動作しませんでした。 imresizeは、orignal値を変更するため、うまく機能しませんでした。matlabで行列のサイズを変更し、同じ値を保持

+0

既存のマトリックスに追加の行/列に追加するようなものを意味しますか? – Numbers682

+1

私はそれがあなたが何を望んでいるのか理解していません。あなたはおそらくゼロパディングを見ていますか?同じコンテンツを維持しながら画像の境界線を拡張しますか?あなたの目的をより明確にしてください。 – rayryeng

+0

拡張領域を塗りつぶすにはどのような値を使用しますか? 10 * 10のデータがあり、それらを11 * 11に拡張すると、追加される21の値は何ですか? – Anthony

答えて

0

ここで私は思いついたことがあります。行列を連結することは、既存のデータを乱さずに行列のサイズを拡張する1つの方法です。

s = zeros(3,3); 
for x = 1:3 % just adds numbers so it can be studied 
    s(:,x) = x; 
end 
t = [s, zeros(3,3)]; % adds a 3 by 3 matrix to the right 
u = [s; zeros(3,3)]; % adds a 3 by 3 matrix below 
v = [t; zeros(3,6)]; % adds a 3 by 6 matrix below t matrix 

別の解決策が必要な場合は教えてください。それは簡単ですが、私はあなたが望むものを理解していません。

+0

私はあなたがdesriedサイズに達するために追加の行列を連結することを提案したと思います。実際には、私は行列を再形成し、同じ値を同じ指標ではないようにします。 – DYEZ

0

私は次のようにループを使用せずにそれを解決しようとした:

function m1=reshapez(m,sz) 

sa = sz(1)/size(m,1);  % height scale between original matrix and desired one 
sb = sz(2)/size(m,2);  % width scale between original matrix and desired one 
a2 = ceil([1:sz(1)]./sa); % corresponding indices (x) of the desired matrix in the original one 
b2 = ceil([1:sz(2)]./sb); % corresponding indices (y) of the desired matrix in the original one 
m1 = m(a2,b2);    % desired matrix 
+0

'nearest'メソッドで' imresize'を使う方がはるかに簡単です。これは最近接補間を実行します。これはあなたが上で行っていることとまったく同じです。 – rayryeng

関連する問題