您的位置:首页 > 编程语言 > MATLAB

不采用MATLAB中的几何变换函数对图像进行旋转

2019-03-16 17:05 921 查看

一、图像旋转变换的流程
1、确定旋转后新图像的尺寸,设原始大小为M,N


由以上公式得到:

x=[0,(M-1)*cos(Angle),(M-1)*cos(Angle)+(N-1)*sin(Angle),(N-1)*sin(Angle)];         %旋转后新坐标系横坐标
y=[0,-(M-1)*sin(Angle),-(M-1)*sin(Angle)+(N-1)*cos(Angle),(N-1)*cos(Angle)];           %旋转后新坐标系纵坐标

2、坐标变换

3、旋转逆变换

4、新图像赋值
赋值方法有最邻近差值与双线性差值,其中双线性插值法可以使的图像的边缘更加的平滑。

二、完整matlab代码

f=im2bw(imread('picture1.png'));
M=size(f,1);            %行
N=size(f,2);            %列
Angle=pi/6;     %逆时针角度

x=[0,(M-1)*cos(Angle),(M-1)*cos(Angle)+(N-1)*sin(Angle),(N-1)*sin(Angle)];         %旋转后新坐标系横坐标
y=[0,-(M-1)*sin(Angle),-(M-1)*sin(Angle)+(N-1)*cos(Angle),(N-1)*cos(Angle)];           %旋转后新坐标系纵坐标
x1=round(max(x(:)-min(x(:))+1));        %round()函数表示四舍五入取整
y1=round(max(y(:))-min(y(:))+1);        %计算新图像分辨率

g=zeros(x1,y1);                        %新图像的像素点矩阵

for i=0:1:(x1-1)
for j=0:1:(y1-1)

i1=i+min(x(:));
j1=j+min(y(:));                     %坐标变换到原坐标系

i2=i1*cos(Angle)-j1*sin(Angle);
j2=i1*sin(Angle)+j1*cos(Angle);      %旋转逆变换

i3=round(i2);
j3=round(j2);

if(i3>(M-1)||j3>(N-1)||i3<0||j3<0)  %插值运算
g(i+1,j+1)=255;
else
g(i+1,j+1)=f(i3+1,j3+1);
end

end
end
subplot(121),imshow(f),title('原图像');
subplot(122),imshow(g),title('旋转后图像');

三、运行结果

参考文献:
[1] 蔡利梅 王利娟 数字图像处理[M]. 中国矿业大学出版社 2014

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: