3

GL_LINEAR を使用した高速な 3 次補間を紹介する記事をいくつか読みました。

[1] は正誤表が多いので、形式を理解したい場合は [2] を読むことをお勧めします。

どちらもこの方法の制限について言及しています。GL_LINEAR でフィルタリングされたテクスチャの場合、次のリレーションは0 <= b/(a+b) <= 1 の場合にのみ保持されます

a*f(i, j) + b*f(i+1, j) = F(i+b/(a+b), j)

ここで、f は元の画像データ、F は OpenGL によって線形補間されたテクスチャです。

これが問題です。[1] は、この方法が Catmull-Rom バイキュービックにも適用できると述べています。

この方法は、Catmull-Rom スプラインなどの補間フィルターにも適用できます。

ただし、負の部分を含む Catmull-Rom 重み関数では、条件 (0 <= b/(a+b) <= 1) が満たされないことは明らかです。実際、同じロジックで Catmull-Rom を実装しようとしましたが、ぼやけた画像しか生成しません。

[1] と [2] の方法を Catmull-Rom 補間に適用する特別な方法はありますか? または、Catmull-Rom 用に 16 テクセルすべてを取得する必要がありますか?

4

1 に答える 1

1

Sigg と Hadwiger の論文は正しいと思います。

Catmull-Rom 多項式は次のp(t)ように記述できます。

p(t) = 0.5 [ w0(t) * p0 + w1(t) * p1 + w2(t) * p2 + w3(t) * p3]

どこ

w0(t) = -t + 2*t^2 - t^3;
w1(t) = 2 - 5*t^2 + 3*t^3;
w2(t) = t + 4*t^2 - 3*t^3;
w3(t) = -t^2 + t^3;

およびp0p1、はp2p3サンプリングされた関数値です。

B スプラインの場合、最初の 2 つの項 (w0(t) * p0w1(t) * p1) と 2 番目の 2 項 (w2(t) * p2と) をグループ化しますw3(t) * p3。Catmull-Rom スプラインでは、w0(t) * p0w3(t) * p3w1(t) * p1をグループ化しますw2(t) * p2b/(a+b)この選択の条件が満たされていることは、Matlab プロットでも簡単に確認できます。したがって、このアイデアは Catmull-Rom 補間にも使用できます。ただし、Catmull-Rom の場合、指定した条件を満たしてい(w0(t) + w3(t))/(w0(t) + w1(t) + w2(t) + w3(t))ないため、最後のステップへの延長はあり得ないように思えます。(w1(t) + w2(t))/(w0(t) + w1(t) + w2(t) + w3(t))

于 2013-11-09T22:40:43.190 に答える