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:
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?
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
Quelle est votre sortie attendue? – rahnema1
@ 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. –
@ 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 –