Вы здесь

Масштабирование изображения

Исходный код на C++: 

Существует множество различных алгоритмов масштабирования изображения. В данной статье мы рассмотрим только два: дублирование пикселей; билинейная интерполяция. Принцип работы алгоритма дублирования пикселей очень прост, он состоит в копирование строк и столбцов исходного изображение при увеличение изображения и удаление строк и столбцов при его уменьшении. К достоинствам работы алгоритма можно отнести: простота реализации; быстродействие. К недостаткам можно отнести: изображение можно увеличить(уменьшить) только в целое число раз; возникает ступенчатый эффект, это хорошо заметно если коэффициент масштабирования достаточно велик.
На практике чаще используется алгоритм билинейной интерполяции. Основная идея алгоритма состоит в том, что зная значение яркости в точках A1, A2, A3, A4 вычислим значение яркости в точки P рис.1.

Точки A1, A2, A3, A4 с известными значениями яркости. Значение в точки P интерполировано
Рис. 1.Точки A1, A2, A3, A4 с известными значениями яркости. Значение в точки P интерполировано.

Для нахождения значения яркости в точке P воспользуемся следующей формулой Рис. 2.

Формула билинейной интерполяции
Рис.2. Формула билинейной интерполяции.

Данный алгоритм учитывает значение яркости соседних пикселей, что позволяет избежать ступенчатого эффекта, описанного выше.
Продемонстрируем работу алгоритмов на конкретном примере. На Рис.3 представлено исходное изображение.

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

Увеличим данное изображение в три раза методом дублирования пикселей. Результат работы алгоритма представлен на Рис. 4.

Трехкратное увеличение изображения методом дублирование пикселей
Рис. 4. Трехкратное увеличение изображения методом дублирование пикселей.

Аналогично увеличим исходное изображение в три раза методом билинейной интерполяцией Рис. 5 и сравним полученные результаты.

Трехкратное увеличение изображения методом билинейной интерполяцией
Рис. 5. Трехкратное увеличение изображения методом билинейной интерполяцией.

При трехкратном увеличении изображения на рис. 4 можно увидеть ступенчатые переходы, при большой кратности увеличения ступенчатость становиться ярко выявленной. На изображение Рис. 5 данный негативный эффект отсутствует.