
圖像縮放算法:最近鄰、雙線性、雙三次與 Lanczos
放大圖像時,必須產生原圖中不存在的新像素值;縮小圖像時,則要捨棄細節,同時避免把精細圖案變成錯誤形狀。兩者都是信號重建與重新採樣,因此選用的濾波器會決定銳利度、模糊、混疊與振鈴現象。
日文原文發布: 2026-04-27
縮放不只是改變網格尺寸
點陣圖像是有限的樣本陣列。將 100 × 100 的圖像放大到 200 × 200,需要四倍的輸出像素;縮小時則必須把多個來源像素的資訊合併。
- 放大:重建既有樣本之間的數值。
- 縮小:先移除較小網格無法表示的頻率,再重新採樣。
把來源圖像視為連續信號的採樣結果,就能理解為什麼沒有任何一種方法適合所有圖像。
Nyquist–Shannon 採樣定理與混疊
與 Harry Nyquist、Claude Shannon 相關的採樣定理指出:若要無失真地重建頻寬受限信號,採樣頻率必須高於信號最高頻率的兩倍。若縮小圖像前沒有充分濾波,高於新 Nyquist 極限的頻率會折回較低頻率。
在圖像中,這會表現為摩爾紋、鋸齒狀斜邊、閃爍細節,或精細圖案變成另一種圖案。因此,高質素縮圖在概念上是:
低通濾波 → 在較小網格上採樣
最近鄰:保留像素邊界
最近鄰插值法會為每個輸出像素中心選擇距離最近的來源像素。各種實現採用的座標慣例可能不同;以下範例會對齊輸入與輸出的像素中心,並在圖像邊緣限制採樣位置。
u = (x + 0.5) / scaleX - 0.5
v = (y + 0.5) / scaleY - 0.5
output(x, y) = input(
clamp(round(u), 0, inputWidth - 1),
clamp(round(v), 0, inputHeight - 1)
)
它速度快,也不會產生中間色。這正是像素藝術、遮罩與許多圖表所需要的效果;但用於照片放大會產生明顯方塊,縮小時若處理不慎也會嚴重混疊。
雙線性:混合四個相鄰像素
雙線性插值會混合周圍四個像素。若 fx 與 fy 是來源網格內的相對距離:
output = (1-fx)(1-fy) I00
+ fx (1-fy) I10
+ (1-fx) fy I01
+ fx fy I11
它的計算成本低,也廣泛受到繪圖硬件加速。缺點是畫面容易變柔和,尤其在反覆轉換後更為明顯。
雙三次與 Mitchell–Netravali:一系列三次濾波器
雙三次插值通常使用 4 × 4 鄰域與可分離的三次核函數。「雙三次」是一系列濾波器的統稱,而不是單一通用方法;不同參數會改變銳利度、模糊與振鈴程度。
Catmull 與 Rom 在 1974 年描述了一種局部插值樣條;Keys 在 1981 年發表廣泛採用的三次卷積公式;Mitchell 與 Netravali 則在 1988 年提出雙參數家族。其中常用的均衡設定為 B = 1/3、C = 1/3。
| 範例 | 典型特性 |
|---|---|
| Catmull–Rom | 銳利、通過原始樣本點,強烈邊緣附近可能振鈴 |
| 三次 B 樣條 | 平滑且相對柔和 |
| Mitchell–Netravali | 在模糊與振鈴之間取得平衡 |
Lanczos:加窗 sinc 濾波器
理想的頻寬受限重建核是 sinc 函數,但它的支撐範圍無限大,實現上並不實際。Lanczos 核將 sinc 乘上另一個 sinc 視窗,並把範圍限制在有限半徑內:
sinc(0) = 1
sinc(x) = sin(πx) / (πx), x ≠ 0
L(x) = sinc(x) × sinc(x/a), |x| < a
L(x) = 0, |x| ≥ a
a = 2 與 a = 3 是常見的實用選擇。Lanczos 在縮小圖像時通常能保留精細細節,但強烈明暗交界可能出現亮暗光暈。增加波瓣數會提高運算量,也不保證每張圖像都更好看。
如何選擇濾波器
| 用途 | 實用起點 |
|---|---|
| 像素藝術或索引遮罩 | 最近鄰 |
| 即時紋理顯示 | 雙線性 |
| 一般縮圖 | 雙三次或 Mitchell–Netravali |
| 照片縮小 | Lanczos 或設計良好的面積濾波器 |
| 大幅縮小 | 面積/方框濾波或分階段縮小 |
| 創意式大幅放大 | AI 超解像度,但應註明細節是估算產生 |
務必檢查邊緣、細線、文字與重複圖案。人像上看起來銳利的濾波器,可能在介面圖形上產生無法接受的光暈。
CSS image-rendering 表示偏好,不指定固定核函數
img {
image-rendering: auto;
image-rendering: smooth;
image-rendering: high-quality;
image-rendering: pixelated;
image-rendering: crisp-edges;
}
CSS Images 將這些值定義為繪製偏好,並未要求每個瀏覽器與裝置使用完全相同的數學核函數。需要保留清楚像素邊界時可使用 pixelated,並針對目標瀏覽器與縮放倍率進行測試。
AI 放大無法還原真實原貌
超解像度模型可以根據訓練數據中學到的模式,生成看似合理的紋理。這可能產生好看的結果,但新增細節是估算出來的,而不是從來源圖像量度所得。
對證據、科學量度、醫療工作,或任何重視忠實度多於外觀的用途,應保留原始檔,並使用行為可記錄的確定性重新採樣方法。
重點整理
- 縮放會重建信號,並在新的網格上採樣。
- 縮小時需要低通濾波,以降低混疊。
- 最近鄰插值保留離散像素;雙線性速度快但較柔和。
- 雙三次是一系列具有不同取捨的三次濾波器。
- Lanczos 是實用的加窗 sinc 濾波器,畫面可很銳利但可能振鈴。
- AI 放大會創造合理細節,並不等同於還原證據。
參考資料及來源
- Nyquist(1928)— Certain Topics in Telegraph Transmission Theory ↗
- Shannon(1949)— Communication in the Presence of Noise ↗
- Keys(1981)— Cubic Convolution Interpolation for Digital Image Processing ↗
- Mitchell 與 Netravali(1988)— Reconstruction Filters in Computer Graphics ↗
- Lanczos(1938)— Trigonometric Interpolation of Empirical and Analytical Functions ↗
- W3C CSS Images Module Level 3 — image-rendering ↗
編輯說明
本文使用 AI 協助編輯,並在發布前由編輯核對。內容仍可能包含事實、理解或時效上的錯誤;作出重要決定前,請查閱所列的一手資料或官方文件。

