MATLAB: HOW TO MOVE THE ELEMENTS BACK IN ORDER IN MATRICS WHICH ARE BEEN MOVED DIAGONALLY

image processingmatricesmatrixmatrix array

1 4 6 8 2 3 7 9 5
all elements are move diagonally one pixel for m*n matix WHEN APPLYING THE FOLLOWING CODE
I = [
1 4 6
8 2 3
7 9 5]; % initial array
idx = reshape(1:numel(I),size(I));
for jj = -size(I,1) + 2 : size(I,2) - 2
a = diag(idx,jj);
I(a) = I(circshift(a,1));
end
example output
2 3 6
9 5 4
7 8 1
HOW TO GET THE ORIGINAL RESULT TO SHIFT DIAGONALLY . THE EXAMPLE OUTPUT IS
1 4 6 8 2 3 7 9 5

Best Answer

Are you asking how to undo what your code does?
for jj = -size(I,1) + 2 : size(I,2) - 2
a = diag(idx,jj);
I(a) = I(circshift(a,-1)); % Note the -1
end