天天看點

平面圖像的快速旋轉

原問題:

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也是固定數值

有了上面這個公式,我們就可以快速的找到目标圖檔當中一條條水準或者垂直直線,在原圖當中的位置了,新位置隻通過簡單的加法己可以确定了,不再需要逐點乘法計算了。

繼續閱讀