Хотя то, что говорит Антс Аасма, примерно описывает разницу, я не думаю, что она особенно информативна в отношении того, почему вы могли бы сделать такую вещь.
Что касается ссылок, вы задаете очень простой вопрос в обработке изображений, и любой приличный вводный учебник по этому вопросу будет описывать это. Если я правильно помню, Гонсалес и Вудс вполне приличны, но я вдали от своих книг и не могу проверить.
Теперь поговорим о деталях, это должно помочь подумать о том, что вы делаете в основном. У вас есть квадратная решетка измерений, для которой вы хотите интерполировать новые значения. В простом случае с повышением частоты, давайте представим, что вам нужно новое измерение между каждым, которое у вас уже есть (например, удвоить разрешение).
Теперь вы не получите «правильное» значение, потому что, как правило, у вас нет этой информации. Таким образом, вы должны оценить это. Как это сделать? Очень простым способом будет линейная интерполяция. Все знают, как сделать это с двумя точками, вы просто рисуете линию между ними и считываете новое значение вне линии (в данном случае, на половине пути).
Теперь изображение двухмерное, поэтому вы действительно хотите сделать это как влево-вправо, так и вверх-вниз. Используйте результат для вашей оценки и вуаля у вас есть "билинейная" интерполяция.
Основная проблема в том, что он не очень точный, хотя он лучше (и медленнее), чем подход «ближайшего соседа», который также очень локальный и быстрый.
Чтобы решить первую проблему, вам нужно что-то лучше, чем линейное согласование двух точек, вы хотите подогнать что-то к большему количеству точек данных (пикселей) и что-то, что может быть нелинейным. Хороший компромисс между точностью и вычислительными затратами - это то, что называется кубическим сплайном. Так что это даст вам плавную линию подгонки, и вы снова приблизите свое новое «измерение» к значению, которое оно принимает в середине. Сделайте это в обоих направлениях, и вы получите «бикубическую» интерполяцию.
Так что это точнее, но все же тяжело. Одним из способов решения проблемы скорости является использование свертки, которая обладает хорошим свойством, заключающимся в том, что в области Фурье это просто умножение, поэтому мы можем реализовать его довольно быстро. Но вам не нужно беспокоиться о реализации, чтобы понять, что результатом свертки в любой момент является одна функция (ваше изображение), интегрируемая в продукт, другая, обычно гораздо меньшая вспомогательная (ненулевая часть) функция, называемая ядром ), после того как ядро было отцентрировано над этой конкретной точкой. В дискретном мире это просто суммы продуктов.
Оказывается, вы можете создать ядро свертки, обладающее свойствами, подобными кубическому сплайну, и использовать его для получения быстрого "бикубического"
Повторная выборка Lancsoz - это то же самое, с немного отличающимися свойствами в ядре, что в первую очередь означает, что они будут иметь различные характерные артефакты. Вы можете легко найти детали этих функций ядра (я уверен, что в Википедии они есть, или любой вводный текст). Реализации, используемые в графических программах, как правило, высоко оптимизированы и иногда имеют специальные допущения, которые делают их более эффективными, но менее общими.