Как выполнить быстрое наклонение текстуры Catmull-Rom с помощью линейных интерполяций?
Я читал некоторые статьи, в которых вводится быстрая интерполяция третьего порядка с использованием GL_LINEAR.
- [1] http://http.developer.nvidia.com/GPUGems2/gpugems2_chapter20.html
- [2] http://0xef.wordpress.com/2013/01/12/third-order-texture-filtering-using-linear-interpolation/
Поскольку [1] содержит много ошибок, я рекомендую прочитать [2], Если вы хотите поймать формализм.
Оба они упоминают об ограничении этого метода. Для отфильтрованная текстура с GL_LINEAR, следующее отношение выполняется только если 0
A*f (i, j) + b*f (i+1, j) = F (i+b/(a+b), j)
Где f-исходные данные изображения, а F-линейно интерполированная текстура OpenGL.
Вот в чем проблема. [1] упоминает, что этот метод также может быть применен к бикубическому Катмуллу-Рому.
Метод также может быть адаптирован к интерполяционным фильтрам, таким как сплайны Catmull-Rom
Тем не менее, это очевидно, что с весовой функцией Catmull-Rom, содержащей отрицательные части, условие (0
Существует ли специальный способ применить метод в [1] и [2] к интерполяции Catmull-Rom?
Или мне нужно принести все 16 текселей для Catmull-Rom?
1 ответ:
Я думаю, что документ Сигга и Хадвигера является правильным.
Полином Катмулла-Рома
p(t)может быть записан какp(t) = 0.5 [ w0(t) * p0 + w1(t) * p1 + w2(t) * p2 + w3(t) * p3]Где
w0(t) = -t + 2*t^2 - t^3; w1(t) = 2 - 5*t^2 + 3*t^3; w2(t) = t + 4*t^2 - 3*t^3; w3(t) = -t^2 + t^3;И
p0,p1,p2,p3являются выборочными значениями функции.Для B-сплайна вы группируете вместе первые два члена, а именно
w0(t) * p0иw1(t) * p1, и вторые два члена, а именноw2(t) * p2иw3(t) * p3. Для сплайна Catmull-Rom вы группируете вместеw0(t) * p0иw3(t) * p3иw1(t) * p1иw2(t) * p2. Это легко проверить, даже с помощью График Matlab показывает, что для этого выбора выполняется условиеb/(a+b). Таким образом, идея может быть использована также в интерполяции Catmull-Rom. Однако для случая Catmull-Rom мне кажется, что нет никакого возможного расширения до последнего шага, поскольку ни(w0(t) + w3(t))/(w0(t) + w1(t) + w2(t) + w3(t)), ни(w1(t) + w2(t))/(w0(t) + w1(t) + w2(t) + w3(t))не удовлетворяют указанному вами условию.
Comments