圖像縮放算法較多,下面僅以最鄰近插值算法和雙線性插值算法作介紹。
如下圖1所示,表示原始圖像和縮放以后的圖像。
圖1 圖像縮放(原始圖像à縮放圖像)
圖像縮放就是將原始圖像中的點經過某一算法映射到目標圖像的點的行為,即要找到目標圖像中的點p1對應在原始圖像中點p0,簡單而言就是找點p0。
假設:
- 原始圖像src的分辨率為(srcW * srcH);
- 目標圖像dst的分辨率為(dstW * dstH)。
那么:
原始圖像寬與目標圖像寬的比例
原始圖像高與目標圖像高的比例
由
所以,原始圖像中的點p0的坐標求出分別為x0, y0(可能含有小數)。
最鄰近插值
原理
由上述推導過程可以求得原始圖像中的點p0(x0, y0),但是,在此過程可以看出,該點的坐標值可能含有小數,所以,我們必須采取一定方法(如:四舍五入)來舍棄小數部分,從而取得整數表示的像素點坐標, 該過程即為最鄰近插值方法。
優缺點
最鄰近插值簡單且直觀,但得到的圖像質量不高,特別在圖像放大后可能產生明顯鋸齒。
雙線性插值
原理
如圖2所示,最鄰近插值是當求得p0后,直接找其鄰近的點p1, p2, p3, p4中的一個的像素值作為目標點的像素;而雙線性插值,則是根據p0點與周圍4點(p1, p2, p3, p4)距離關系計算目標點的像素值。
圖2 雙線性插值坐標圖示
通過計算得到的原始點為p0(x0, y0),則其4周的點分別為:
x0的可能取值為:sx1 = (int)x0, sx2 = sx1 + 1
y0的可能取值為:sy1 = (int)y0, sy2 = sy1 + 1
圖2中:
s1 = y0 – sy1
s2 = sx2 – x0
s3 = 1.0 – s1
s4 = 1.0 – s2
假設p1, p2, p3, p4的像素值分別為v1, v2, v3, v4,
則雙線性插值計算p0點像素值v0公式為:
v0 = v1*s1*s4 + v2*s1*s2 + v3*s2*s3 + v4*s3*s4
優缺點
- 雙線性內插值法計算量大,但縮放后圖像質量高,不會出現像素值不連續的的情況。
- 雙線性插值具有低通濾波器的性質,使高頻分量受損,所以可能會使圖像輪廓在一定程度上變得模糊。
三次卷積法
原理
在雙線性插值中,考慮計算得到的點p0(x0, y0)周圍4個點的距離關系來取得像素值;而在三次卷積法中,考慮點p0(x0, y0)的周圍的16鄰點。
假設:
由上述計算得到的點p0(x0, y0)的像素值表示為
其中:
i為x0整數部分,u為x0的小數部分;
j為y0的整數部分,v為y0的小數部分。
則可表示為:
其中:
S(x)是對的逼近(pi是圓周率—π)
優缺點
三次卷積法能夠克服最鄰近插值和雙線性插值兩種算法的不足,計算精度高,但計算亮大。