Bildrotation durch Matlab ohne Verwendung von imrotieren
Ich versuche, ein Bild mit Matlab zu drehen, ohne die Imrotationsfunktion zu verwenden. Ich habe es tatsächlich mit einer Transformationsmatrix gemacht. Aber es ist nicht gut genug. Das Problem ist, dass das gedrehte Bild "gleitet". Lassen Sie mich es Ihnen mit Bildern erzählen.
Dies ist mein Bild, das ich drehen möchte:
Aber wenn ich es drehe, zum Beispiel um 45 Grad, wird es so:
Ich frage, warum das passiert. Hier ist mein Code, gibt es mathematische oder Programmierfehler?
image=torso;
%image padding
[Rows, Cols] = size(image);
Diagonal = sqrt(Rows^2 + Cols^2);
RowPad = ceil(Diagonal - Rows) + 2;
ColPad = ceil(Diagonal - Cols) + 2;
imagepad = zeros(Rows+RowPad, Cols+ColPad);
imagepad(ceil(RowPad/2):(ceil(RowPad/2)+Rows-1),ceil(ColPad/2):(ceil(ColPad/2)+Cols-1)) = image;
degree=45;
%midpoints
midx=ceil((size(imagepad,1)+1)/2);
midy=ceil((size(imagepad,2)+1)/2);
imagerot=zeros(size(imagepad));
%rotation
for i=1:size(imagepad,1)
for j=1:size(imagepad,2)
x=(i-midx)*cos(degree)-(j-midy)*sin(degree);
y=(i-midx)*sin(degree)+(j-midy)*cos(degree);
x=round(x)+midx;
y=round(y)+midy;
if (x>=1 && y>=1)
imagerot(x,y)=imagepad(i,j); % k degrees rotated image
end
end
end
figure,imagesc(imagerot);
colormap(gray(256));