
画像スケーリングのアルゴリズム — Lanczos 1956 から Mitchell-Netravali 1988、bilinear/bicubic の数学
「写真を 2 倍に拡大したらピクセルがガビガビになった」「縮小したらアンテナが消えた」「リサイズした文字がなんだかぼやけている」 — 全部、画像スケーリングのアルゴリズム選択が原因です。本記事では信号処理の基礎である Nyquist-Shannon サンプリング定理 (1928 / 1949) を出発点に、Lanczos 1956、Catmull-Rom 1974、Mitchell-Netravali 1988 SIGGRAPH の原典までを辿りつつ、Nearest / Bilinear / Bicubic / Lanczos の数学的差異と用途を整理します。
なぜ「スケーリング」は数学的に難しいのか
画像は離散的なピクセルの配列です。100×100 px の画像を 200×200 に拡大するとき、新しい 4 倍のピクセル値はどこから持ってくるのか — 単純そうで根が深い問題です。
- 拡大 (upscaling): 元になかった中間値を「補間」して作る必要がある
- 縮小 (downscaling): 複数のピクセルを 1 つにまとめる必要がある (情報を捨てる)
どちらも本質的には「元の連続信号を再構成し、新しい解像度でサンプリングし直す」操作です。離散信号と連続信号の往復が伴うため、信号処理の理論が必要になります。
理論的基盤 — Nyquist-Shannon サンプリング定理
1928 年に Harry Nyquist (Bell Labs) が "Certain Topics in Telegraph Transmission Theory" AIEE Trans. で、1949 年に Claude Shannon が "Communication in the Presence of Noise" Proc. IRE で確立した標本化定理。画像処理にも例外なく適用されます。
連続信号の最大周波数 = f_max
情報を失わずサンプリングするには
サンプリング周波数 ≥ 2·f_max
逆に言うと、サンプリング周波数の半分 (Nyquist 周波数) を超える成分があると「エイリアス (折り返し雑音)」が発生する。これが画像縮小時のモアレ・ジャギー・ストロボ効果の正体です。
例: 1000×1000 の写真を 100×100 に縮小するとき、1/10 のサンプリングで再構成するためには、元画像の高周波成分 (周波数 ≥ 1/(2×10) = 1/20 px⁻¹) を事前にローパスフィルタで除去する必要がある。これを怠ると、細い線や格子模様が消えたり、別の柄に化けたりします。
つまり「縮小 = ローパスフィルタ + サンプリング」、「拡大 = サンプリング + 補間 (高周波の充填)」という 2 段階処理が原理的に必要です。
Nearest Neighbor — 最速・最低品質
最も単純な手法。新しい位置に対応する元画像の最も近いピクセルをそのまま使う。
output(x, y) = input(round(x / scale_x), round(y / scale_y))
長所:
- 計算量 O(1) 1 ピクセルあたり 1 メモリアクセス
- ピクセル値を一切変えない (色保存)
- ピクセルアート・ドット絵にはこれ一択 (補間すると意図したカクカク感が消える)
短所:
- 拡大: 角ばったジャギー (階段状)
- 縮小: ローパスフィルタなしのため重大なエイリアス
CSS の image-rendering: pixelated はこのアルゴリズムを指定する標準値で、Web サイトのレトロゲーム表現や QR コード描画で使われます。
Bilinear — 4 近傍の線形補間
新しいピクセルの位置を囲む 4 つの元ピクセルを、距離に反比例した重みで平均する。x 方向と y 方向の線形補間を 2 段階に行うため "bi-linear"。
// (x, y) が 4 つの元ピクセル (x0,y0), (x1,y0), (x0,y1), (x1,y1) に挟まれているとき
fx = x - x0, fy = y - y0
output(x, y) =
(1-fx)(1-fy) · I(x0, y0)
+ fx (1-fy) · I(x1, y0)
+ (1-fx) fy · I(x0, y1)
+ fx fy · I(x1, y1)
計算量 O(4) で軽く、滑らかさが格段に上がる。GPU のテクスチャマッピングはほぼこれ (ハードウェア実装あり)。
ただし周波数特性は「三角窓」なので、Nyquist 周波数の半分くらいから減衰し始め、高周波成分はバッサリ落ちる → 結果は「ぼやけ」気味。Web ページの自動リサイズ縮小などで使われ、CSS の image-rendering: auto のデフォルトはほぼこれ相当。
Bicubic — 16 近傍の 3 次補間
4×4 = 16 ピクセルを使い、3 次多項式で補間。bilinear より計算量は 4 倍だが、シャープさが格段に向上。
1974 年 Edwin Catmull と Raphael Rom が "A class of local interpolating splines" でその一形態 (Catmull-Rom スプライン) を発表。一般的な bicubic はこの spline を 2D 拡張したもの。
// 1D 3次重み関数 (Keys 1981)
W(x) = (a+2)|x|³ - (a+3)|x|² + 1 if |x| ≤ 1
= a|x|³ - 5a|x|² + 8a|x| - 4a if 1 < |x| ≤ 2
= 0 otherwise
// パラメータ a (-0.5 〜 -1.0 が一般的)
係数 a によりシャープネスが変わる。Photoshop の "Bicubic Sharper" / "Bicubic Smoother" はこれを使い分けている。
- a = -0.5: Catmull-Rom (Photoshop "Bicubic Sharper")
- a = -0.75: Mitchell-Netravali の 1 例 (B=0, C=0.75 と等価)
- a = -1.0: Cubic Convolution (Keys 1981 の標準値)
Mitchell-Netravali 1988 — 万能の 3 次フィルタ族
1988 年 SIGGRAPH で Don Mitchell と Arun Netravali が発表した "Reconstruction filters in computer-graphics" は、3 次補間を 2 つのパラメータ B, C で連続的に表現する家族を提案しました。
// 1D 重み関数 (B, C ∈ [0, 1])
W(x) = (1/6) ·
┌ (12 - 9B - 6C) |x|³ + (-18 + 12B + 6C) |x|² + (6 - 2B) if |x| ≤ 1
│ (-B - 6C) |x|³ + (6B + 30C) |x|² + (-12B - 48C) |x| + (8B + 24C) if 1 < |x| ≤ 2
└ 0 otherwise
パラメータの組み合わせで主要フィルタが全部出る:
| (B, C) | 名前 | 特徴 |
|---|---|---|
| (0, 0) | Hermite cubic | シンプル線形に近い |
| (0, 0.5) | Catmull-Rom | シャープ・コントラスト保存 |
| (0, 1) | Cubic Cardinal | 過剰シャープ・リンギング大 |
| (1, 0) | Cubic B-spline | 滑らか・ぼやけ気味 |
| (1/3, 1/3) | Mitchell-Netravali | SIGGRAPH 推奨。バランス最良 |
Mitchell と Netravali は心理物理学的評価実験を行い、被験者の主観評価で B=1/3, C=1/3 が最適と結論。2D 拡張は x, y 独立に同じカーネルを適用 (separable filter)。
FFmpeg / ImageMagick / Pillow など主要ライブラリの "Mitchell" オプションはこの (1/3, 1/3) を指す。デフォルトとしては最も無難な選択肢です。
Lanczos — sinc 関数による「理論的最良」近似
1956 年、ハンガリー出身の数学者 Cornelius Lanczos が "Applied Analysis" (Prentice-Hall) で発表した補間法。理論上、理想ローパスフィルタ = sinc 関数に基づきます。
sinc(x) = sin(πx) / (πx) (sinc(0) = 1 と定義)
// Lanczos カーネル (a パラメータでサポート幅を決める)
L(x) = sinc(x) · sinc(x/a) if -a ≤ x < a
= 0 otherwise
sinc は無限に伸びるリンギングを持つため、そのままでは実装不可能。Lanczos は 2 つ目の sinc で「窓」(window) をかけることで有限サポートに切り詰めるアイデアを提案しました。
パラメータ a (lobes 数):
- a = 2 (Lanczos2): 4×4 = 16 近傍。bicubic と同じ範囲
- a = 3 (Lanczos3): 6×6 = 36 近傍。Photoshop / GIMP / FFmpeg のデフォルト
- a = 4 (Lanczos4): 8×8 = 64 近傍。さらに高品質、計算重
長所:
- sinc 由来でエッジ保存が極めて良い (シャープ)
- 縮小・拡大ともに最高品質クラス
短所:
- 計算量大 (Lanczos3 で bilinear の ~9 倍)
- 強いエッジ周辺にリンギング (アンダーシュート/オーバーシュート) が出ることがある
縮小と拡大で別アルゴリズムが必要な理由
多くのライブラリは「拡大用」と「縮小用」で別の処理を持っています。
拡大時: 元画像のピクセル間に「中間値」を作る → 補間 (interpolation) 寄り
- 適切なフィルタ: Bicubic / Lanczos
- 2 倍程度なら違いが顕著、3 倍以上は AI 系 (Real-ESRGAN 等) が圧倒的
縮小時: 複数ピクセルを 1 つに圧縮 → ローパス + サンプリング (decimation)
- 適切なフィルタ: Box (面積平均) / Lanczos / Mitchell-Netravali
- 大きく縮小するとき (1/4 以下) は Box average (面積平均) が最速で品質も良い
- 2 倍程度の縮小は Lanczos3 がエッジ保存で優秀
Pillow (Python) の Image.thumbnail() は内部で 拡大かどうかを判定して適切なフィルタを選択しています。FFmpeg の swscale は 14 種類のアルゴリズムを切替可能。
実用ガイド — どれをいつ使うか
| 用途 | 推奨アルゴリズム | 理由 |
|---|---|---|
| ピクセルアート・ドット絵 (拡大) | Nearest | カクカク感を保持 |
| QR コード / バーコード (拡大) | Nearest | 輪郭をシャープに保ちスキャン精度向上 |
| UI のリアルタイム描画 | Bilinear | 軽量・GPU 最適化済 |
| サムネイル生成 (Web 一般) | Bicubic / Mitchell | 速度と品質のバランス |
| 写真の縮小 (印刷・配信用) | Lanczos3 + 弱い unsharp | エッジ保存最良 |
| 写真の大幅拡大 | AI 系 (Real-ESRGAN, waifu2x 等) | ピクセル補間では限界 |
| 1/4 以下への大縮小 | Box (面積平均) | 最速 + 高品質 |
本サイトの 画像変換, 画像圧縮, GIF 作成 ツールはサーバ側で sharp (libvips ベース) を使用。libvips のデフォルトは縮小: Box (大縮小) + Lanczos3 (微調整)、拡大: Bicubic です。
ブラウザでの制御 — CSS image-rendering
CSS でブラウザ自動スケーリングのアルゴリズムを指定できます。
img {
image-rendering: auto; /* デフォルト (実装は Bilinear/Bicubic) */
image-rendering: pixelated; /* Nearest neighbor (CSS Images Level 4) */
image-rendering: crisp-edges; /* スケーリング控えめ + シャープ保存 */
image-rendering: smooth; /* 滑らか優先 */
}
W3C CSS Images Level 4 で標準化された値。Chrome / Firefox / Safari すべて対応。ピクセルアート・QR コード・ドット絵を拡大表示するときは pixelated を必ず指定してください。デフォルトの bilinear だと意図しないぼやけが発生します。
現代の AI 拡大とサンプリング理論
2018 年以降、ESRGAN / Real-ESRGAN / Stable Diffusion Upscaler などの深層学習ベースの超解像技術が普及。これらは:
- 古典フィルタ (Bicubic 等) で 4 倍程度の拡大が限界 (ぼやけ vs ジャギー)
- AI は学習データから「もっともらしい高周波を生成」(Hallucination) する
注意: AI 拡大は「忠実な情報復元」ではない。元画像にない情報を作り出すため、医療画像・法廷証拠など正確性が要求される用途では Lanczos などの古典手法が引き続き標準です。AI は「自然画像で見栄えが良い」ことが目的。
Nyquist-Shannon の理論的上限自体は変わらず、AI は「事前知識による補間」と捉えるのが正しい理解です。
まとめ
- 画像スケーリング = 連続信号の再構成 + 新解像度サンプリング
- Nyquist-Shannon (1928/1949): エイリアス防止にローパスフィルタ必須
- Nearest: ピクセルアート専用、それ以外は不可
- Bilinear: 速いがぼやけ気味。GPU テクスチャマッピングの標準
- Bicubic (Catmull-Rom 等): バランス良し、汎用デフォルト
- Mitchell-Netravali (1988, B=C=1/3): SIGGRAPH 推奨、最良の中庸
- Lanczos3 (1956): sinc 由来で最高品質、Photoshop/FFmpeg デフォルト
- 縮小と拡大で別アルゴリズムが原則必要
- AI 超解像は「Hallucination」、忠実性が必要な用途は古典手法
参考文献・ソース
- Lanczos C. (1938) "Trigonometric Interpolation of Empirical and Analytical Functions" J. Math. Phys. 17:123-199 ↗
- Lanczos C. (1956) "Applied Analysis" Prentice-Hall ↗
- Mitchell D.P., Netravali A.N. (1988) "Reconstruction Filters in Computer Graphics" SIGGRAPH '88 Proc. 22(4):221-228 ↗
- Catmull E., Rom R. (1974) "A Class of Local Interpolating Splines" Computer Aided Geometric Design ↗
- Keys R.G. (1981) "Cubic Convolution Interpolation for Digital Image Processing" IEEE Trans. Acoust. Speech Signal Process. 29(6):1153-1160 ↗
- Nyquist H. (1928) "Certain Topics in Telegraph Transmission Theory" Trans. AIEE 47:617-644 ↗
- Shannon C.E. (1949) "Communication in the Presence of Noise" Proc. IRE 37(1):10-21 ↗
- W3C CSS Images Module Level 4 — image-rendering ↗
- Wolberg G. (1990) "Digital Image Warping" IEEE Computer Society Press ↗
記事作成に関する注記
本記事は AI(大規模言語モデル)を編集補助として活用して作成しています。 公開前に編集者が内容を確認していますが、事実誤認・仕様の解釈ミス・最新情報との齟齬が含まれる可能性があります。 重要な判断を行う際は、本文中の一次ソースや公式ドキュメントを必ずご自身でご確認ください。 誤りにお気づきの場合は、お問い合わせフォームよりご連絡いただけると助かります。


