Бикубическая интерполяция

Материал из Википедии — свободной энциклопедии
Перейти к: навигация, поиск
Результат бикубической интерполяции функции заданной на сетке . Данную сетку можно рассматривать как состоящую из 9 единичных квадратов. Черными точками обозначены известные значения функции до интерполяции. Цветом обозначены интерполированные значения в каждой точке полученного изображения.

Бикубическая интерполяция — в вычислительной математике расширение кубической интерполяции на случай функции двух переменных, значения которой заданы на двумерной регулярной сетке. Поверхность, полученная в результате бикубической интерполяции является гладкой функцией, в отличие от поверхностей, полученных в результате билинейной интерполяции или интерполяции методом ближайшего соседа. Также бикубическая интерполяция часто используется в обработке изображений, давая более качественное изображение по сравнению с билинейной интерполяцией. В случае бикубической интерполяции значение функции в искомой точке вычисляется через её значения в 16 соседних точках. При использовании приведённых ниже формул для программной реализации бикубической интерполяции следует помнить, что значения и являются относительными, а не абсолютными. Например, для пикселя с координатами . Для получения относительных значений координат необходимо округлить вещественные координаты вниз, и вычесть полученные числа из вещественных координат.

,

где

,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,

Подобным образом можно использовать и другие виды интерполяции, вычисляя значения функции по соседним точкам.

Результат билинейной интерполяции на тех же входных данных. Частные производные не являются непрерывными и терпят разрыв на границах квадратов.
Результат интерполяции методом ближайшего соседа на тех же входных данных.

Бикубическая интерполяция сплайнами[править | править вики-текст]

Допустим, что необходимо интерполировать значение функции в точке , лежащей внутри квадрата , и известно значение функции в шестнадцати соседних точках . Тогда общий вид функции, задающей интерполированную поверхность, может быть записан следующим образом:

Для нахождения коэффициентов необходимо подставить в выше приведённое уравнение значения функции в известных шестнадцати точках. Например:

.

Полностью в матричном виде:

,

где

,

,

.

Решая получившуюся систему линейных алгебраических уравнений, можно найти значения в явном виде:

.

Единожды найденные коэффициенты теперь могут быть использованы для многократного вычисления интерполированного значения функции в произвольных точках квадрата .

Следует отметить, что такой способ обеспечивает непрерывность самой функции и её второй производной на границах ячеек, но приводит к разрыву первых производных на границах ячеек. Для обеспечения непрерывности самой функции и её первой производной необходимо подставлять в исходное выражение значения функции и значения первых производных по направлениям x и y в вершинах центральной ячейки, производные рассчитываются через центральные разности. Для подстановки производных выражение должно быть продифферинцировано соответствующим образом.

Последовательная кубическая интерполяция[править | править вики-текст]

Другая интерпретация метода заключается в том, что для нахождения интерполированного значения можно сначала произвести кубическую интерполяцию в одном направлении, а затем в другом.

Для функции с известными значениями , , , можно построить кубический сплайн: , или в матричном виде

,

где

,

.

Таким образом, для нахождения интерполированного значения в квадрате можно сначала рассчитать четыре значения , , , для зафиксированного , затем через полученные четыре точки построить кубический сплайн, и этим завершить вычисление  :

Следует отметить, что такой подход обеспечивает непрерывность самой функции и её вторых производных на границе ячеек, но не обеспечивает непрерывности первой производной. Для обеспечения непрерывности первой производной необходимо подставлять значения функции и её первых производных на границе центральной ячейки. Тогда коэффициенты сплайна будут иметь вид:

,

.

См. также[править | править вики-текст]