2011-05-06 3 views
1

I possède une matrice, I =différence entre des éléments adjacents - direction diagonale

5  4  3 
9  8  6 
6  3  4 

Comment calculer les différences entre les éléments adjacents dans une des directions diagonales. Je veux que ces sorties (pour première et dernière lignes et colonnes, je ne me dérange pas de rembourrage):

5  4  3 
    5  5  6 
    2 -3  4 

et

5  4  3 
9  3  2 
6 -6 -4 
+0

vous voulez la réponse pour savoir comment faire en Matlab, ou dans une autre langue? – soandos

+0

Je veux une réponse pour savoir comment le faire dans MATLAB. –

Répondre

1

Vous pouvez le faire par une simple indexation (qui suit suppose un rembourrage zéro sur les bords comme dans votre exemple):

>> 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 
0

Je ne suis pas tout à fait sûr de savoir comment faire syntaxiquement dans Matlab, mais psudocode:

la diagonale des éléments adjacents de l'élément i,j sont à des positions:

Liste des éléments = {(i+1,j+1),(i+1,j-1),(i-1,j+1),(i+1,j-1)}.

Fondamentalement, pour chaque position d'élément, trouver sa "liste d'éléments" dans les deux matrices, et soustraire. Désolé, je ne peux pas vous donner un code réel.

Questions connexes