バイキュービック補間

バイキュービック補間と他の1次元および2次元補間の比較。
黒のドットは補間されたポイント、赤/黄/緑/青のドットは隣接するサンプルを表す。各ドットの高さはそれぞれの値を示す。

数学において、バイキュービック補間（バイキュービックほかん、双3次補間、）は2次元の上のデータポイントを補間するための3次スプライン補間（データセットに3次補間を適用する方法）の拡張である。
補間された曲面 (画像ではなくカーネルの形状) は、バイリニア補間または最近傍補間によって得られる曲面よりも滑らかになる。
バイキュービック補間は、ラグランジュ多項式、3次スプライン補間、または3次畳み込みアルゴリズムを使用して実現できる。

画像処理では、処理速度が問題にならない場合の画像のリサンプリングで、バイリニア補間や最近傍補間よりもバイキュービック補間が選択されることが多い。
4ピクセル（2×2）のみを考慮するバイリニア補間とは対照的に、バイキュービック補間では16ピクセル（4×4）を考慮する。
バイキュービック補間で再サンプリングされた画像は、選択されたb値とc値に応じて、さまざまな補間アーティファクトが発生する可能性がある。

計算

 の25個の単位正方形をパッチでつなぎ合わせた正方形上のバイキュービック補間。
バイキュービック補間はMatplotlibの実装による。色は関数の値を示す。
黒い点は補間される所定のデータの位置。色のサンプルが放射状に対称ではないことに注意。
上記と同じデータセットに対するバイリニア補間。
曲面の導関数は正方形の境界上で連続していない。
上記と同じデータセットに対する最近傍補間。

四隅が 、、、 の単位正方形の関数を 、
微分を 、、 とする。
補間された曲面は以下で表される。

補間問題は16個の係数  を決定することから成り立つ。
 に関数をあてはめ、4つの方程式を得る。





同様に、および方向の微分から、8つの方程式を得る。









さらに、の混合偏微分から4つの方程式を得る。





上記表現で、次の恒等式が使用されている。

この手順により求められる単位正方形  上の曲面  は連続、かつ導関数連続になる。
任意のサイズの規則格子上のバイキュービック補間は、このようなバイキュービック曲面をパッチし、境界上で導関数が一致するようにすることで実現できる。

未知のパラメータ  をグループ化したベクトルを

とし、

とすると、上記連立方程式は、線形方程式  の行列に再定式化できる。

逆行列により、有用な線形方程式   が得られる。ここで、

である。これにより  を素早く簡単に計算できる。

16個の係数に対し、別の簡潔な行列形式が存在する。

または

ただし

である。

不規則格子への拡張
多くのアプリケーションでは、単位正方形ではなく上のデータを使用してバイキュービック補間を行う。
この場合 、、 の恒等式は

となる。
ここで  と  は 点  を含むセルの間隔である。
この場合、係数  を計算する最も実用的な方法は、

として、前述の  を用いて  を解くことである。次に正規化された補間変数を次のように計算する。

ここで  と  は点  を囲むグリッド点の  および  座標である。すると、補間された曲面は

となる。

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

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

1次導関数  または  のいずれかを求めるには、適切な軸上の囲っている2点間の傾きを計算する方法を用いる。
たとえば、ある1点の  を計算するには、目標点の左右の点について  を求めて傾きを計算する。 についても同様にする。

交差導関数  を求めるには、両方の軸で一度に1つずつ導関数を得る。
例えば、まず  の手順を用いて、目標点の上と下の点の  の導関数を算出する。
次に、それら値に  の手順を用いて（通常のように、それらの点の  の値ではなく）目標点の  の値を計算する 。
（あるいは逆の順序で、最初に  を計算し、次にそれらから  を計算することもできる。両者とも同じ結果になる。）

データセットの端部で周囲のポイントの一部が欠落している場合、欠落しているポイントはいくつかの方法で近似できる。
単純で一般的な方法は、既存のポイントからターゲットポイントまでの傾斜が、それ以降変化せずに続くと仮定し、これを使用して欠落しているポイントの仮想値を計算することである。

バイキュービック畳み込みアルゴリズム

サムネイル|畳み込みカーネル 
サムネイル|畳み込みカーネル（2次元に展開）

バイキュービックスプライン補間では、各グリッドセルに対して上記の線形システムの解が必要である。
同様の特性を持つ補間は、両次元に次のカーネルを使用した畳み込みを適用することで求めることができる。

ここで  は通常、−0.5または−0.75に設定される。
なお、、かつ、すべての0以外の整数  に対し  である。

このアプローチは ERTS（地球資源技術衛星、のちのランドサット1号）の画像データを対象に、TRW Systems GroupのRifmanにより提案された

。
当初  は-1固定であったが、同社Simonによりパラメータ化され、-0.5、-0.75、-1.0が意味のある値とされた
。
しかしこれら提案では導出過程や数式などが十分に提示されていなかったため、のちに Keys によって完全な形で再提案され、 の場合に、元の関数のサンプリング間隔について3次収束が得られることが示された
。

畳み込みカーネル  は以下により導出されるKeys (1981), pp.1153-1154。

とする。、、また1次微分については 、 なので、









以上の連立方程式を解くと、

となり、上記式を得る。

行列表記

サムネイル|行列表記用に0から1の間にシフトした畳み込みカーネル

行列表記を使用すると、方程式をよりわかりやすい方法で表現できる。
ひとつの次元で0から1の間の  について、

となる。
1次元の3次畳み込み補間では4つのサンプル点が必要である。
計算ごとに、その左側の2つのサンプルと、右側の2つのサンプルが参照される。
このテキストでは、これらのポイントに-1から2までインデックス付けされている。
ここでは、0でインデックス付けされたポイントから照会ポイントまでの距離は  で示される。

 の場合、Catmull-Romスプラインと一致する。
このため、 を  に設定したバイキュービック補間を "Catmull-Rom interpolation" と呼ぶ場合がある
呼称 "Catmull-Rom interpolation" が用いられた例：INTER_CUBIC should default to Catmull-Rom interpolation #17720。
また、 以外の場合は、テンションパラメータが拡張されたCatmull-Romスプラインと一致し、テンションパラメータ  である。

2つの次元について、最初に 、次に  に適用する場合、

である。

微分連続性
定義により1次微分連続であるが、行列表記を用いた以下の方法でも容易に判定できる。

したがい、1次微分連続である。

したがい、2次微分連続ではない。

他の方式との比較
以下は各方式のカーネル関数の比較である。

 方式  カーネル関数  カーネル関数（2次元展開） 最近傍補間  218px|代替文=最近傍補間カーネル関数|最近傍補間カーネル関数  210px|代替文=最近傍補間カーネル関数（2D）|最近傍補間カーネル関数（2D） バイリニア補間  218px|代替文=バイリニア補間カーネル関数|バイリニア補間カーネル関数  210px|代替文=バイリニア補間カーネル関数（2D）|バイリニア補間カーネル関数（2D） バイキュービック補間  218px|代替文=バイキュービック補間カーネル関数|バイキュービック補間カーネル関数  210px|代替文=バイキュービック補間カーネル関数（2D）|バイキュービック補間カーネル関数（2D）

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

バイキュービック アルゴリズムは、画像やビデオを表示用に拡大するためによく使用される (画像スケーリングを参照)。
一般的なバイリニアアルゴリズムよりも細かいディテールが保持される。

バイキュービック アルゴリズムは、画像縮小にも使用されるが、縮小時の再サンプリングは実光学系のズームアウトの作用と異なるため、他の方式のほうが適している場合がある。

パラメータaの影響
250px|thumb|
この図の下半分は上半分を拡大したもので、左側の線の鮮明さがどのように生み出されるかを示している。
バイキュービック補間によりオーバーシュートが発生し、が増す。

畳み込みカーネルの負のローブにより、オーバーシュート (電気工学)（ハロー）が発生する。
これによりクリッピングが発生する可能性があり、アーティファクト（リンギングアーティファクトも参照）になるが、尖鋭度（見かけの鮮明度）が増すため、望ましい場合もある。この効果は、パラメータが-0.5の場合より、-0.75や-1.0の場合のほうが大きい。
600px|代替文=補間カーネルの比較|補間カーネルの比較

 の場合、補間結果が、元の画像（サンプリング前の連続関数）の2次微分までのテイラー近似（剰余項除く）と一致する
Keys (1981), pp.1154-1155Wolberg (1994), p.130。
この作用を端的に示す例が、元の画像が1次関数（単純なグラデーションパターン）の場合であり、 の場合のみ、補間結果が1次関数になる。
例えば、入力が

であると、補間結果は

であり、 の場合のみ1次関数（2次と3次の項が0）になるSimon (1975), p.3A-3。

       200px|代替文=補間グラフ（a=-0.5）|補間グラフ（a=-0.5）  200px|代替文=補間グラフ（a=-0.75）|補間グラフ（a=-0.75）  200px|代替文=補間グラフ（a=-1.0）|補間グラフ（a=-1.0）

以下は単純なグラデーション画像の16倍拡大と、標準テスト画像"cameraman"MIT Works Acquired Digitally - cameramanの8倍拡大（一部）である。
前者の縦縞状の濃淡むらや、後者のこめかみ部分の人工的なまだら模様は、上記作用によるアーティファクトである。

         最近傍補間（比較対照用） 128px|代替文=拡大画像例（a=-0.5）|拡大画像例（a=-0.5）  128px|代替文=拡大画像例（a=-0.75）|拡大画像例（a=-0.75）  128px|代替文=拡大画像例（a=-1.0）|拡大画像例（a=-1.0）  128px|代替文=拡大画像例（最近傍補間）|拡大画像例（最近傍補間）  200px|代替文=拡大画像例（a=-0.5）|拡大画像例（a=-0.5）  200px|代替文=拡大画像例（a=-0.75）|拡大画像例（a=-0.75）  200px|代替文=拡大画像例（a=-1.0）|拡大画像例（a=-1.0）  200px|代替文=拡大画像例（最近傍補間）|拡大画像例（最近傍補間） 

なお、 の場合は、畳み込みカーネルの2次微分が  で連続になるが、補間結果が2次微分連続になるわけではない。
また、 の場合は、畳み込みカーネルの微分が  でsinc関数の微分と一致するが、sinc補間との比較以外の意義はない。

再サンプリング位置
整数倍の画像拡大では、拡大画像の重心が入力画像に対しずれないよう、入力画像のピクセルをはさむ位置に再サンプリング位置を設定する（下記図左）ことが一般的である。
一方で、入力画像のピクセルに再サンプリング位置を重ねるよう設定する方法もある（下記図右）。この方法では変換の可逆性が確保される。

600px|中央|代替文=再サンプリング位置の例|再サンプリング位置の例

外挿補間
補間のために左右（または上下）に入力画像が2ピクセルずつ必要であり、画像の外周部は本来は無効な領域であるため、外挿補間の対応が必要になる。外挿補間の方式は実装により異なる。
以下は、最外周のピクセルをコピーして外挿する場合の例である。

600px|中央|代替文=最外周の画素値をコピーして外挿する場合の例|最外周の画素値をコピーして外挿する場合の例

 脚注 

 関連項目 


 ベジェ曲面
 画像スケーリング
 最近傍補間
 バイリニア補間








 外部リンク 

 Interpolation theory
 Explanation and Java/C++ implementation of (bi)cubic interpolation
 Excel Worksheet Function for Bicubic Lagrange Interpolation

Category:画像処理
Category:補間
Category:数学に関する記事