影像縮放有三種常用的方法,分別為
(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’最接近的整數m與n。所以要將原圖( 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*512的lena圖放大到1024*1024的比較
Nearest Neighbor
Bilinear
Bicubic
觀察眼睛的部分,Nearest Neighbor產生明顯的方格狀。Bilinear與Bicubic較為平滑,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到輸出圖上,這樣就可以完成影像旋轉。
影像旋轉結果
沒有留言:
張貼留言