Splineリサイズの係数式とその導出法



概要

タイトルの通り、このページではSpline16やSpline36といったSplineリサイズの係数式と、その導出法について記述します。
私がAviUtlプラグインを作るにあたり、Lanczosn リサイズの係数が nsin(xpi)sin(xpi/n)/(xpi)^2 で求められるということはすぐに調べられたのですが、Splineリサイズに関しては情報が少なく係数式を見つけるまでに時間がかかったため、Splineリサイズについてまとまったページがあったら良かったのに、ということでこのようなページを作りました。



ちょっと説明

Spline(2n)2 リサイズは、補間したい地点の周囲n ピクセルを参照します。
縦方向と横方向のそれぞれで距離に応じて以下の係数式から係数を算出し、それらを掛け合わせたものを最終的な係数とします。この際、距離の基準は拡大前または縮小後、すなわちサイズの小さい方を基準とします。また係数の和は必ずしも1になるとは限らないので、最後に係数の和で割る必要があります。



係数式

Spline16、Spline36、Spline64、Spline100、Spline144、Spline196、Spline256の係数式を以下に示します。なお、範囲外の係数は0です。ちなみに、Spline4は線形補間と同一となります。
正直Spline256とかが役に立つ日は来ないと思いますが、資料ということで参考までに。

Spline16
spline16の係数式

Spline36
spline36の係数式

Spline64
spline64の係数式

Spline100
spline100の係数式

Spline144
spline144の係数式

Spline196
spline196の係数式

Spline256
spline256の係数式


テキスト形式の係数式はこちら



係数式の導出法

Spline(2n)2 の係数式の導出法を、Spline16 (n=2) の場合を実際に計算しながら説明していきます。
数式を羅列しますので、興味のある方はどうぞ。

fi(x)=aix^3+bix^2+cix+di として、区間 [-n+1, n] を定義域とする関数 f(x) を、次のように定めます。

f(x)の定義

Spline16の場合、f(x) は次のようになります。

Spline16の場合のf(x)

ここで、f(x) は次の条件をすべて満たすものとします。 次に、 yiyi=f(i-n+1)(ただし0≦i≦2n-1) によって定義し、a0,b0,c0,d0yi で表します。

Spline16の場合、次に示す12式を連立します。

12式を連立する

文字を消去した結果は以下のようになります。この計算は、何らかの数式処理ソフトを利用しないと恐らく無理でしょう。

a0,b0,c0,d0をyiで表す

さらに、 f0(x)yi で整理します。Spline16では、次のようになります。

f(x)をyiで整理

ここで、 yi の係数を gi(x)(ただし0≦i≦n-1) と定めると、 gi(x+i-n+1) が Spline(2n)2n-i-1≦x≦n-i における係数式となります。

従って、Spline16の係数式は以下の通りとなります。

spline16の係数式




トップに戻る

Close

Close