双三次補間

バイキュービック補間といくつかの1次元および2次元補間の比較。
///の点は、それぞれ補間点と隣接サンプルに対応しています。
地面からの高さは、それぞれの値に対応しています。

数学において双三次補間は三次スプライン補間(データセットに三次補間を適用する手法)の拡張であり、2次元の規則的なグリッド上のデータ点を補間する。補間された面(つまり、画像ではなくカーネルの形状)は、双一次補間最近傍補間によって得られる対応する面よりも滑らかになる。双三次補間は、ラグランジュ多項式三次スプライン、または三次畳み込みアルゴリズムのいずれかを使用して実行できる

画像処理において、画像の再サンプリングでは、速度が問題にならない場合、双線形補間や最近傍補間よりも双三次補間が選ばれることが多い。4ピクセル(2×2)のみを考慮する双線形補間とは対照的に、双三次補間は16ピクセル(4×4)を考慮します。双三次補間で再サンプリングされた画像は、選択されたb値とc値に応じて、 異なる補間アーティファクトが生じる可能性がある。

計算

25個の単位正方形を継ぎ合わせた正方形上の双三次補間。Matplotlib実装に従った双三次補間。色は関数の値を示します。黒い点は補間対象となる所定のデータの位置です。色サンプルが放射状対称ではないことに注意してください。
上記と同じデータセットでの双線形補間。 [疑わしい議論]表面の微分は正方形の境界上で連続ではありません。
上記と同じデータセットに対する最近傍補間。

単位正方形の4つの頂点、、、、における関数値と導関数が既知であるとする。補間された曲面は次のように表される

補間問題は16個の係数を決定することから成ります関数値と対応づけることで、以下の4つの方程式が得られます。

同様に、および方向の導関数に対する 8 つの方程式:

混合偏微分に関する4つの方程式:

上記の表現では、次の ID が使用されています。

この手順により、単位正方形上に連続かつ連続な導関数を持つ曲面が得られます。任意のサイズの正方格子上の双三次補間は、このような双三次曲面をつなぎ合わせることで実現でき、境界上で導関数が一致することが保証されます。

未知のパラメータをベクトルに グループ化し上記の連立方程式を線形方程式の行列に再定式化することができます

行列を反転すると、より有用な線形方程式 が得られこれを迅速かつ簡単に計算できます。

16個の係数に対しては別の簡潔な行列形式も存在する。または

直線グリッドへの拡張

多くの場合、アプリケーションでは、単位正方形ではなく直線グリッド上のデータを用いた双三次補間が求められます。この場合、 と の恒等式はとなり、点を含むセルの間隔でありも同様です。この場合、係数を計算する最も実用的な方法は、を として、 を前と同じように で解くことです。次に、正規化された補間変数が として計算されます。ここで、 と点 を囲むグリッド点のと座標です。そして、補間面は次のようになります。

関数値から導関数を求める

導関数が不明な場合は、通常、有限差分などを使用して、単位正方形の角に隣接する点の関数値から近似されます

この方法を用いて、単導関数、またはのいずれかを求めるには、適切な軸における2点間の傾きを求めます例えば、いずれかの点を求めるには、対象点の左右の点についてを求め、それらの点を結ぶ直線の傾きを計算します。同様に、 についても同様に行います

相互導関数 を求めるには、両軸でそれぞれ1つずつ導関数を取ります。例えば、まず の手順を使って目標点の上と下の点の導関数を求め、次にそれらの値(通常はそれらの点の の値ではなく)に対して の手順を適用して、目標点の の値を得ることができます。(あるいは、逆の方法で、まず と を計算し、それからそれらから を求めることもできます。どちらの方法も結果は同じです。)

データセットの端で周囲の点が欠落している場合、欠落した点はいくつかの方法で近似できます。単純で一般的な方法は、既存の点から目標点までの傾きがそれ以上変化しないと仮定し、これに基づいて欠落点の仮想的な値を計算することです。

双三次畳み込みアルゴリズム

畳み込みカーネル
畳み込みカーネル(2Dで拡張)

双三次スプライン補間では、各グリッドセルについて、上述の線形システムの解が必要です。同様の特性を持つ補間関数は、両次元において以下のカーネルを 用いた畳み込みを適用することで得られます。 ここで、 は通常 -0.5 または -0.75 に設定されます。また、すべての非ゼロ整数 に対して となることに注意してください

このアプローチは、TRW Systems GroupのRifmanによって提案され、ERTS(地球資源技術衛星、後のLandsat 1)の画像データを対象としました。 [1] [2] [3]当初、は-1に固定されていましたが、後に同社のSimonによってパラメータ化され、-0.5、-0.75、-1.0が意味のある値になりました。 [4]しかし、これらの提案では導出プロセスや公式が十分に示されていなかったため、後にKeysが完全な形で再提案し、 の場合、元の関数のサンプリング間隔に関して3次収束が達成されることを示しました。 [5]

畳み込みカーネルは次のように導出される[6]

条件: 、また 1 次導関数: 、の場合、次のようになります。

上記の連立方程式を解くと、次の式が得られます。

行列表記

行列表記のために畳み込みカーネルを0から1にシフト

行列表記を用いると、この式をより分かりやすく表現できます。1 次元の場合、0から1までの範囲で表すことができます。1次元3次畳み込み補間では、4つのサンプル点が必要であることに注意してください。各照会点に対し、左側に2つのサンプル点、右側に2つのサンプル点が配置されます。これらの点には、このテキストでは-1から2までのインデックスが付けられています。0でインデックス付けされた点から照会点までの距離は、ここで で表されます。

であるため、これはCatmull-Romスプラインと一致する。したがって、を とする双三次補間は「Catmull-Rom補間」と呼ばれることもある。[7]

2次元の場合、まず に1回適用し、次に に再度適用します

微分連続性

定義により 1 次導関数で連続しており、次の行列表記を使用して簡単に検証できます。

したがって、1 次導関数では連続です。

したがって、2 次導関数では連続ではありません。

他の方法との比較

以下に、各方法のカーネル関数の比較を示します。

方法カーネル関数カーネル関数(2D拡張)
最も近い隣人
双線形補間
双三次補間

コンピュータグラフィックスでの使用

バイキュービックアルゴリズムは、画像や動画を表示用に拡大縮小する際によく使用されます(ビットマップの再サンプリングを参照)。バイキュービックアルゴリズムは、一般的なバイリニアアルゴリズムよりも優れたディテールを保持します

バイキュービックアルゴリズムは画像のダウンスケーリングにも使用されますが、ダウンスケーリング中の再サンプリングは実際の光学におけるズームアウトの効果とは異なるため、他の方法の方が適している場合があります。

パラメータ「a」の効果

この図の下半分は上半分を拡大したもので、左側の線のシャープネスがどのように実現されているかを示しています。バイキュービック補間によりオーバーシュートが発生し、アキュータンスが増大します。

しかし、カーネルの負のローブにより、オーバーシュート(ハロー)が発生します。これはクリッピングを引き起こす可能性があり、アーティファクト(リンギングアーティファクトも参照)となりますが、アキュータンス(見かけのシャープネス)を高めるため、望ましい効果となることもあります。この効果は、パラメータまたはの場合の方が の場合よりも大きくなります補間カーネルの比較

のとき、補間結果は元の画像(サンプリング前の連続関数)の2次導関数(剰余項を除く)までテイラー近似と一致します。[8] [9]この効果の明確な例は、元の画像が線形関数(単純なグラデーション画像)で、補間結果が の場合にのみ線形関数になる場合です。たとえば、入力が のとき、補間結果は であり、 の場合にのみ線形関数(2次項と3次項が0)になります[10]

補間グラフ(a=-0.5)補間グラフ(a=-0.75)補間グラフ(a=-1.0)

下図は、単純なグラデーション画像を16倍に拡大したものと、標準テスト画像「カメラマン」 [11]の一部を8倍に拡大したものを示している。前者の縦縞と後者のこめかみ周辺の人工的なまだら模様は、前述の効果によって生じたアーティファクトである。

最近傍補間
(比較用)
拡大例(a=-0.5)拡大例(a=-0.75)拡大例(a=-1.0)拡大例(最近傍補間)
拡大例(a=-0.5)拡大画像例(a=-0.75)拡大例(a=-1.0)拡大例(最近傍補間)

のとき、畳み込みカーネルの2次導関数は[10]で連続するが、補間結果は連続する2次導関数を持たないことに注意されたい。また、のとき、畳み込みカーネルの導関数は[10]におけるsinc関数の導関数と一致するが、これはsinc補間との比較以外には意味を持たない

以下は、一般的に使用される実装での設定の例です。

実装
Javaアドバンストイメージング(javax.media.jai.InterpolationBicubic)[* 1]

ImageMagick (Imagick::resizeImage) -- FILTER_CATROM指定時[* 2]
MATLAB (imresize) [* 3]
Pillow (Image.resize) [* 4]
TensorFlow (tf.image.resize) -- v1.x [* 5]
JAX (jax.image.resize) [* 6]

OpenCV (cv::resize, cv::warpAffine) [* 7]

PyTorch (torch.nn.functional.grid_sample) [* 4]
TensorFlow (tf.image.resize) -- v2.0以降[* 5]

Javaアドバンストイメージング(javax.media.jai.InterpolationBicubic2)[* 8]
  1. ^ Java 高度なイメージング - クラス InterpolationBicubic
  2. ^ ImageMagick v6 の例 - 再サンプリングフィルタ - キュービックフィルタファミリー
  3. ^ Stack Overflow - imresize - 双三次補間を理解しようとする
  4. ^ ab PyTorch ドキュメント > torch.nn.functional > torch.nn.functional.grid_sample
  5. ^ ab tensorflow/tensorflow/core/kernels/image/resize_bicubic_op.cc
  6. ^ jax-ml/jax - "bicubic" を使用する場合の jax.image.resize と F.interpolate の違いに注意してください #15768
  7. ^ opencv/opencv - INTER_CUBIC は Catmull-Rom 補間をデフォルトにすべき #17720
  8. ^ Java 高度なイメージング - クラス InterpolationBicubic2

再サンプリング位置

画像を整数倍に拡大する場合、拡大画像の重心が入力画像に対してずれないように、リサンプリング位置を入力画像のピクセル間に設定するのが一般的です(下図左参照)。
一方、リサンプリング位置を入力画像のピクセルに重なるように設定する方法もあります(下図右参照)。この方法は、変換の可逆性を確保します。

再サンプル位置の例
再サンプル位置の例

外挿

補間には、入力画像の左右(または上下)の2ピクセルが必要です。画像の外側の端は無効であるため、外挿が必要です。外挿の方法は実装によって異なります。
以下は、最外側のピクセルをコピーして外挿する例です。

最も外側のピクセル値をコピーして外挿する例
最も外側のピクセル値をコピーして外挿する例

参照

参考文献

  1. ^ Rifman, Samuel S. (1973). 「ERTSマルチスペクトル画像のデジタル補正」NASA技術報告書73N28327 .
  2. ^ Bauer, Brian P. (1980). 「MSSと合成画像を用いたリサンプリング技術の調査」(PDF) . EDC文書0044, USGS EROSデータセンター: 12.
  3. ^ ジョージ、ウォルバーグ (1994)。デジタル画像ワーピング、第 3 版130 ~ 131ページ 。ISBN 0-8186-8944-7
  4. ^ Simon, KW (1975). 「幾何学的操作のためのデジタル画像再構成と再サンプリング」LARSシンポジウム論文67 .
  5. ^ R. Keys (1981). 「デジタル画像処理のための三次畳み込み補間」. IEEE Transactions on Acoustics, Speech, and Signal Processing . 29 (6): 1153– 1160. Bibcode :1981ITASS..29.1153K. CiteSeerX 10.1.1.320.776 . doi :10.1109/TASSP.1981.1163711. 
  6. ^ キーズ(1981)、pp.1153-1154
  7. ^ 「Catmull-Rom補間」という用語が使用されている例: INTER_CUBICはデフォルトでCatmull-Rom補間に設定される必要があります。#17720
  8. ^ キーズ(1981)、pp.1154-1155
  9. ^ ウォルバーグ(1994)、130ページ
  10. ^ abc サイモン(1975)、p.3A-3
  11. ^ MIT Works がデジタル化される - カメラマン
  • 標高サンプルへの補間の適用
  • 補間理論
  • (双)三次補間の説明とJava/C++実装
  • 双三次ラグランジュ補間の Excel ワークシート関数
Retrieved from "https://en.wikipedia.org/w/index.php?title=Bicubic_interpolation&oldid=1324435203"