现在的位置: 首页 > 综合 > 正文

平面图像的快速旋转

2013年10月03日 ⁄ 综合 ⁄ 共 766字 ⁄ 字号 评论关闭

原问题:
http://community.csdn.net/Expert/topic/3757/3757859.xml?temp=5.727786E-02

对于一个点旋转一个角度alpha的话,乘以一个矩阵就可以了,但是对于一整幅图片来说,如果每个点都乘以矩阵,速度太慢了,有没有快一点的算法,来旋转整个图片?

基本知识
旋转一个图像,如果是从原图上象素点到目标图像的象素点进行计算的话不好,会导致目标图片上出现空洞
所以一般的办法是计算旋转后的图片上的象素点,在原图上的位置
由于旋转并不能保证原图和目标图片上的象素位置一一完全对应,所以一般的时候是需要进行差值进行光滑处理的,一个光滑处理必然是涉及到乘法运算,或者双线性或者三次差值计算。
但是在对图片质量要求不高,对速度要求比较高的情况下,有办法进行加速优化处理

解决方案
我们知道对于一个二维的位图图片,如果要把它旋转一个角度,基本算法就是:
x1,y1对应旋转后点的公式:
     x0=       x1*cosa + y1*sina + num1;
     y0=  -x1*sina  + y1*cosa + num2;
那么一条水平线上的点 (x1+dx), y1 对应的点x0', y0'就是
     x0' = x0 + dx*cosa
     y0' = y0 - dx*sina
对于dx固定的时候, cosa,sina也都是定值了
这样你在定位了水平线上的一点之后, 就可以顺序获得后面的增量了

同样对于垂直线上的一点x1, y1+dy对应的点x0'', y0''也有类似的公式
   x0'' = x0 + dy*sina
   y0'' = y0 + dy*cosa
同样dy和sina,cosa也是固定数值

有了上面这个公式,我们就可以快速的找到目标图片当中一条条水平或者垂直直线,在原图当中的位置了,新位置只通过简单的加法己可以确定了,不再需要逐点乘法计算了。

抱歉!评论已关闭.