2

Lanczos 関数を使用する OpenCL で単純な画像リサンプラーを実装しました。

ランチョスは次のように定義されています。 ランチョスのリサンプリング

Cで書かれています:

inline
float lanczos(float x, float a) {
  if( x > fabs(a) ) return 0.0f;
  if( x == 0.0f ) return 1.0f;
  float pix = pi * x;
  return sinc(pix)*sinc(pix/a);
}

0 の特殊なケースがあるのはなぜですか? Formular に 0 を渡すと 1 が返されます。ただし、x == 0 のチェックを含めないと機能しません。

誰かが私に光を当てることができますか?フロリアン

4

2 に答える 2

4

Paulはすでに回答していますが、OPが0が特殊なケースである理由を知りたい場合=>

1)x-> 0、sin(x)/ x = 0/0であり、これは不定形です。

2)この問題を解決する1つの方法は、sin(x)/ xをゼロ点についてのテイラー級数に展開することです。これを行うと、次のようになります。

       x 2         x 4         x 6          x 8
1 ------- + ----- ---------- + -----------+..。
       6120 5040 362880

3)xに0を代入すると、級数が1に収束することがわかります。

于 2011-01-14T17:43:39.633 に答える
3

なんてこった...私は何時間もランチョス関数を見てきました...そしてsincが実際にあることに気づいていませんでした:

sinc -> sin(x)/x

したがって、0 の特殊なケースは、ゼロによる除算を防ぐことです ... 単純明快です ...

于 2011-01-14T16:04:30.203 に答える