画像補間法の比較 - 最近傍、バイリニア、バイキュービック、Lanczos の特性と使い分け
画像補間とは - なぜ補間が必要なのか
画像補間 (Image Interpolation) は、既知のピクセル値から未知の位置のピクセル値を推定する処理です。画像のリサイズ (拡大・縮小)、回転、歪み補正、パースペクティブ変換など、ピクセルグリッドの再配置が必要なあらゆる幾何学的変換で使用されます。
補間が必要になる場面: 例えば 100 × 100の画像を 200 × 200に拡大する場合、出力画像の各ピクセル位置を入力画像に逆変換すると、整数座標に一致しない小数座標 (例: x=3.7, y=5.2) が得られます。この小数座標でのピクセル値を周囲の既知ピクセルから推定するのが補間です。
補間品質の評価指標:
- PSNR (Peak Signal-to-Noise Ratio): 元画像との数値的な差異。高いほど良い。
- SSIM (Structural Similarity): 人間の知覚に近い構造的類似度。1.0 が完全一致。
- エッジ保持性: エッジのシャープさが維持されるか。
- アーティファクト: ジャギー、リンギング、ぼけなどの視覚的劣化。
補間法の分類: 補間法は参照するピクセル数 (サポートサイズ) で分類されます。最近傍法は 1 ピクセル、バイリニアは 4 ピクセル (2x2)、バイキュービックは 16 ピクセル (4x4)、Lanczos-3 は 36 ピクセル (6x6) を参照します。参照ピクセル数が多いほど品質は向上しますが、計算コストも増加します。
最近傍法 (Nearest Neighbor) - 最速だが品質は最低
最近傍法は最も単純な補間アルゴリズムで、目的座標に最も近い整数座標のピクセル値をそのまま使用します。計算コストが最小で、特定の用途では最適な選択肢となります。
アルゴリズム: 出力ピクセル (x', y') に対応する入力座標 (x, y) を計算し、round(x), round(y) の位置のピクセル値を出力します。浮動小数点の丸めのみで補間が完了するため、1 ピクセルあたり 1 回のメモリアクセスで済みます。
利点:
- 計算速度が最速 (バイリニアの約 3-4 倍高速)
- 新しい色値を生成しない (入力に存在する値のみ出力)
- ピクセルアートやインデックスカラー画像の拡大に最適
- セグメンテーションマスクやラベルマップの変換に必須
欠点:
- 拡大時にブロック状のジャギー (階段状のエッジ) が顕著に発生
- 縮小時にエイリアシング (モアレ) が発生しやすい
- 斜めのエッジや曲線が階段状に見える
- 写真やグラデーションの処理には不適切
適切な使用場面: ピクセルアートの整数倍拡大 (2x, 3x, 4x) では、最近傍法がピクセルの鮮明さを保持する唯一の正しい選択です。また、セマンティックセグメンテーションのマスク画像では、補間によって存在しないクラス値が生成されることを防ぐため、最近傍法を使用する必要があります。OpenCV では cv2.INTER_NEAREST で指定します。
実測性能: 1,920 × 1,080→ 3,840 × 2,160の拡大処理で約 2ms (CPU)。同条件でバイリニアは約 7ms、バイキュービックは約 15ms です。
バイリニア補間 - 品質と速度のバランス
バイリニア補間 (Bilinear Interpolation) は、目的座標を囲む 4 つのピクセル (2x2) の加重平均で値を推定します。品質と計算コストのバランスに優れ、リアルタイムアプリケーションで最も広く使用される補間法です。
アルゴリズム: 座標 (x, y) の値を求める場合、まず x 方向に 2 回の線形補間を行い、次に y 方向に 1 回の線形補間を行います (計 3 回の線形補間)。具体的には、4 つの隣接ピクセル f(0,0), f(1,0), f(0,1), f(1,1) と小数部分 (dx, dy) から:
result = f(0,0)(1-dx)(1-dy) + f(1,0)dx(1-dy) + f(0,1)(1-dx)dy + f(1,1)dx*dy
利点:
- 最近傍法と比較して大幅に滑らかな結果が得られる
- 計算コストが低く、リアルタイム処理に適する
- GPU ハードウェアでネイティブサポート (テクスチャサンプリング)
- ほとんどの用途で十分な品質を提供する
欠点:
- エッジがわずかにぼける (ローパスフィルタ効果)
- 大幅な拡大 (4x 以上) ではぼけが目立つ
- バイキュービックや Lanczos と比較するとシャープさに劣る
GPU での高速処理: 現代の GPU はテクスチャユニットにバイリニア補間をハードウェア実装しており、追加コストなしで利用可能です。WebGL の gl.LINEAR、CUDA のテクスチャメモリなど、GPU プログラミングではバイリニアがデフォルトの補間法です。
OpenCV では cv2.INTER_LINEAR で指定し、cv2.resize() のデフォルト補間法でもあります。Pillow では Image.BILINEAR (または Image.LINEAR) で指定します。
バイキュービック補間 - 高品質リサイズの標準
バイキュービック補間 (Bicubic Interpolation) は、目的座標を囲む 16 ピクセル (4x4) を参照し、3 次多項式で重み付けする高品質な補間法です。Photoshop のデフォルト補間法であり、印刷用途や高品質な画像処理の標準として広く採用されています。
アルゴリズム: 各方向に 4 点を参照し、3 次の畳み込みカーネルで重み付けします。カーネル関数 W(t) は:
W(t) = (a+2)|t|³ - (a+3)|t|² + 1 (|t| ≤ 1)
W(t) = a|t|³ - 5a|t|² + 8a|t| - 4a (1 < |t| < 2)
パラメータ a は通常 -0.5 (Catmull-Rom スプライン) または -0.75 (Photoshop) が使用されます。a=-0.5 は理論的に最適な近似精度を持ち、a=-0.75 はよりシャープな結果を生みます。
利点:
- バイリニアより明らかにシャープなエッジを保持
- 滑らかなグラデーションの再現性が高い
- 拡大時のぼけが少なく、自然な見た目を維持
- 印刷品質の画像処理に十分な精度
欠点:
- バイリニアの約 2-3 倍の計算コスト
- わずかなリンギング (エッジ付近のオーバーシュート) が発生する場合がある
- Lanczos と比較するとわずかに品質が劣る
実測比較 (1,920 × 1,080→ 3,840 × 2,160): PSNR でバイリニアより平均 1.5-2.0dB 高く、SSIM で 0.02-0.03 ポイント優れます。処理時間は約 15ms (CPU) で、バイリニアの約 2 倍です。OpenCV では cv2.INTER_CUBIC、Pillow では Image.BICUBIC で指定します。
Lanczos 補間 - 最高品質のリサンプリング
Lanczos 補間は sinc 関数を窓関数で切り詰めた理論的に最適に近い補間カーネルを使用し、最高品質のリサンプリングを実現します。Lanczos-2 (4x4)、Lanczos-3 (6x6)、Lanczos-4 (8x8) のバリエーションがあり、Lanczos-3 が最も一般的です。
理論的背景: 理想的な補間は sinc 関数 (sin(πx)/(πx)) による畳み込みですが、sinc 関数は無限のサポートを持つため実用的ではありません。Lanczos カーネルは sinc 関数を Lanczos 窓 (sinc(x/a)) で切り詰めたもので、有限サポートで sinc に最も近い近似を提供します。
L(x) = sinc(x) × sinc(x/a) (|x| < a)
L(x) = 0 (|x| ≥ a)
a=3 (Lanczos-3) が品質とコストの最適バランスとされ、6x6=36 ピクセルを参照します。
利点:
- 全補間法の中で最もシャープなエッジ保持
- エイリアシングの抑制に優れる
- 縮小時の品質が特に高い (プリフィルタリング効果)
- 写真の高品質リサイズに最適
欠点:
- 計算コストが最も高い (バイキュービックの約 2-3 倍)
- リンギングアーティファクトがバイキュービックより顕著に発生する場合がある
- 高コントラストのエッジ付近でハロー (光輪) が見えることがある
実測性能: 1,920 × 1,080→ 3,840 × 2,160で約 35ms (CPU)。PSNR はバイキュービックより 0.3-0.8dB 高く、特に縮小処理で差が顕著です。OpenCV では cv2.INTER_LANCZOS4 (Lanczos-4)、Pillow では Image.LANCZOS (Lanczos-3) で指定します。libvips は Lanczos-3 をデフォルトとし、大量画像のバッチ処理に最適化されています。
用途別の最適な補間法選択ガイド
補間法の選択は用途、品質要件、パフォーマンス制約によって決まります。以下に具体的なユースケースごとの推奨を示します。
Web 画像のサムネイル生成: Lanczos-3 を推奨。縮小処理では Lanczos のプリフィルタリング効果が最も有効で、モアレやエイリアシングを抑制します。サーバーサイドでの事前生成であれば処理時間は問題になりません。ImageMagick のデフォルト、libvips のデフォルトも Lanczos です。
リアルタイム動画処理: バイリニアを推奨。GPU ハードウェアサポートにより追加コストなしで利用可能です。4K 60fps のリアルタイム処理ではバイキュービック以上は GPU でも負荷が高くなります。
ピクセルアート・ドット絵: 最近傍法が唯一の正解。他の補間法はピクセルの境界をぼかし、ドット絵の意図したシャープさを破壊します。整数倍 (2x, 3x) の拡大に限定し、非整数倍は避けます。
医療画像・科学画像: バイキュービック (a=-0.5) を推奨。Lanczos のリンギングが診断に影響する可能性があるため、リンギングの少ないバイキュービックが安全です。DICOM ビューアの多くがバイキュービックを採用しています。
印刷用高解像度出力: Lanczos-3 を推奨。印刷では処理時間よりも品質が最優先です。300dpi 以上の出力では補間品質の差が視認可能になるため、最高品質の Lanczos を選択します。
機械学習の前処理: バイリニアまたはバイキュービック。学習データの前処理では処理速度が重要で、数百万枚の画像を処理する場合は速度差が数時間に影響します。推論時はバイリニアで十分です。PyTorch の F.interpolate はバイリニアがデフォルトです。