图像任意角度旋转

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

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

i1 x i 2, j1 y j 2 f 12 f 1 ( x i1) * ( f 2 f 1) f 34 f 3 ( x i1) * ( f 4 f 3) fxy f 12 ( y j1) * ( f 34 f 12)
相关文档
最新文档