2011-01-14 3 views
2

Я реализовал простой resampler изображения в OpenCL, который использует функцию Lanczos.Зачем нужен специальный чехол для lanczos (0)?

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, это не сработает.

Может ли кто-то пролить свет на меня? Флориан

+0

Работает ли законченный opaml resampler? Хотите поделиться им? :-) –

ответ

4

Павел уже ответил, но в случае, если ОП хочет знать, почему 0 особый случай =>

1) x-> 0, sin (х)/x = 0/0, и это indeterminate form.

2) Одним из способов решения этой проблемы является расширение грех (х)/х в ряд Тейлора около нуля, при этом мы получаем:

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

3) Подставляя 0 в х, мы видим, что ряд сходится к 1.

+0

Ницца ... заслуживает правильной отметки ответа;) – fho

3

О людях ... я смотрел на функции Ланцоша в течение нескольких часов ... и не заметил, что синк на самом деле:

sinc -> sin(x)/x 

поэтому особый случай 0, чтобы предотвратить деление на ноль ... просто и ясно ...

+1

Да, это на самом деле 0/0, и в этом случае можно показать, что значение равно 1 математически, но для целей реализации вам нужен специальный случай, чтобы избежать деления на ноль. –

Смежные вопросы