2014年3月13日 星期四

影像縮放 與 影像旋轉

影像縮放有三種常用的方法,分別為

(1) Nearest Neighbor
(2) Bilinear
(3) Bicubic

影像旋轉則是運用一些三角函數概念便可實作
(4) Rotation


1. Nearest Neighbor

Nearest Neighbor的作法是將想要輸出的圖像中的每個像素的座標乘上一個比例(原圖大小/輸出圖大小),可得一對應到原圖上的座標。



 i * (w1/w2) = m’             (對應到原圖上的x座標)
 j * (h1/h2) = n’                        (對應到原圖上的y座標)

然後將所對應到的座標上的顏色assign到輸出圖的座標上,由於所得的m’ n’ 有可能不是整數,因此找離m’n’最接近的整數mn。所以要將原圖( m, n )這點的顏色assign到輸出圖的( I, j )上。

將每個點經過上述過程處理之後,就可得到一縮放後的結果,此作法較簡單但輸出圖會較粗糙


2. Bilinear

此種方法先是將輸出圖的每個像素的座標,依比例對應到原圖的座標上。


  i * (w1/w2) = m’             (m’對應到原圖上的x座標)
j * (h1/h2) = n’                        (n’對應到原圖上的y座標)

Nearest Neighbor不同,m’n’不是找最接近的整數值,而是找相鄰的四個點並依照下列公式內插出一個相對平滑的顏色assign到輸出圖的(i,j)當中。

          color(a,b) * (1-alpha) * (1-beta)
        + color(a+1,b) * (alpha) * (1-beta)
        + color(a,b+1) * (1-alpha) * (beta)
        + color(a+1,b+1) * (alpha) * (beta)

此一公式的核心原理就是原圖中離(m’,n’)較近的四個像素中,距離越近的影響力越大。

這一個方法相較於Nearest Neighbor之下,較為平滑。


3. Bicubic

此方法將輸出圖的座標對應到原圖後,使用微分的方法推出一多項式,將對應座標與鄰近的16個像素以該多項式內插,便能得到比前兩者更為平滑的影像,缺點是必須耗費更多的運算資源,較花時間。



三種方法將512*512lena圖放大到1024*1024的比較

Nearest Neighbor


Bilinear


Bicubic



觀察眼睛的部分,Nearest Neighbor產生明顯的方格狀。BilinearBicubic較為平滑,Bilinear略顯模糊,Bicubic最為平滑。


4. Rotation
     
影像旋轉的核心公式是

sin(A+B) = sin(A)cos(B)+sin(B)cos(A)
cos(A+B) = cos(A)cos(B)-sin(A)sin(B)


以每張圖的中心點當作轉軸,若想要轉N度,將輸出圖的每一點以上列公式推出逆轉N度後的位置,若有對應到原圖上,就將原圖的顏色assign到輸出圖上,這樣就可以完成影像旋轉。



 影像旋轉結果

沒有留言:

張貼留言