2011-01-14 47 views
2

我已經在使用Lanczos函數的OpenCL中實現了一個簡單的圖像重採樣器。 Lanczos Resampling爲什麼我需要lanczos(0)的特例?

寫在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的檢查,它不起作用。

有人可以幫我解決一些問題嗎? 弗洛裏安

+0

完成的opencl重新採樣器是否工作?小心分享它? :-) – 2012-02-08 15:48:57

回答

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.

+0

不錯的一個......值得正確的答案標記;) – fho 2011-01-16 14:55:11

3

噢,夥計......我一直在尋找了幾個小時蘭克澤斯功能......,並沒有注意到,正弦居然是:

sinc -> sin(x)/x 

因此對於0的特殊情況是爲了防止零...簡單明瞭的劃分......

+1

是的,它實際上是0/0,在這種情況下,它可以表示數值爲1,但出於實施目的,您需要特殊情況以避免被零除。 – 2011-01-14 16:30:14