2011-01-14 12 views
2

Ich habe einen einfachen Bild-Resampler in OpenCL implementiert, der die Lanczos-Funktion verwendet.Warum brauche ich einen speziellen Fall für Lanczos (0)?

Lanczos ist definiert durch: Lanczos Resampling

in C geschrieben:

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); 
} 

Warum für 0 ein Sonderfall ist da? Wenn ich 0 an das Formular übergebe, gibt es 1 zurück. Aber wenn ich den Check für x == 0 nicht einschließe, funktioniert es nicht.

Könnte jemand etwas Licht für mich abwerfen? Florian

+0

Funktioniert der fertige opencl resampler? Möchten Sie es teilen? :-) –

Antwort

4

Paul bereits beantwortet, aber im Fall will OP wissen, warum 0 Sonderfall ist =>

1) x-> 0, sin (x)/x = 0/0 und das ist indeterminate form.

2) Eine Möglichkeit, dieses Problem zu lösen, ist die Sünde zu erweitern (x)/x in Taylor-Reihe über Nullpunkt, indem Sie dies tun, erhalten wir:

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

3) durch 0 in x Ersetzen wir sehen, diese Reihe konvergiert zu 1.

+0

Nice one ... verdient das richtige Antwortzeichen;) – fho

3

Oh Mann ... Ich habe seit Stunden an der lanczos Funktion suche ... und habe nicht bemerkt, dass sinc tatsächlich ist:

sinc -> sin(x)/x 

so der Sonderfall für 0 zu verhindern eine Division durch Null ... schlicht und einfach ...

+1

Ja, es ist tatsächlich 0/0, und in diesem Fall kann gezeigt werden, dass der Wert 1 mathematisch ist, aber zu Implementierungszwecken müssen Sie es Sonderfall, um die Division durch Null zu vermeiden. –

Verwandte Themen