2017-03-15 1 views
1

Comment puis-je déplacer une matrice en diagonale?en utilisant le déplacement circulaire pour décaler diagonalement martix dans matlab/octave

J'ai une image avec des lignes horizontales voir ci-dessous: Original horizontal lines Image

J'utilise l'extrait de code pour déplacer les cellules voir en diagonale ci-dessous

reshaped_output = imresize(repmat_rgb, [640, 480]); %reshape output 
imwrite(reshaped_output,strcat('/tmp/img/','orig','.png')); %will create file without borders and use any resize in repmat 

[row, col, dim] = size(reshaped_output); 

diag_shift_rgb=zeros(row, col, dim); %preallocate array 
for ii=1:col 
    bb_r=circshift(reshaped_output(:,ii,1),ii-1); 
    bb_g=circshift(reshaped_output(:,ii,2),ii-1); 
    bb_b=circshift(reshaped_output(:,ii,3),ii-1); 
    diag_shift_rgb(:,ii,1)=[bb_r]; %over write array 
    diag_shift_rgb(:,ii,2)=[bb_g]; %over write array 
    diag_shift_rgb(:,ii,3)=[bb_b]; %over write array 
end 

imwrite(diag_shift_rgb,strcat('/tmp/img/','diag','.png')); %will create file without borders and use any resize in repmat 

Je ne me déplaçais en diagonale lignes mais les couleurs sont décalées avec le décalage que je fais mal?

Diagonal image

Ps: J'utilise Octave 4.0 qui est similaire à matlab

Un autre exemple avec des numéros

Input Example with numbers 
1      1      1      1 
2      2      2      2 
3      3      3      3 
4      4      4      4 
5      5      5      5 
6      6      6      6 
7      7      7      7 


Output example with numbers of what I'm trying to get with the image 
1      7      6      5 
2      1      7      6 
3      2      1      7 
4      3      2      1 
5      4      3      2 
6      5      4      3 
7      6      5      4 
+0

Quelle est votre sortie attendue? – rahnema1

+0

@ rahnema1 les couleurs ne correspondent pas exactement quand elles le devraient et si vous jetez un coup d'oeil il semble y avoir plus de blanc dans la sortie que l'entrée. Les lignes doivent être en diagonale, ce qui est correct et la taille du tableau de sortie doit également être la même que la taille du tableau d'origine. –

+0

@ rahnema1 J'ai ajouté un autre exemple avec des nombres. Remarquez l'inclinaison diagonale (regardez les 1 et 2) J'essaie de faire la même chose avec les lignes de couleur –

Répondre

1

diag_shift_rgb est de type double mais il devrait être de type uint8 à enregistrer correctement:

diag_shift_rgb = zeros (row, col, dim, "uint8");