Білінійна інтерполяція
Білінійна інтерполяція — узагальнення лінійної інтерполяції для функції двох змінних. Ідея в тому, що проводиться лінійна інтерполяція по одній осі, а потім по іншій осі.
Якщо необхідно інтерполювати значення функції f в точці P = (x, y). І задано значення функції в навколишніх до P точках Q11 = (x1, y1), Q12 = (x1, y2), Q21 = (x2, y1), и Q22 = (x2, y2).
Спершу лінійно інтерполюємо в напрямку осі x:
Тепер проводимо линійну інтерполяцію в напрямку осі y (між точками
та
) щоб отримати кінцевий результат:
Коли відомі вершини є вершинами одиничного квадрата: (0, 0), (0, 1), (1, 0) та (1, 1), формула білінійної інтерполяції спрощується до
можна записати у вигляді наступної білінійної форми:
Інтерполяція є добутком двох лінійних функцій. І вона також може бути записана як:
де



.
Результат білінійної інтерполяції не залежить від порядку виконання кроків інтерполяції.
Очевидним узагальненням білінійної інтерполяції на функцію трьох змінних є — трилінійна інтерполяція.
Приклад програми [ред.]
Нижче наведено приклад програми білінійної інтерполяції зображення, написаний на С++
void resample( const unsigned* inBuf // вхідний масив пікселів , unsigned* outBuf // результат - вихідний масив пікселів , int oldWidth //ширина оригіналього зображення , int oldHeight //висота оригіналього зображення , int newWidth //ширина результуючого зображення , int newHeight //висота результуючого зображення ) { const float div_height = (float) ( (oldHeight - 1) ) / (newHeight - 1); const float div_width = (float) ( (oldWidth - 1) ) / (newWidth - 1); float i_tmp = 0.f; for ( int i = 0; i < newHeight; ++i, i_tmp += div_height ) { float j_tmp = 0.f; int l = (int)(i_tmp); if (l > oldHeight - 2) { l = oldHeight - 2; } const float u = i_tmp - l; l *= oldWidth; for ( int j = 0; j < newWidth; ++j, j_tmp += div_width ) { int c = (int) (j_tmp); if (c > oldWidth - 2) { c = oldWidth - 2; } const float t = j_tmp - c; //Коефіціенти const float d1 = (1 - t) * (1 - u); const float d2 = t * (1 - u); const float d3 = t * u; const float d4 = (1 - t) * u; const int ind = l + c; // для оптимізації (щоб не рахувати далі 4 рази) // значення кольору в 4 пікселях, за якими інтерполюємо const unsigned p1 = inBuf[ ind ]; const unsigned p2 = inBuf[ ind + 1 ]; const unsigned p3 = inBuf[ ind + oldWidth + 1 ]; const unsigned p4 = inBuf[ ind + oldWidth]; // Записуємо результуючий піксель *outBuf++ = p1 * d1 + p2 * d2 + p3 * d3 + p4 * d4; } } }










.