Набор Алгоритмов

Данная стать посвящена алгоритмам интерполяции на примере увеличения и уменьшения изображений. В статье описываются алгоритмы про интерполяцию в общем и интерполяцию на примере изменения размера изображений. Главное выделить смысл заполнения промежутков (включая значащие точки) при увеличении и уменьшении.

Алгоритмы - Интерполяция. Начальная концепция

1. Введение

Интерполяция — это определение промежутков дискретной функции при потере её значения (к примеру, из-за качества сигнала датчика) или её масштабирование с помощью интерполянтов.

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

Не путайте данные методы интерполяции с математеческими методами интерполяции (линейная интерполяция с продолжением, полином Лагранжа, т.п.).

2. Виды интерполяции

В статье приведено несколько видов интерполяции. Это позволит узнать возможности интерполяции на базовом, хотя можно сказать, на продвинутом уровне и придумать более сложные способы интерполяции(интерполянты). Хотя достаточно и этих способов для всех случаев, хотя и не обязательно — решайте сами, но я предлагаю для всего линейную, билёнейную интерполяцию и развитие её смысла для других базисов.

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

2.1. Интерполяция в одномерном пространстве

Интеполирование в одномерном пространстве представляет нахождение собой значение функции y(t), где известны значащие точки y1(t1), y2(t2), y3(t3), y4(t4) и т.д., но нужно найти значение между ними. Значение находится на промежутках [t1;t2],[t2;t3];[t3;t4] и т.д.

2.2. Дублирование до следующего/предыдущего

Смысл этого способа интерполяции заключается в том, что значение функции дублируется до следующего или предыдущего значения, но однозначно для последующих точек.

Далее рассмотрим рисунок этой концепции:

Интерполяция дублированием - Значение функции слева - Значение функции справа - Восстановленное (интерполированное) значение функции - Восстановленное (интерполированное) значение функции, одно из - Альтернативное восстановленное (интерполированное) значение функции - Альтернативное восстановленное (интерполированное) значение функции, одно из

Рис. 1. Концепция Интерполяции способом дублирования значения (для способа дублирования до правого/левого).

2.3. Интерполяция способом дублирования до ближайшего соседа

Смысл этого способа интерполяции заключается в том, что значение функции берётся то, как у ближайшего соседа. Этот вид интерполяции по результату равен 1-ому способу (2.1. Дублирование до следующего).

Интерполяция дублированием до ближайшего соседа - Значение функции слева - Значение функции справа - Восстановленное (интерполированное) значение функции - Восстановленное (интерполированное) значение функции, одно из

Рис. 2. Концепция Интерполяции способом дублирования до ближайшего соседа.

2.4. Линейная интерполяция

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

Значение левой точки
Значение левой точки
Значение правой точки
Значение правой точки
Искомое значение
Искомое значение
Линейная интерполяция
Линейная интерполяция
Viewer does not support full SVG 1.1

Рис. 3.1. Концепция Линейной интерполяции.

Линейная интерполяция - Значение функции слева - Значение функции справа - Восстановленное (интерполированное) значение функции - Восстановленное (интерполированное) значение функции, одно из

Рис. 3.2. Концепция Линейной интерполяции.

2.5. Квадратическая интерполяция

Смысл интерполяции заключается в том, что значения точек соединяются кривыми второго порядка (квадратичными или они также называются параболами).

Квадратичная кривая проходит через три точки, которые не являются корнями уравнения параболы, но она через них проходит не симметрично. Парабола геометрически однозначно задаётся тремя точками. Просьба не путать с корнями параболы, корня у параболы максимум два, и они означают координаты точек(и) пересечения с осью абсцисс. Попробуйте написовать параболы и вы увидите, что через три случайные точки однозначно проходит только одна парабола и интервалы не одинаковы.

Значение значащих
точек
Значение значащих...
Искомое значение
Искомое значение
Квадратическая интерполяция
Квадратическая интерполяция
Viewer does not support full SVG 1.1

Рис. 4. Концепция Квадратической интерполяции.

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

Интерполяция заключается в том, чтобы провести кубическую кривую, через 4 точки.

Значение значащих
точек
Значение значащих...
Искомое значение
Искомое значение
Кубическая интерполяция
Кубическая интерполяция
Viewer does not support full SVG 1.1

Рис. 5. Концепция Кубической интерполяции.

2.7. Радиальная интерполяция

На рисунке далее две значащие точки соединяются кругом:

Значение левой точки
Значение левой точки
Значение правой точки
Значение правой точки
Искомое значение
Искомое значение
Радиальная интерполяция
Радиальная интерполяция
Viewer does not support full SVG 1.1

Рис. 6.1. Концепция Радиальной интерполяции.

На Рис. 6.1. показана концепция Радиальной интерполяции, если между точками равные промежутки. Представьте себе уровни значений значащих точек на круге: если считать, что между точками не равные промежутки, а они просто должны попадать на круг последовательно, то можно интерполировать сразу три значащие точки:

Значение значащих
точек
Значение значащих...
Искомое значение
Искомое значение
Радиальная интерполяция
Радиальная интерполяция
Viewer does not support full SVG 1.1

Рис. 6.2. Концепция Радиальной интерполяции.

Это свойство можно использовать для всех интерполянтов и оно представлено на всех примерах инетрполянтов выше и ниже.

2.8. Эллиптическая интерполяция

Эллиптическая интерполяция производится по аналогии с радиальной, но кривой берётся эллипс.

Значение значащих
точек
Значение значащих...
Искомое значение
Искомое значение
Эллиптическая
Эллиптическая
Viewer does not support full SVG 1.1

Рис. 7. Концепция Эллиптической интерполяции.

2.9. Интерполяция Кривыми Безье

Интерполяция может проводиться любыми Кривыми Безье. На Рисунке 8 приведён пример интерполяции Кривыми Безье второго порядка.

Значение значащих
точек
Значение значащих...
Искомое значение
Искомое значение
Кривыми Безье 2-го порядка
Кривыми Безье 2-го порядка
Viewer does not support full SVG 1.1

Рис. 8. Концепция интерполяции Кривыми Безье.

2.10. Двумерная интерполяция

Интеполирование в двумерном (трёхмерном, если учитывать для базиса ещё один вектор для значения функции) пространстве представляет нахождение собой значение функции z(x,y), где известны значащие точки z1(x1, y1), z2(x2, y2), z3(x3, y3), z4(x4, y4) и т.д., но нужно найти значение между ними. Интерполяция происходит для промежутком значащих координат функции.

2.11. Двумерная интерполяция Дублированием до следующего/предыдущего

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

Значение значащих
точек
Значение значащих...
Искомое значение
Искомое значение
Двумерная интерполяция Дублированием до следующего/предыдущего
Двумерная интерполяция Дублированием до следующего/предыдущего
1
1
2
2
3
3
4
4
1
1
Viewer does not support full SVG 1.1

Рис. 9. Концепция Двумерной интерполяции Дублированием до следующего/предыдущего.

На Рис. 9 показана интерполяция повторением точки 1.

2.12. Двумерная интерполяция по ближайшему соседу

Пусть у нас есть функция z(x,y) и есть четыре значащих точки, между которыми требуется интерполировать значение. Для этого вычисляем расстояние до каждой точки на плоскости XY и выбираем минимальное расстояние. При равных расстояниях, можно выбрать точку до которой происходит округление.

Значение значащих
точек
Значение значащих...
Искомое значение
Искомое значение
Двумерная интерполяция по ближайшему соседу
Двумерная интерполяция по ближайшему соседу
Viewer does not support full SVG 1.1

Рис. 10. Концепция Двумерной интерполяции по ближайшему соседу.

2.13. Билинейная интерполяция

На координатах задаются проекции на ось, на которых сами точки соеденены линиями. Проецирование заданных координат для интерполяции происходит на линию, соединяющие заданные точки. Потом пересечения в свою очередь соединяются линиями, как понятно, они проходят над начальными коодинатами. От начальных координат до них (их пересечения) строится интерполированное значение. Аналагично строятся точки в примерах далее.

Значение значащих
точек
Значение значащих...
Искомое значение
Искомое значение
Билинейная интерполяция
Билинейная интерполяция
Viewer does not support full SVG 1.1

Рис. 11. Концепция Билинейной интерполяции.

2.14. Биквадратическая интерполяция

Биквадратическая происходит также, как и биленейная, но уже точки и интерполируемая точка соединяются не линиями, а квадратическими кривыми.

Значение значащих
точек
Значение значащих...
Искомое значение
Искомое значение
Биквадратическая интерполяция
Биквадратическая интерполяция
Viewer does not support full SVG 1.1

Рис. 12. Концепция Биквадратической интерполяции.

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

Бикубическая схожа остальным типам двумерной интерполяции, только требует больше значащих точек, и соединять уже нужно искомые точки кубическими кривыми.

Значение значащих
точек
Значение значащих...
Искомое значение
Искомое значение
Бикубическая интерполяция
Бикубическая интерполяция
Viewer does not support full SVG 1.1

Рис. 13. Концепция Бикубической интерполяции.

2.16. Бирадиальная интерполяция, Биэллиптическая интерполяция, Би-интерполяция Кривыми Безье.

Бирадиальная интерполяция, Биэллиптическая интерполяция, Би-интерполяция Кривыми Безье по смыслу и количеству точек схожа с Биквадратической интерполяцией, только отличие в том, что находимые и значащие точки соединяются не квадратическими кривыми, а соответствующие виду интерполяции. Их концепцию можно понять по картинке Биквадратической интерполяции.

Значение значащих
точек
Значение значащих...
Искомое значение
Искомое значение
Концепция Бирадиальной интерполяции, Биэллиптической интерполяции, Би-интерполяции Кривыми Безье на примере Биквадратической
Концепция Бирадиальной интерполяции, Биэллиптической интерполяции, Би-интерполяции Кривыми Безье на примере Биквадратической
Viewer does not support full SVG 1.1

Рис. 14. Концепция Бирадиальной интерполяции, Биэллиптической интерполяции, Би-интерполяции Кривыми Безье.

2.17. Трипл-интерполяция и более

Интерполянт задаётся в базисе уравнением от переменных (n-1), где n — это размер базиса. Значение функции от этих переменных — это интерполируемое значение.

Т.е. к примеру 3D-интерполянт задаётся функцией f(x,y,z) для 4-х мерного базиса. Как представлено ранее, би-интерполяция — это задание интерполянта функцией z(x,y).

2.18. Интерполянт

?
?
Интерполянт
Интерполянт
Значение левой точки
Значение левой точки
Значение правой точки
Значение правой точки
?
?
Искомое значение
Искомое значение
Viewer does not support full SVG 1.1

Рис. 15. Интерполянт.

Значение, соединяющее точки, генерируемое по функции, параметрическому уравнению, ряду и т.п. называется интерполянтом. Придумывайте свои для каждого случая или довольствуйтесь линейным. Интерполянт можно использовать для заполнения промежутков, для поиска неизвесных точек. Так же, аналогично интерполянт можно использовать для увеличения или уменьшения. Значение увеличеное (или уменьшенное) определяется только по интерполянтам. Иными словами, если нам нужно заполнить промежутки между точками, вызванные масштабированием или потерей значения, то эти промежутки заполняются специальным правилом, называемым интерполянтом.

К примеру, интерполянт может быть другой для Вашего случая, но более чем достаточно приведённных способов интерполяции.

2.18.1. Требования к интерполянту

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

Другой интерполянт и требования к нему - Значение функции слева - Значение функции справа - Интерполянты ?

Рис. 16. Другой интерполянт.

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

2.19. Интерполяция функций (сводка)

В данном разделе статьи приведена сводная картина для интерполирования функций с множеством значений. Рисунки выше показывают только определённые частоприменяемые концепции, далее приведина их сводная картина.

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

3. Интеполирование изображений в GIMP

В данном разделе приведены примеры интерполяции при увеличении изображения в программе GIMP 2.10.8.

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

Далее приведём пример работы программы, на примере следующего изображения:

Рис. 17. Исходное изображение.

Рассмотрим далее увеличение интерполированием изображений следующими способами:

  1. Cпособом дублирования до ближайшего соседа
  2. Линейная интерполяция
  3. Бикубическая интерполяция

И в конце сравним эти четыре типа по результатам.

Рассмотрим только увеличение на части Рис. 17:

Рис. 18. Исходное изображение. Увеличивываемая часть.

3.1. Одномерная способом дублирования до ближайшего соседа

Рис. 19. Увеличение дублированием.

3.2. Линейная

Рис. 20. Линейное увеличение.

3.3. Бикубическая

Рис. 21. Кубическое увеличение.

3.4. Сравнение результатов

Посмотрим на рисунок далее и сравним результаты:

Рис. 22. Сравнение увеличений.

Как видно, кубическая интерполяция дала самый лучший результат. Если Вам требуется увеличить изображение без потери значащих точек, то интерполяция дублированием подойдёт Вам. Линейная интерполяция изображений оказалась менее точной, по сравнению с кубической, но она требует меньше процессорного времени.

4. Заключение

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

Не путайте данные методы интерполяции с математеческими методами интерполяции (линейная интерполяция с продолжением, полином Лагранжа, т.п.).