How to mirror matrix on the diagonal?

157 Ansichten (letzte 30 Tage)
SL
SL am 21 Okt. 2016
Bearbeitet: DGM am 3 Aug. 2022
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 Kommentare
Massimo Zanetti
Massimo Zanetti am 21 Okt. 2016
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
?
SL
SL am 21 Okt. 2016
Yes, your example is valid.

Melden Sie sich an, um zu kommentieren.

Akzeptierte Antwort

Thorsten
Thorsten am 21 Okt. 2016
I2 = rot90(fliplr(I),-1);
  3 Kommentare
Emmanuel Atoleya Atindama
Emmanuel Atoleya Atindama am 3 Aug. 2022
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.
DGM
DGM am 3 Aug. 2022
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.

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (2)

Massimo Zanetti
Massimo Zanetti am 21 Okt. 2016
Bearbeitet: Massimo Zanetti am 21 Okt. 2016
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 Kommentare
Massimo Zanetti
Massimo Zanetti am 22 Okt. 2016
I can't see why it shouldn't work... You must give me an example, otherwise I cannot understand. No problems with rectangular matrices.
DGM
DGM am 3 Aug. 2022
Bearbeitet: DGM am 3 Aug. 2022
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.

Melden Sie sich an, um zu kommentieren.


Fady Samann
Fady Samann am 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);

Kategorien

Mehr zu Matrices and Arrays finden Sie in Help Center und File Exchange

Produkte

Community Treasure Hunt

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

Start Hunting!

Translated by