Русская Википедия:Билинейная фильтрация

Материал из Онлайн справочника
Версия от 01:35, 5 августа 2023; EducationBot (обсуждение | вклад) (Новая страница: «{{Русская Википедия/Панель перехода}} мини|В центре пример билинейной фильтрации {{нет ссылок|дата=15 ноября 2019}} '''Билине́йная фильтра́ция''' — процесс извлечения нескольких пикселей исходной Текстура (трёхмерная график...»)
(разн.) ← Предыдущая версия | Текущая версия (разн.) | Следующая версия → (разн.)
Перейти к навигацииПерейти к поиску

Файл:Image-resample-sample.png
В центре пример билинейной фильтрации

Шаблон:Нет ссылок Билине́йная фильтра́ция — процесс извлечения нескольких пикселей исходной текстуры с последующим усреднением их значений для получения окончательного значения пикселя. Понятие «билинейная фильтрация», точно так же, как и сходное понятие «трилинейная фильтрация», применимо только к двумерным текстурам. Для трёхмерных текстур данное понятие неприменимоШаблон:Нет АИ, а понятие трилинейной фильтрации имеет другое значение.

Пример исходного кода функции билинейной фильтрации

В коде[1] принимается, что текстура квадратна (наиболее общий случай), а также, что имеется только один канал данных.

 double getBilinearFilteredPixelColor(Texture tex, double u, double v) {
   u *= tex.size;
   v *= tex.size;
   int x = floor(u);
   int y = floor(v);
   double u_ratio = u - x;
   double v_ratio = v - y;
   double u_opposite = 1 - u_ratio;
   double v_opposite = 1 - v_ratio;
   double result = (tex[x][y]   * u_opposite  + tex[x+1][y]   * u_ratio) * v_opposite + 
                   (tex[x][y+1] * u_opposite  + tex[x+1][y+1] * u_ratio) * v_ratio;
   return result;
 }

Тот же пример на языке шейдеров HLSL

float4 Bilinear(sampler2D tex, float2 texCoord, int texSize) 
{
   float2 trTexCoord = texCoord*texSize;
   float2 texf = floor(trTexCoord);
   float2 ratio = trTexCoord - texf;
   float2 opposite = 1.0 - ratio;
   float4 result = (tex2D(tex, texf/texSize) * opposite.x  + tex2D(tex, (texf+float2(1, 0))/texSize)   * ratio.x) * opposite.y + 
                   (tex2D(tex, (texf+float2(0, 1))/texSize) * opposite.x + tex2D(tex, (texf+float2(1, 1))/texSize) * ratio.x) * ratio.y;
   return result;
 }

См. также

Примечания

Шаблон:Примечания

Шаблон:Cg-stub

  1. Язык — C