% 直角坐标系实现图像旋转 im=rgb2gray(imread('robot.jpg')); figure,imshow(im); [row,col]=size(im); a=pi/6; % 逆时针旋转30度 %得到行的初始矩阵 r1=repmat(1:row,row,1); i=r1'; %得到列的初始矩阵 j=repmat(1:col,col,1); i1=zeros(row,col); for m=1:row for n=1:col i1(m,n)=round(m*cos(a)-n*sin(a)); %获得旋转后的i像素值 并且取整 end end j1=zeros(row,col); for m=1:row for n=1:col j1(m,n)=round(m*sin(a)+n*cos(a)); %获得旋转后的j像素值 并且取整 end end %判断旋转后的i,j是否小于0 坐标调整 if min(min(i1))<min(min(j1)) if min(min(i1))<0 k=abs(min(min(i1))); new_min=min(min(i1))+(k+1); A=i1+ones(row,col)*(k+1); end elseif min(min(j1))<0 k=abs(min(min(j1))); new_min=min(min(j1))+(k+1); A=j1+ones(row,col)*(k+1); end new_max_i=max(max(A)); %最大行 new_max_j=max(max(j1)); %最大列 G=zeros(new_max_i,new_max_j); %构造空白的新画布 %接下来 进项数据填充 for m=1:row for n=1:col G(A(m,n),j1(m,n))=im(m,n); end end figure,imshow(uint8(G));