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));

Antworten auf die Frage(4)

Ihre Antwort auf die Frage