图像旋转的原理与实现
一般图像的旋转是以图像的中心为原点,旋转一定的角度,也就是将图像上的所有像素都旋转一个相同的角度。旋转后图像的的大小一般会改变,即可以把转出显示区域的图像截去,或者扩大图像范围来显示所有的图像。图像的旋转变换也可以用矩阵变换来表示。设点
逆时针旋转
角后的对应点为
。那么,旋转前后点
、
的坐标分别是:
写成矩阵表达式为
其逆运算为
利用上述方法进行图像旋转时需要注意如下两点:
(1)图像旋转之前,为了避免信息的丢失,一定要有坐标平移。
(2)图像旋转之后,会出现许多空洞点。对这些空洞点必须进行填充处理,否则画面效果不好,一般也称这种操作为插值处理。
以上所讨论的旋转是绕坐标轴原点(0,0)进行的。如果图像旋转是绕一个指定点(a,b)旋转,则先要将坐标系平移到该点,再进行旋转,然后将旋转后的图象平移回原来的坐标原点,这实际上是图像的复合变换。如将一幅图像绕点(a,b)逆时针旋转
度,首先将原点平移到(a,b),即
然后旋转
然后再平移回来
附录:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
|
B=imread('image1.bmp');%读取原图像[m,n]=size(B); %获取原图尺寸w%参数设置 theta = pi/4; %旋转角度a = sin(theta);b = cos(theta);T = [cos(theta),sin(theta),; %旋转矩阵 -sin(theta),cos(theta)]; %建立存储空间row=m+round((m)/2);col=n+round((n)/2);rotateima = zeros(row, col); %存储旋转后图像的矩阵 %图像旋转 for i=1:m for j=1:n x=ceil(abs((i-round(m/2))*b-(j-round(n/2))*a+round(row/2))); %坐标平移至中心 y=ceil(abs((i-round(m/2))*a+(j-round(n/2))*b+round(col/2))); %坐标平移至中心 rotateima(x,y)=B(i,j); %未插值的图像 endendnrotateima = uint8(rotateima);imshow(nrotateima);title('未插值的图像') %图像插值(近邻插值法)for i=1:row for j=2:col-1 if(rotateima(i,j) == 0 && rotateima(i,j-1) ~= 0 && rotateima(i,j+1) ~= 0 ) rotateima(i,j) =rotateima(i,j-1) ; end endend %图像显示figure(1);imshow(B)title('原始图像');% figure(2);% imshow(nrotateima);% title('未插值的图像');figure(3);imshow(rotateima/256);imwrite(rotateima/256, '旋转后图像.jpg', 'jpg');title('旋转图'); |

![clip_image009[10] clip_image009[10]](https://images2015.cnblogs.com/blog/904258/201603/904258-20160305170900049-1943272216.png)
![clip_image011[10] clip_image011[10]](https://images2015.cnblogs.com/blog/904258/201603/904258-20160305170900659-1626536478.png)
![clip_image013[10] clip_image013[10]](https://images2015.cnblogs.com/blog/904258/201603/904258-20160305170901362-942897001.png)
![clip_image015[10] clip_image015[10]](https://images2015.cnblogs.com/blog/904258/201603/904258-20160305170901862-1926973201.png)
![clip_image018[10] clip_image018[10]](https://images2015.cnblogs.com/blog/904258/201603/904258-20160305170903174-2020469961.png)
![clip_image020[10] clip_image020[10]](https://images2015.cnblogs.com/blog/904258/201603/904258-20160305170903752-1064163954.png)
![clip_image022[10] clip_image022[10]](https://images2015.cnblogs.com/blog/904258/201603/904258-20160305170904268-922718901.png)
浙公网安备 33010602011771号