matlab wie drehen Bild um 90 Grad?
Habe ich 100 Graustufenbilder (256*256 Pixel) und in dem Sie gespeichert sind Gesichter.mat-Datei.
So in die Gesichter.mat-Datei, gibt es 100 Zeilen und 65536(256*256 Spalten).
Jede Zeile steht für ein Bild.
Nun will ich gestalten die Gesichter matrix und zeigte die Bilder.
Benutze ich:
for i=1:N
imagesc(reshape(faces(i,:)'),256,256));
colormap gray;
end
Aber ich fand mein Bild um 90 Grad!
Könnte mir jemand sagen, wie das Bild rechts? Hab ich die Bilder falsch, wenn ich Ihnen ins Gesicht.mat? Unten ist der code, den ich schrieb, um Bilder zu matrix.
function ImageGenerate
Files = dir(strcat('D:\face\','*.tiff'));
LengthFiles = length(Files);
faces = [];
for i = 1:LengthFiles;
Img = imread(strcat('D:\face\',Files(i).name));
temp = im2double(Img);
[row, col] = size(temp);
vector = [];
for i =1 : row
for j = 1:col
vector = [vector temp(i,j)];
end
end
faces = [faces;vector];
end
save('faces2.mat','faces');
- Sie haben wirklich Ihr Leben erschweren durch die Art und Weise Sie gespeichert werden, ist die Bilder - siehe meine Antwort für eine Erklärung (und ein besserer Ansatz).
- Es scheint, gedreht mit imagesc. Verwenden imshow, um die Bilder richtig ansonsten kann man entweder das Bild drehen.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie
imrotate
, um Bilder zu drehen. Um 90 Grad drehen, gegen den Uhrzeigersinn, einfach schreibenFür das drehen von Bildern mit int Multiplikatoren von 90 Grad es gibt
rot90
Funktion:Dies ist effizienter, als
imrotate
und allgemeiner als einfach transponieren, die vorgeschlagen wurden, in anderen Antworten.Für Menschen, die nicht über die image processing toolbox, das gleiche kann erreicht werden durch die Anwendung einer Transposition (die flips X und Y) gefolgt von einer spiegelung um die X-Achse:
Durch die Art und Weise, ich glaube, Sie könnten sich gerettet haben eine Menge ärger, indem Sie ändern den code, schreibt die Gesichter, wie folgt:
An diesem Punkt, Sie würden gespeichert haben, alle voxels in das Bild in der richtigen Reihenfolge, und könnte angesprochen haben, ein einzelnes Bild mit
Zu verstehen, warum dies funktioniert, müssen Sie erkennen, dass Matlab speichert die Elemente im array in der Reihenfolge der Elemente, so ist m(1,1) m(2,1) m(3,1) m(1,2) m(2,2), ... etc. Wie ich es Tat, dabei bleibt die Reihenfolge der Pixel im Bild, also alles, was ich zu tun haben, am Ende ist die Umgestaltung der matrix wiederherzustellen und die ith Gesicht.
Da das Bild ist dargestellt als eine matrix von Werten können Sie einfach transponieren der matrix daher imgNew=img';
Beispiel: