私は行列を持っています、I =
5 4 3
9 8 6
6 3 4
対角方向の隣接する要素間の差を計算するにはどうすればよいですか。これらの出力が必要です(パディングを気にしない最初と最後の行と列):
5 4 3
5 5 6
2 -3 4
と
5 4 3
9 3 2
6 -6 -4
これは、単純なインデックス付けによって行うことができます(以下では、例のようにエッジの周りにゼロのパディングがあると想定しています)。
>> diagDiffs = I;
>> diagDiffs(2:end,2:end) = I(2:end,2:end)-I(1:end-1,1:end-1)
diagDiffs =
5 4 3
9 3 2
6 -6 -4
>> antidiagDiffs = I;
>> antidiagDiffs(2:end,1:end-1) = I(2:end,1:end-1)-I(1:end-1,2:end)
antidiagDiffs =
5 4 3
5 5 6
-2 -3 4
MATLABで構文的にそれを行う方法はよくわかりませんが、擬似コードでは次のようになります。
要素の対角線上の隣接する要素i,j
は、次の位置にあります。
要素のリスト= {(i+1,j+1),(i+1,j-1),(i-1,j+1),(i+1,j-1)}
。
基本的に、各要素の位置について、両方の行列でその「要素のリスト」を見つけ、減算します。申し訳ありませんが、実際のコードを提供することはできません。