How to mirror matrix on the diagonal?

I want to mirror data matrix on the diagonal.
Input:
y
|
____ x
Expected output:
x
|_y
I know you these transformations but I cannot get mirror around the diagonal (y=x line from (0,0) to (1,1))
I = imread('onion.png');
I2 = flipdim(I ,2); %# horizontal flip
I3 = flipdim(I ,1); %# vertical flip
I4 = flipdim(I3,2); %# horizontal+vertical flip
MATLAB: 2016b OS: Debian 8.5

2 Comments

Can you give a simple example with numeric array of the "mirroring" you need? Is it something like:
1 2 3
4 5 6
7 8 9
to
9 6 3
8 5 2
7 4 1
?
Yes, your example is valid.

Sign in to comment.

 Accepted Answer

I2 = rot90(fliplr(I),-1);

3 Comments

This is the only answer which work with big matrices.
Yes. This works on n-d arrays. The other answers involving transpose do not work in arrays greater than 2 dimensions, unless you want to iterate thru the other dimensions.
To add to the confusion, depending on what version you use, this may still not work with arrays that are more than 2D. In older versions, rot90(), fliplr() and flipud() are limited to work only on 2D arrays. It might not be that relevant today, but this is not a current thread.

Sign in to comment.

More Answers (2)

In the case described before it is:
A=[1 2 3;4 5 6;7 8 9]
rot90(A,2)'
which gives:
A= 1 2 3
4 5 6
7 8 9
to
9 6 3
8 5 2
7 4 1

3 Comments

SL
SL on 21 Oct 2016
Edited: SL on 21 Oct 2016
I get some ND error with big matrices with this method. I think this method does not work for non-square or something other type of data. What do you think?
I can't see why it shouldn't work... You must give me an example, otherwise I cannot understand. No problems with rectangular matrices.
The transpose operator doesn't work on anything other than a 2D array, but you can still use permute().
A = repmat([1 2 3;4 5 6;7 8 9],[1 1 3])
A =
A(:,:,1) = 1 2 3 4 5 6 7 8 9 A(:,:,2) = 1 2 3 4 5 6 7 8 9 A(:,:,3) = 1 2 3 4 5 6 7 8 9
B = permute(rot90(A,2),[2 1 3]) % use permute()
B =
B(:,:,1) = 9 6 3 8 5 2 7 4 1 B(:,:,2) = 9 6 3 8 5 2 7 4 1 B(:,:,3) = 9 6 3 8 5 2 7 4 1
C = pagetranspose(rot90(A,2)) % or use pagetranspose() (R2020b or newer)
C =
C(:,:,1) = 9 6 3 8 5 2 7 4 1 C(:,:,2) = 9 6 3 8 5 2 7 4 1 C(:,:,3) = 9 6 3 8 5 2 7 4 1
That said, if the OP isn't aware of the array dimensionality, then there are probably other problems.

Sign in to comment.

Fady Samann
Fady Samann on 13 Aug 2020
you can do the following:
first, transpose the matrix
A = table.';
Flip it horizontally
A = flip (A,1);
then, flip it verticaly
A = flip (A,2);

Products

Asked:

SL
on 21 Oct 2016

Edited:

DGM
on 3 Aug 2022

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!