为什么我需要lanczos(0)的特殊情况?

时间:2011-01-14 15:59:21

标签: image-processing opencl resampling

我在OpenCL中实现了一个使用Lanczos函数的简单图像重采样器。

Lanczos的定义是: Lanczos Resampling

用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有特殊情况?当我将0传递给公式时,它返回1.但如果我不包括x == 0的检查,则它不起作用。

有人能为我揭开光明吗? 弗洛里安

2 个答案:

答案 0 :(得分:4)

保罗已经回答了,但是如果OP想知道为什么0是特殊情况=>

1)x-> 0,sin(x)/ x = 0/0,这是indeterminate form

2)解决这个问题的一种方法是将sin(x)/ x扩展为关于零点的泰勒级数,通过这样做我们得到:

       x2        x4        x6         x8
1 -  -----  +  -----  - ------ + -----------  + ...
       6        120      5040      362880

3)通过将0代入x,我们看到该系列收敛到1。

答案 1 :(得分:3)

哦,伙计......我一直在看lanczos功能几个小时......并没有注意到sinc实际上是:

sinc -> sin(x)/x

因此0的特殊情况是防止除零...简单明了......