图像任意角度旋转

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

原图
旋转后图像变大
旋转后图像大小不变
以顺时针旋转为例来推导旋转变换公式。如下图所示。
旋转前: x0 r cos b y0 r sin b
(1-1)
旋转a角度后:
x1rcobs(a)
rcobscoasrsibnsinax0coasy0sina
y1rsinb(a)
(1-2)
rsibncoasrcobssinax0sinay0coas
效果图如下所示:
2.双线性插值
双线性插值算法又称一阶插值算法,他的效果好于最邻近插值算法。
f2
f 12
f1
f xy
f4
x
(x, j1)
(i2, j1) f 34
(i1, j1)
(i1, y)
(x, y)
f3
(i2, j2) (x, j2)
(i1, j2)
y
设 i1xi2 ,j1yj2 step1: f1 2 f1 (x i1 )* (f2 f1 ) step2: f3 4 f3 (x i1 )* (f4 f3 ) step3: fx f1 y ( 2 y j1 )* (f3 4 f1)2
矩阵形式:
x1 coas sina 0 x0 y1sina coas 0y0 1 0 0 1 1
上述旋转是绕坐标轴原点 (0,0)进行的,向右为X轴 为正方向,向上为Y轴正方 向,设为坐标系Ⅱ。而屏幕
A
0
中的坐标是以左上角为原点, 向右为X轴正方向,向下为Y 轴正方向,设为坐标系Ⅰ。
要按图像的中心点(a,b)
旋转,首先要进行坐标系的
平移。
y
C
(1-3) y
(a,b)
0
B
x
x
D
设图像宽度为W,高度为H,则由坐标系Ⅰ平移到Ⅱ的变换矩阵 为:
x 1 0 0.5Wx y0 1 0.5H y 1 0 0 1 1
其逆变换矩阵表达式为:
x 1 0 0.5Wx y 0 1 0.5Hy 1 0 0 1 1
(1-4) (1-5)
这样,原图中的每一点经过旋转之后新图中都有与之对应的点wenku.baidu.com编程 运行后结果如图所示:
原图
旋转后的新图(变大且有空白点)
我们会发现新图像上有许多空白点,且随着角度的不同空白点的具体位 置也会不同。为什么会出现空白点呢?
如何解决?
插值处理
• 最邻近插值和双线性插值
插值和不插值的一点区别:
不插值:代码实现时是遍历原图像 插 值:代码实现时是遍历新图像
用双线性插值时,针对灰度图像和24位彩色图像分别自定义了两个 个函数: unsigned char Interpolation(BYTE* ,int,int,float,float); unsigned char Interpolation1(BYTE* ,int,int,float,float,int); 具体代码见程序。
因此,可按如下方法旋转图像:
根据式(1-4),将坐标系Ⅰ变成坐标系Ⅱ; 根据式(1-3),将该点顺时针旋转a角度; 根据式(1-5),将坐标系Ⅱ变成坐标系Ⅰ。
假设图像在新的坐标系下,以旋转后的新图像左上角为原点,为旋 转时中心坐标为(a,b),旋转后图像中心坐标为(c,d),则可得 到旋转变换矩阵表达式为:
1.最邻近插值 最邻近插值也称零阶插值。它输出的像素的颜色值就等于距离它 映射到的位置最近的原图像素的颜色值,怎么取最近呢?用四舍 五入的方法。结果图像带有锯齿形的边。 核心代码: x0=(int)(x1*cosa+y1*sina+temp1+0.5); y0=(int)(-1*x1*sina+y1*cosa+temp2+0.5);
双线性插值效果图如下所示:
感谢您的关注
图像的任意角度旋转
学号:1234567789 姓名:Smart Kingbo
LOGO
理论基础
图像的旋转是图像的几何变换的一种。 一般来说,图像的旋转是以图像的中心为 原点,将图像上所有像素都旋转相同的角 度。图像旋转后,图像的大小一般会改变, 在图像的旋转变换中既可以把转出显示区 域的图像截去,也可以扩大图像范围以显 示所有的图像。
x1 1 0 ccoassian01 0 ax0 y1 0 1d siancoas0 0 1 b y0 (1-6) 1 0 0 1 0 0 1 0 0 1 1
即:x 1x0co a s y0sian aco a b ssian c y 1x0sian y0co a s asian bco a s d
y0 x 1 sia ny 1 co a c ssia ndco a b s
这样,对于新图中的每一点,可以求出对应于原图中的点,然 后把相应的颜色值赋给新图。插值就是把新图中的空白点(不 带四个角)也映射到原图中的某一个点(最邻近插值)或者用 原图中的几个点求一个颜色值赋给新图中的空白点(双线性插 值)。
因此实现插值就在遍历新图的过程中做文章。式(1-6)的 逆变换矩阵为:
x0 1 0 acoassian01 0 cx1 y0 0 1b siancoas0 0 1 d y1 1 0 0 1 0 0 1 0 0 1 1
(1-7)
即:
x0x 1 co ay s1 sia n cco a d ssia na
相关文档
最新文档