How to mirror matrix on the diagonal?
    107 visualizzazioni (ultimi 30 giorni)
  
       Mostra commenti meno recenti
    
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 Commenti
  Massimo Zanetti
      
 il 21 Ott 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
?
Risposta accettata
  Thorsten
      
      
 il 21 Ott 2016
         I2 = rot90(fliplr(I),-1);
3 Commenti
  Emmanuel Atoleya Atindama
 il 3 Ago 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
      
      
 il 3 Ago 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.  
Più risposte (2)
  Massimo Zanetti
      
 il 21 Ott 2016
        
      Modificato: Massimo Zanetti
      
 il 21 Ott 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 Commenti
  Massimo Zanetti
      
 il 22 Ott 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
      
      
 il 3 Ago 2022
				
      Modificato: DGM
      
      
 il 3 Ago 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])
B = permute(rot90(A,2),[2 1 3]) % use permute()
C = pagetranspose(rot90(A,2)) % or use pagetranspose() (R2020b or newer)
That said, if the OP isn't aware of the array dimensionality, then there are probably other problems.
  Fady Samann
 il 13 Ago 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); 
0 Commenti
Vedere anche
Categorie
				Scopri di più su Logical in Help Center e File Exchange
			
	Prodotti
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!





