Билинейная интерполяция
Билинейная интерполяция — это метод интерполяции функции двух переменных на регулярной сетке, при котором значение в заданной точке вычисляется как взвешенное среднее значений в четырёх ближайших узлах сетки. Алгоритм является расширением линейной интерполяции на двумерный случай и широко применяется в компьютерной графике, обработке изображений, геоинформационных системах и численных методах.
Математическое описание
Постановка задачи
Пусть задана прямоугольная сетка с узлами \((x_i, y_j)\), в которых известны значения функции \(f(x_i, y_j) = f_{ij}\). Требуется найти значение функции в произвольной точке \((x, y)\), лежащей внутри прямоугольника, образованного четырьмя соседними узлами: \((x_0, y_0)\), \((x_1, y_0)\), \((x_0, y_1)\), \((x_1, y_1)\), где \(x_0 < x < x_1\) и \(y_0 < y < y_1\).
Алгоритм вычисления
Билинейная интерполяция выполняется в два этапа:
- Линейная интерполяция по оси X для двух строк сетки при фиксированных \(y_0\) и \(y_1\):
\[ f(x, y_0) = \frac{x_1 - x}{x_1 - x_0} f_{00} + \frac{x - x_0}{x_1 - x_0} f_{10} \] \[ f(x, y_1) = \frac{x_1 - x}{x_1 - x_0} f_{01} + \frac{x - x_0}{x_1 - x_0} f_{11} \]
- Линейная интерполяция по оси Y между полученными значениями:
\[ f(x, y) = \frac{y_1 - y}{y_1 - y_0} f(x, y_0) + \frac{y - y_0}{y_1 - y_0} f(x, y_1) \]
После подстановки и упрощения получается единая формула: \[ f(x, y) = \frac{(x_1 - x)(y_1 - y)}{(x_1 - x_0)(y_1 - y_0)} f_{00} + \frac{(x - x_0)(y_1 - y)}{(x_1 - x_0)(y_1 - y_0)} f_{10} + \frac{(x_1 - x)(y - y_0)}{(x_1 - x_0)(y_1 - y_0)} f_{01} + \frac{(x - x_0)(y - y_0)}{(x_1 - x_0)(y_1 - y_0)} f_{11} \]
Свойства
- Непрерывность: функция \(f(x, y)\) непрерывна на всей области определения, включая границы прямоугольников.
- Гладкость: первая производная может иметь разрывы на границах ячеек сетки, что приводит к видимым артефактам при масштабировании изображений.
- Линейность по каждому аргументу: при фиксации одной переменной функция становится линейной по другой.
- Вычислительная сложность: требует 3 умножения и 6 сложений на точку (в оптимизированной реализации), что делает её быстрее бикубической интерполяции.
Применение
Обработка изображений
В компьютерной графике билинейная интерполяция используется при масштабировании растровых изображений (изменении разрешения). При увеличении изображения она даёт более гладкий результат, чем метод ближайшего соседа (который создаёт «пикселизацию»), но уступает по качеству бикубической интерполяции и более сложным методам (Lanczos, глубокое обучение). При уменьшении изображения билинейная интерполяция применяется реже из-за склонности к размытию деталей.
Геоинформационные системы (ГИС)
В ГИС билинейная интерполяция применяется для пересчёта значений цифровых моделей рельефа (ЦМР) и растровых карт при изменении проекции или разрешения. Она обеспечивает разумный баланс между точностью и производительностью для данных с плавными пространственными изменениями.
Численные методы
В вычислительной математике билинейная интерполяция используется для:
- Построения функций отклика в методе конечных элементов (для четырёхугольных элементов).
- Визуализации скалярных полей (например, температурных карт) по данным с регулярной сеткой.
- Интерполяции текстурных координат в 3D-графике (текстурирование).
Обработка сигналов
В цифровой обработке сигналов билинейная интерполяция применяется для передискретизации двумерных сигналов (изображений, спектрограмм) с изменением частоты дискретизации.
Сравнение с другими методами
| Метод | Качество | Вычислительная сложность | Артефакты |
|---|---|---|---|
| Ближайший сосед | Низкое | O(1) | Пикселизация, ступенчатость |
| Билинейная | Среднее | O(4) | Размытие, лёгкая блочность |
| Бикубическая | Высокое | O(16) | Меньше размытия, возможен ореол |
| Lanczos | Очень высокое | O(36) | Минимальные артефакты |
Ограничения и критика
- Не сохраняет экстремумы: интерполированное значение может выходить за диапазон исходных данных (например, при наличии резких перепадов яркости).
- Размытие деталей: при увеличении изображения билинейная интерполяция сглаживает резкие границы, что может быть нежелательно для текста или штриховых рисунков.
- Зависимость от сетки: метод предполагает равномерную прямоугольную сетку; для неравномерных данных требуется предварительная триангуляция или другие подходы.
- Анизотропия: при сильном неравенстве шагов сетки по осям интерполяция может давать искажения.
Реализация в программном обеспечении
Билинейная интерполяция реализована в большинстве библиотек обработки изображений:
- OpenCV: функция
cv::resizeс флагомINTER_LINEAR. - PIL/Pillow: метод
Image.resize()с параметромImage.BILINEAR. - MATLAB: функция
imresizeс опцией'bilinear'. - NumPy/SciPy: функция
scipy.ndimage.zoomс порядком 1.
Историческая справка
Концепция билинейной интерполяции восходит к работам по численному анализу XIX века. В компьютерную графику метод вошёл в 1970-х годах с развитием растровых дисплеев. Первое широкое применение — масштабирование космических снимков в NASA (программа Landsat). Алгоритм был стандартизирован в библиотеках графического интерфейса (X Window System, Windows GDI) в 1980-х годах.
Интересные факты
- Билинейная интерполяция является частным случаем бикубической интерполяции с нулевыми коэффициентами при старших степенях.
- В некоторых реализациях (например, в GPU) билинейная интерполяция выполняется аппаратно за один такт с помощью текстурных блоков.
- Метод используется в нейросетевых архитектурах для операций пространственного пулинга (bilinear pooling) и в генеративно-состязательных сетях (GAN) для изменения разрешения.
Источники
- Press, W. H., Teukolsky, S. A., Vetterling, W. T., & Flannery, B. P. (2007). Numerical Recipes: The Art of Scientific Computing (3rd ed.). Cambridge University Press.
- Gonzalez, R. C., & Woods, R. E. (2018). Digital Image Processing (4th ed.). Pearson.
- Wolberg, G. (1990). Digital Image Warping. IEEE Computer Society Press.
- Документация OpenCV: Geometric Image Transformations.
- Документация SciPy: Multidimensional image processing (scipy.ndimage).
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →