3次スプライン補間の拡張
バイキュービック補間 といくつかの 1 次元および 2 次元補間と の比較。 黒 と 赤 / 黄 / 緑 / 青の ドットは、それぞれ補間されたポイントと隣接するサンプルに対応します。 地面からの高さは、それぞれの値に対応します。
数学 において 、 双三次補間は、 二次元 規則グリッド 上のデータ ポイントを 補間するための 三次スプライン補間 (データ セットに三次補間を適用する方法) の拡張です 。補間された表面 (つまり、イメージではなくカーネルの形状) は、 双線形補間 または 最近傍補間 によって取得された対応する表面よりも 滑らかになります。双三次補間は、 ラグランジュ多項式 、 三次スプライン 、または三次畳み込みアルゴリズムを使用して実行できます 。
画像処理 では、 速度が問題にならない場合、 画像の再サンプリング で双線形補間や最近傍補間よりも双三次補間が選択されることが多いです。4 ピクセル (2×2) のみを考慮する双線形補間とは対照的に、双三次補間では 16 ピクセル (4×4) を考慮します。双三次補間で再サンプリングされた画像は、選択された b 値と c 値に応じて、さまざまな補間 アーティファクトが 発生する可能性があります。
計算
25 個の単位正方形をパッチでつないだ 正方形の双三次補間。Matplotlib の 実装に従った双三次補間。色は関数の値を示します。黒い点は補間される所定のデータの場所です。色のサンプルが放射状に対称ではないことに注意してください。
[
0
、
4
]
×
[
0
、
4
]
{\displaystyle [0,4]\times [0,4]}
上記と同じデータセットでの双線形補間 。表面の導関数は正方形の境界上で連続していません。
上記と同じデータセットに対する 最近傍補間。
関数値 と導関数 、 およびが 単位正方形の
4つの角 、、、 および で既知であると仮定します。補間された表面は次のように表すことができます。
ふ
{\displaystyle f}
ふ
x
{\displaystyle f_{x}}
ふ
ええ
{\displaystyle f_{y}}
ふ
x
ええ
{\displaystyle f_{xy}}
(
0
、
0
)
{\displaystyle (0,0)}
(
1
、
0
)
{\displaystyle (1,0)}
(
0
、
1
)
{\displaystyle (0,1)}
(
1
、
1
)
{\displaystyle (1,1)}
p
(
x
、
ええ
)
=
∑
私
=
0
3
∑
じゅう
=
0
3
1つの
私
じゅう
x
私
ええ
じゅう
。
{\displaystyle p(x,y)=\sum \limits _{i=0}^{3}\sum _{j=0}^{3}a_{ij}x^{i}y^{j}.}
補間問題は、16 個の係数を決定することから成ります 。 関数値と一致させると、次の 4 つの方程式が得られます。
1つの
私
じゅう
{\displaystyle a_{ij}}
p
(
x
、
ええ
)
{\displaystyle p(x,y)}
ふ
(
0
、
0
)
=
p
(
0
、
0
)
=
1つの
00
、
{\displaystyle f(0,0)=p(0,0)=a_{00},}
ふ
(
1
、
0
)
=
p
(
1
、
0
)
=
1つの
00
+
1つの
10
+
1つの
20
+
1つの
30
、
{\displaystyle f(1,0)=p(1,0)=a_{00}+a_{10}+a_{20}+a_{30},}
ふ
(
0
、
1
)
=
p
(
0
、
1
)
=
1つの
00
+
1つの
01
+
1つの
02
+
1つの
03
、
{\displaystyle f(0,1)=p(0,1)=a_{00}+a_{01}+a_{02}+a_{03},}
ふ
(
1
、
1
)
=
p
(
1
、
1
)
=
∑
私
=
0
3
∑
じゅう
=
0
3
1つの
私
じゅう
。
{\displaystyle f(1,1)=p(1,1)=\textstyle \sum \limits _{i=0}^{3}\sum \limits _{j=0}^{3}a_{ij}.}
同様に、および方向 の導関数に対する 8 つの方程式 :
x
{\displaystyle x}
ええ
{\displaystyle y}
ふ
x
(
0
、
0
)
=
p
x
(
0
、
0
)
=
1つの
10
、
{\displaystyle f_{x}(0,0)=p_{x}(0,0)=a_{10},}
ふ
x
(
1
、
0
)
=
p
x
(
1
、
0
)
=
1つの
10
+
2
1つの
20
+
3
1つの
30
、
{\displaystyle f_{x}(1,0)=p_{x}(1,0)=a_{10}+2a_{20}+3a_{30},}
ふ
x
(
0
、
1
)
=
p
x
(
0
、
1
)
=
1つの
10
+
1つの
11
+
1つの
12
+
1つの
13
、
{\displaystyle f_{x}(0,1)=p_{x}(0,1)=a_{10}+a_{11}+a_{12}+a_{13},}
ふ
x
(
1
、
1
)
=
p
x
(
1
、
1
)
=
∑
私
=
1
3
∑
じゅう
=
0
3
1つの
私
じゅう
私
、
{\displaystyle f_{x}(1,1)=p_{x}(1,1)=\textstyle \sum \limits _{i=1}^{3}\sum \limits _{j=0}^{3}a_{ij}i,}
ふ
ええ
(
0
、
0
)
=
p
ええ
(
0
、
0
)
=
1つの
01
、
{\displaystyle f_{y}(0,0)=p_{y}(0,0)=a_{01},}
ふ
ええ
(
1
、
0
)
=
p
ええ
(
1
、
0
)
=
1つの
01
+
1つの
11
+
1つの
21
+
1つの
31
、
{\displaystyle f_{y}(1,0)=p_{y}(1,0)=a_{01}+a_{11}+a_{21}+a_{31},}
ふ
ええ
(
0
、
1
)
=
p
ええ
(
0
、
1
)
=
1つの
01
+
2
1つの
02
+
3
1つの
03
、
{\displaystyle f_{y}(0,1)=p_{y}(0,1)=a_{01}+2a_{02}+3a_{03},}
ふ
ええ
(
1
、
1
)
=
p
ええ
(
1
、
1
)
=
∑
私
=
0
3
∑
じゅう
=
1
3
1つの
私
じゅう
じゅう
。
{\displaystyle f_{y}(1,1)=p_{y}(1,1)=\textstyle \sum \limits _{i=0}^{3}\sum \limits _{j=1}^{3}a_{ij}j.}
混合偏微分 に関する4つの方程式 :
x
ええ
{\displaystyle xy}
ふ
x
ええ
(
0
、
0
)
=
p
x
ええ
(
0
、
0
)
=
1つの
11
、
{\displaystyle f_{xy}(0,0)=p_{xy}(0,0)=a_{11},}
f
x
y
(
1
,
0
)
=
p
x
y
(
1
,
0
)
=
a
11
+
2
a
21
+
3
a
31
,
{\displaystyle f_{xy}(1,0)=p_{xy}(1,0)=a_{11}+2a_{21}+3a_{31},}
f
x
y
(
0
,
1
)
=
p
x
y
(
0
,
1
)
=
a
11
+
2
a
12
+
3
a
13
,
{\displaystyle f_{xy}(0,1)=p_{xy}(0,1)=a_{11}+2a_{12}+3a_{13},}
f
x
y
(
1
,
1
)
=
p
x
y
(
1
,
1
)
=
∑
i
=
1
3
∑
j
=
1
3
a
i
j
i
j
.
{\displaystyle f_{xy}(1,1)=p_{xy}(1,1)=\textstyle \sum \limits _{i=1}^{3}\sum \limits _{j=1}^{3}a_{ij}ij.}
上記の表現では、次の ID が使用されています。
p
x
(
x
,
y
)
=
∑
i
=
1
3
∑
j
=
0
3
a
i
j
i
x
i
−
1
y
j
,
{\displaystyle p_{x}(x,y)=\textstyle \sum \limits _{i=1}^{3}\sum \limits _{j=0}^{3}a_{ij}ix^{i-1}y^{j},}
p
y
(
x
,
y
)
=
∑
i
=
0
3
∑
j
=
1
3
a
i
j
x
i
j
y
j
−
1
,
{\displaystyle p_{y}(x,y)=\textstyle \sum \limits _{i=0}^{3}\sum \limits _{j=1}^{3}a_{ij}x^{i}jy^{j-1},}
p
x
y
(
x
,
y
)
=
∑
i
=
1
3
∑
j
=
1
3
a
i
j
i
x
i
−
1
j
y
j
−
1
.
{\displaystyle p_{xy}(x,y)=\textstyle \sum \limits _{i=1}^{3}\sum \limits _{j=1}^{3}a_{ij}ix^{i-1}jy^{j-1}.}
この手順により、連続的で連続的な導関数を持つ 単位正方形 上の 表面が生成されます。任意のサイズの規則的 なグリッド 上の双三次補間は、そのような双三次表面をパッチでつなぎ合わせることで実現でき、境界上で導関数が一致することが保証されます。
p
(
x
,
y
)
{\displaystyle p(x,y)}
[
0
,
1
]
×
[
0
,
1
]
{\displaystyle [0,1]\times [0,1]}
未知のパラメータを ベクトルに
グループ化し
、
上記の連立方程式を線形方程式の行列に再定式化することができます 。
a
i
j
{\displaystyle a_{ij}}
α
=
[
a
00
a
10
a
20
a
30
a
01
a
11
a
21
a
31
a
02
a
12
a
22
a
32
a
03
a
13
a
23
a
33
]
T
{\displaystyle \alpha =\left[{\begin{smallmatrix}a_{00}&a_{10}&a_{20}&a_{30}&a_{01}&a_{11}&a_{21}&a_{31}&a_{02}&a_{12}&a_{22}&a_{32}&a_{03}&a_{13}&a_{23}&a_{33}\end{smallmatrix}}\right]^{T}}
x
=
[
f
(
0
,
0
)
f
(
1
,
0
)
f
(
0
,
1
)
f
(
1
,
1
)
f
x
(
0
,
0
)
f
x
(
1
,
0
)
f
x
(
0
,
1
)
f
x
(
1
,
1
)
f
y
(
0
,
0
)
f
y
(
1
,
0
)
f
y
(
0
,
1
)
f
y
(
1
,
1
)
f
x
y
(
0
,
0
)
f
x
y
(
1
,
0
)
f
x
y
(
0
,
1
)
f
x
y
(
1
,
1
)
]
T
,
{\displaystyle x=\left[{\begin{smallmatrix}f(0,0)&f(1,0)&f(0,1)&f(1,1)&f_{x}(0,0)&f_{x}(1,0)&f_{x}(0,1)&f_{x}(1,1)&f_{y}(0,0)&f_{y}(1,0)&f_{y}(0,1)&f_{y}(1,1)&f_{xy}(0,0)&f_{xy}(1,0)&f_{xy}(0,1)&f_{xy}(1,1)\end{smallmatrix}}\right]^{T},}
A
α
=
x
{\displaystyle A\alpha =x}
行列を反転すると、より有用な線形方程式 が得られ 、
これを すばやく簡単に計算できます。
A
−
1
x
=
α
{\displaystyle A^{-1}x=\alpha }
A
−
1
=
[
1
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
1
0
0
0
0
0
0
0
0
0
0
0
−
3
3
0
0
−
2
−
1
0
0
0
0
0
0
0
0
0
0
2
−
2
0
0
1
1
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
1
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
1
0
0
0
0
0
0
0
0
0
0
0
−
3
3
0
0
−
2
−
1
0
0
0
0
0
0
0
0
0
0
2
−
2
0
0
1
1
0
0
−
3
0
3
0
0
0
0
0
−
2
0
−
1
0
0
0
0
0
0
0
0
0
−
3
0
3
0
0
0
0
0
−
2
0
−
1
0
9
−
9
−
9
9
6
3
−
6
−
3
6
−
6
3
−
3
4
2
2
1
−
6
6
6
−
6
−
3
−
3
3
3
−
4
4
−
2
2
−
2
−
2
−
1
−
1
2
0
−
2
0
0
0
0
0
1
0
1
0
0
0
0
0
0
0
0
0
2
0
−
2
0
0
0
0
0
1
0
1
0
−
6
6
6
−
6
−
4
−
2
4
2
−
3
3
−
3
3
−
2
−
1
−
2
−
1
4
−
4
−
4
4
2
2
−
2
−
2
2
−
2
2
−
2
1
1
1
1
]
,
{\displaystyle A^{-1}=\left[{\begin{smallmatrix}{\begin{array}{rrrrrrrrrrrrrrrr}1&0&0&0&0&0&0&0&0&0&0&0&0&0&0&0\\0&0&0&0&1&0&0&0&0&0&0&0&0&0&0&0\\-3&3&0&0&-2&-1&0&0&0&0&0&0&0&0&0&0\\2&-2&0&0&1&1&0&0&0&0&0&0&0&0&0&0\\0&0&0&0&0&0&0&0&1&0&0&0&0&0&0&0\\0&0&0&0&0&0&0&0&0&0&0&0&1&0&0&0\\0&0&0&0&0&0&0&0&-3&3&0&0&-2&-1&0&0\\0&0&0&0&0&0&0&0&2&-2&0&0&1&1&0&0\\-3&0&3&0&0&0&0&0&-2&0&-1&0&0&0&0&0\\0&0&0&0&-3&0&3&0&0&0&0&0&-2&0&-1&0\\9&-9&-9&9&6&3&-6&-3&6&-6&3&-3&4&2&2&1\\-6&6&6&-6&-3&-3&3&3&-4&4&-2&2&-2&-2&-1&-1\\2&0&-2&0&0&0&0&0&1&0&1&0&0&0&0&0\\0&0&0&0&2&0&-2&0&0&0&0&0&1&0&1&0\\-6&6&6&-6&-4&-2&4&2&-3&3&-3&3&-2&-1&-2&-1\\4&-4&-4&4&2&2&-2&-2&2&-2&2&-2&1&1&1&1\end{array}}\end{smallmatrix}}\right],}
α
{\displaystyle \alpha }
16個の係数に対しては別の簡潔な行列形式がある。
または
、
[
f
(
0
,
0
)
f
(
0
,
1
)
f
y
(
0
,
0
)
f
y
(
0
,
1
)
f
(
1
,
0
)
f
(
1
,
1
)
f
y
(
1
,
0
)
f
y
(
1
,
1
)
f
x
(
0
,
0
)
f
x
(
0
,
1
)
f
x
y
(
0
,
0
)
f
x
y
(
0
,
1
)
f
x
(
1
,
0
)
f
x
(
1
,
1
)
f
x
y
(
1
,
0
)
f
x
y
(
1
,
1
)
]
=
[
1
0
0
0
1
1
1
1
0
1
0
0
0
1
2
3
]
[
a
00
a
01
a
02
a
03
a
10
a
11
a
12
a
13
a
20
a
21
a
22
a
23
a
30
a
31
a
32
a
33
]
[
1
1
0
0
0
1
1
1
0
1
0
2
0
1
0
3
]
,
{\displaystyle {\begin{bmatrix}f(0,0)&f(0,1)&f_{y}(0,0)&f_{y}(0,1)\\f(1,0)&f(1,1)&f_{y}(1,0)&f_{y}(1,1)\\f_{x}(0,0)&f_{x}(0,1)&f_{xy}(0,0)&f_{xy}(0,1)\\f_{x}(1,0)&f_{x}(1,1)&f_{xy}(1,0)&f_{xy}(1,1)\end{bmatrix}}={\begin{bmatrix}1&0&0&0\\1&1&1&1\\0&1&0&0\\0&1&2&3\end{bmatrix}}{\begin{bmatrix}a_{00}&a_{01}&a_{02}&a_{03}\\a_{10}&a_{11}&a_{12}&a_{13}\\a_{20}&a_{21}&a_{22}&a_{23}\\a_{30}&a_{31}&a_{32}&a_{33}\end{bmatrix}}{\begin{bmatrix}1&1&0&0\\0&1&1&1\\0&1&0&2\\0&1&0&3\end{bmatrix}},}
[
a
00
a
01
a
02
a
03
a
10
a
11
a
12
a
13
a
20
a
21
a
22
a
23
a
30
a
31
a
32
a
33
]
=
[
1
0
0
0
0
0
1
0
−
3
3
−
2
−
1
2
−
2
1
1
]
[
f
(
0
,
0
)
f
(
0
,
1
)
f
y
(
0
,
0
)
f
y
(
0
,
1
)
f
(
1
,
0
)
f
(
1
,
1
)
f
y
(
1
,
0
)
f
y
(
1
,
1
)
f
x
(
0
,
0
)
f
x
(
0
,
1
)
f
x
y
(
0
,
0
)
f
x
y
(
0
,
1
)
f
x
(
1
,
0
)
f
x
(
1
,
1
)
f
x
y
(
1
,
0
)
f
x
y
(
1
,
1
)
]
[
1
0
−
3
2
0
0
3
−
2
0
1
−
2
1
0
0
−
1
1
]
,
{\displaystyle {\begin{bmatrix}a_{00}&a_{01}&a_{02}&a_{03}\\a_{10}&a_{11}&a_{12}&a_{13}\\a_{20}&a_{21}&a_{22}&a_{23}\\a_{30}&a_{31}&a_{32}&a_{33}\end{bmatrix}}={\begin{bmatrix}1&0&0&0\\0&0&1&0\\-3&3&-2&-1\\2&-2&1&1\end{bmatrix}}{\begin{bmatrix}f(0,0)&f(0,1)&f_{y}(0,0)&f_{y}(0,1)\\f(1,0)&f(1,1)&f_{y}(1,0)&f_{y}(1,1)\\f_{x}(0,0)&f_{x}(0,1)&f_{xy}(0,0)&f_{xy}(0,1)\\f_{x}(1,0)&f_{x}(1,1)&f_{xy}(1,0)&f_{xy}(1,1)\end{bmatrix}}{\begin{bmatrix}1&0&-3&2\\0&0&3&-2\\0&1&-2&1\\0&0&-1&1\end{bmatrix}},}
p
(
x
,
y
)
=
[
1
x
x
2
x
3
]
[
a
00
a
01
a
02
a
03
a
10
a
11
a
12
a
13
a
20
a
21
a
22
a
23
a
30
a
31
a
32
a
33
]
[
1
y
y
2
y
3
]
.
{\displaystyle p(x,y)={\begin{bmatrix}1&x&x^{2}&x^{3}\end{bmatrix}}{\begin{bmatrix}a_{00}&a_{01}&a_{02}&a_{03}\\a_{10}&a_{11}&a_{12}&a_{13}\\a_{20}&a_{21}&a_{22}&a_{23}\\a_{30}&a_{31}&a_{32}&a_{33}\end{bmatrix}}{\begin{bmatrix}1\\y\\y^{2}\\y^{3}\end{bmatrix}}.}
直線グリッドへの拡張
多くの場合、アプリケーションでは、単位正方形ではなく直線グリッド上のデータを使用して双三次補間が求められます。この場合、 との恒等式は となり
、 は 点を含むセルの間隔 であり 、 についても同様です 。この場合、係数を計算する最も実用的な方法は、 を として、 を前と同じよう に
解くこと です
。次に、正規化された補間変数が として計算されます。
ここで 、 と は、 点 を囲むグリッド ポイントの と座標 です 。補間面は次のようになります。
p
x
,
p
y
,
{\displaystyle p_{x},p_{y},}
p
x
y
{\displaystyle p_{xy}}
p
x
(
x
,
y
)
=
∑
i
=
1
3
∑
j
=
0
3
a
i
j
i
x
i
−
1
y
j
Δ
x
,
{\displaystyle p_{x}(x,y)=\textstyle \sum \limits _{i=1}^{3}\sum \limits _{j=0}^{3}{\frac {a_{ij}ix^{i-1}y^{j}}{\Delta x}},}
p
y
(
x
,
y
)
=
∑
i
=
0
3
∑
j
=
1
3
a
i
j
x
i
j
y
j
−
1
Δ
y
,
{\displaystyle p_{y}(x,y)=\textstyle \sum \limits _{i=0}^{3}\sum \limits _{j=1}^{3}{\frac {a_{ij}x^{i}jy^{j-1}}{\Delta y}},}
p
x
y
(
x
,
y
)
=
∑
i
=
1
3
∑
j
=
1
3
a
i
j
i
x
i
−
1
j
y
j
−
1
Δ
x
Δ
y
,
{\displaystyle p_{xy}(x,y)=\textstyle \sum \limits _{i=1}^{3}\sum \limits _{j=1}^{3}{\frac {a_{ij}ix^{i-1}jy^{j-1}}{\Delta x\Delta y}},}
Δ
x
{\displaystyle \Delta x}
x
{\displaystyle x}
(
x
,
y
)
{\displaystyle (x,y)}
Δ
y
{\displaystyle \Delta y}
α
{\displaystyle \alpha }
x
=
[
f
(
0
,
0
)
f
(
1
,
0
)
f
(
0
,
1
)
f
(
1
,
1
)
Δ
x
f
x
(
0
,
0
)
Δ
x
f
x
(
1
,
0
)
Δ
x
f
x
(
0
,
1
)
Δ
x
f
x
(
1
,
1
)
Δ
y
f
y
(
0
,
0
)
Δ
y
f
y
(
1
,
0
)
Δ
y
f
y
(
0
,
1
)
Δ
y
f
y
(
1
,
1
)
Δ
x
Δ
y
f
x
y
(
0
,
0
)
Δ
x
Δ
y
f
x
y
(
1
,
0
)
Δ
x
Δ
y
f
x
y
(
0
,
1
)
Δ
x
Δ
y
f
x
y
(
1
,
1
)
]
T
,
{\displaystyle x=\left[{\begin{smallmatrix}f(0,0)&f(1,0)&f(0,1)&f(1,1)&\Delta xf_{x}(0,0)&\Delta xf_{x}(1,0)&\Delta xf_{x}(0,1)&\Delta xf_{x}(1,1)&\Delta yf_{y}(0,0)&\Delta yf_{y}(1,0)&\Delta yf_{y}(0,1)&\Delta yf_{y}(1,1)&\Delta x\Delta yf_{xy}(0,0)&\Delta x\Delta yf_{xy}(1,0)&\Delta x\Delta yf_{xy}(0,1)&\Delta x\Delta yf_{xy}(1,1)\end{smallmatrix}}\right]^{T},}
α
=
A
−
1
x
{\displaystyle \alpha =A^{-1}x}
A
{\displaystyle A}
x
¯
=
x
−
x
0
x
1
−
x
0
,
y
¯
=
y
−
y
0
y
1
−
y
0
{\displaystyle {\begin{aligned}{\overline {x}}&={\frac {x-x_{0}}{x_{1}-x_{0}}},\\{\overline {y}}&={\frac {y-y_{0}}{y_{1}-y_{0}}}\end{aligned}}}
x
0
,
x
1
,
y
0
,
{\displaystyle x_{0},x_{1},y_{0},}
y
1
{\displaystyle y_{1}}
x
{\displaystyle x}
y
{\displaystyle y}
(
x
,
y
)
{\displaystyle (x,y)}
p
(
x
,
y
)
=
∑
i
=
0
3
∑
j
=
0
3
a
i
j
x
¯
i
y
¯
j
.
{\displaystyle p(x,y)=\sum \limits _{i=0}^{3}\sum _{j=0}^{3}a_{ij}{\overline {x}}^{i}{\overline {y}}^{j}.}
関数値から導関数を求める
導関数が不明な場合は、通常、有限差分 などを使用して、単位正方形の角に隣接する点の関数値から近似されます 。
この方法を使用して、単一の導関数、 またはのいずれかを見つけるには、適切な軸の 2 つの 周囲の 点間の傾きを見つけます 。たとえば、 点の 1 つを計算するには、 対象点の左側と右側の点について を見つけて、それらの傾きを計算します。 についても同様にします 。
f
x
{\displaystyle f_{x}}
f
y
{\displaystyle f_{y}}
f
x
{\displaystyle f_{x}}
f
(
x
,
y
)
{\displaystyle f(x,y)}
f
y
{\displaystyle f_{y}}
相互導関数 を求めるには 、両方の軸で 1 つずつ導関数を取ります。たとえば、最初に 手順を使用して、 ターゲット ポイントの上と下の点の導関数 を求め、次に それらの値 (通常のようにそれらの点の の値ではなく ) に対して 手順を使用して、ターゲット ポイントの の値を取得します。 (または、逆方向に実行して、最初に と を計算し 、次にそれらから と を 計算することもできます 。どちらも同じ結果になります。)
f
x
y
{\displaystyle f_{xy}}
f
x
{\displaystyle f_{x}}
x
{\displaystyle x}
f
y
{\displaystyle f_{y}}
f
{\displaystyle f}
f
x
y
(
x
,
y
)
{\displaystyle f_{xy}(x,y)}
f
y
{\displaystyle f_{y}}
f
x
{\displaystyle f_{x}}
データセットの端で周囲のポイントの一部が欠落している場合、欠落しているポイントはいくつかの方法で近似できます。単純で一般的な方法は、既存のポイントからターゲット ポイントまでの傾斜がそれ以上変化せずに続くと仮定し、これを使用して欠落しているポイントの仮想値を計算することです。
双三次畳み込みアルゴリズム
双三次スプライン補間では、各グリッド セルについて、上記の線形システムの解が必要です。 同様の特性を持つ補間は、 両方の次元で次のカーネルを
使用した 畳み込み を適用することで取得できます。
ここで、は通常、-0.5 または -0.75 に設定されます。 すべての非ゼロの整数 に対して およびであることに 注意してください 。
W
(
x
)
=
{
(
a
+
2
)
|
x
|
3
−
(
a
+
3
)
|
x
|
2
+
1
for
|
x
|
≤
1
,
a
|
x
|
3
−
5
a
|
x
|
2
+
8
a
|
x
|
−
4
a
for
1
<
|
x
|
<
2
,
0
otherwise
,
{\displaystyle W(x)={\begin{cases}(a+2)|x|^{3}-(a+3)|x|^{2}+1&{\text{for }}|x|\leq 1,\\a|x|^{3}-5a|x|^{2}+8a|x|-4a&{\text{for }}1<|x|<2,\\0&{\text{otherwise}},\end{cases}}}
a
{\displaystyle a}
W
(
0
)
=
1
{\displaystyle W(0)=1}
W
(
n
)
=
0
{\displaystyle W(n)=0}
n
{\displaystyle n}
このアプローチはキーズによって提案され、 元の関数のサンプリング間隔に関して3次収束を生成することを示しました。 [1]
a
=
−
0.5
{\displaystyle a=-0.5}
一般的なケース に対して行列表記法を使用すると 、方程式をよりわかりやすい方法で表現できます。1
次元の場合、 は 0 から 1 の
間です 。1 次元の 3 次畳み込み補間には 4 つのサンプル ポイントが必要であることに注意してください。各照会に対して、2 つのサンプルがその左側に、2 つのサンプルがその右側に配置されます。これらのポイントは、このテキストでは -1 から 2 までインデックス付けされています。0 でインデックス付けされたポイントから照会ポイントまでの距離は、 ここで で示されます。
a
=
−
0.5
{\displaystyle a=-0.5}
p
(
t
)
=
1
2
[
1
t
t
2
t
3
]
[
0
2
0
0
−
1
0
1
0
2
−
5
4
−
1
−
1
3
−
3
1
]
[
f
−
1
f
0
f
1
f
2
]
{\displaystyle p(t)={\tfrac {1}{2}}{\begin{bmatrix}1&t&t^{2}&t^{3}\end{bmatrix}}{\begin{bmatrix}0&2&0&0\\-1&0&1&0\\2&-5&4&-1\\-1&3&-3&1\end{bmatrix}}{\begin{bmatrix}f_{-1}\\f_{0}\\f_{1}\\f_{2}\end{bmatrix}}}
t
{\displaystyle t}
t
{\displaystyle t}
2次元の場合、まず に1回適用し 、次に に再度適用します 。
x
{\displaystyle x}
y
{\displaystyle y}
b
−
1
=
p
(
t
x
,
f
(
−
1
,
−
1
)
,
f
(
0
,
−
1
)
,
f
(
1
,
−
1
)
,
f
(
2
,
−
1
)
)
,
b
0
=
p
(
t
x
,
f
(
−
1
,
0
)
,
f
(
0
,
0
)
,
f
(
1
,
0
)
,
f
(
2
,
0
)
)
,
b
1
=
p
(
t
x
,
f
(
−
1
,
1
)
,
f
(
0
,
1
)
,
f
(
1
,
1
)
,
f
(
2
,
1
)
)
,
b
2
=
p
(
t
x
,
f
(
−
1
,
2
)
,
f
(
0
,
2
)
,
f
(
1
,
2
)
,
f
(
2
,
2
)
)
,
{\displaystyle {\begin{aligned}b_{-1}&=p(t_{x},f_{(-1,-1)},f_{(0,-1)},f_{(1,-1)},f_{(2,-1)}),\\[1ex]b_{0}&=p(t_{x},f_{(-1,0)},f_{(0,0)},f_{(1,0)},f_{(2,0)}),\\[1ex]b_{1}&=p(t_{x},f_{(-1,1)},f_{(0,1)},f_{(1,1)},f_{(2,1)}),\\[1ex]b_{2}&=p(t_{x},f_{(-1,2)},f_{(0,2)},f_{(1,2)},f_{(2,2)}),\end{aligned}}}
p
(
x
,
y
)
=
p
(
t
y
,
b
−
1
,
b
0
,
b
1
,
b
2
)
.
{\displaystyle p(x,y)=p(t_{y},b_{-1},b_{0},b_{1},b_{2}).}
コンピュータグラフィックスでの使用
この図の下半分は上半分を拡大したもので、左側の線の鮮明さがどのように生み出されるかを示しています。バイキュービック補間によりオーバーシュートが発生し、 アキュータンスが 増加します。
バイキュービック アルゴリズムは、画像やビデオを表示用に拡大縮小するためによく使用されます ( ビットマップの再サンプリングを参照)。一般的な バイリニア アルゴリズムよりも細かいディテールが保持されます 。
ただし、カーネルの負のローブにより、 オーバーシュート (ハロー) が発生します。これにより、 クリッピングが 発生する可能性があり、アーティファクト ( リンギング アーティファクト も参照) になりますが、 アキュータンス (見かけの鮮明度) が増加するため、望ましい場合があります。
参照
数学ポータル
参考文献
^ 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.
外部リンク
標高サンプルへの補間の適用
補間理論
(双)三次補間の説明と Java/C++ 実装
双三次ラグランジュ補間の Excel ワークシート関数