Winscale
WINSCALE
Основная идея
Говоря в общих чертах, Winscale использует некоторую область пикселей исходного изображения для вычисления значения пикселя выходного изображения. Пусть пиксели имеют прямоугольную форму, а интенсивность света равномерно распределена по всей площади пикселя. Таким образом, каждый новый пиксель изображения получается путем взвешенного усреднения значений исходных пикселей, взятого с некоторым коэффициентом. Для объяснения введём некоторую терминологию. Источником назовём исходное изображение до увеличения/уменьшения, а приёмником – масштабированное изображение. Рассчитываемую в данный момент область пикселей приёмника назовём фильтром. В нашем алгоритме преобразование проводится вдоль сканирующей строки при потоковой передаче данных.
Рис. 1.
На рис. 1 приведён пример увеличения изображения с разрешения 4*4 пикселя до 5*5 пикселей, чтобы наглядно проиллюстрировать основную идею алгоритма. Количество пикселей источника, покрытых пикселями приёмника, не превышает четырех, потому что площадь пикселя приёмника меньше, чем площадь пикселя источника, как показано на рис. 1 внизу слева. Значения четырех пикселей источника, покрытых пикселями приёмника – С0…С3. Области четырёх пикселей источника, покрытые пикселями приемника – А0…А3. Будем считать, что область исходного пикселя равна 1. Таким образом, значение пикселя Р получаем по формуле (1), где SF – величина, обратная площади фильтра. Далее фильтр перемещается на один шаг по строке или столбцу. Если фильтр точь-в-точь совпадает с границей области пикселей источника, то здесь прослеживается свойство алгоритма ближайшего соседа: пиксель приёмника приобретает значение пикселя источника. Это свойство даёт хорошую высокочастотную характеристику и ослабляет эффект размытия. Если фильтр больше по размеру, чем несколько пикселей источника, то добавляется сглаживание, а это признак билинейного алгоритма. Таким образом, winscale обладает двумя хорошими свойствами метода ближайшего соседа и линейной интерполяции: неплохой высокочастотной характеристикой и сглаживанием. Коэффициент SF компенсирует снижение интенсивности из-за небольшой площади (менее 1) пикселя приёмника. Значение SF будет больше 1 при увеличении масштаба.
Рис. 2.
На рис. 2 показан пример уменьшения размера изображения (с разрешения 5*5 пикселей до 4*4 пикселей). Основной принцип уменьшения изображения почти такой же, за исключением предварительного масштабирования и размера фильтра. Если коэффициент уменьшения больше 2, блок предварительного масштабирования выполняет уменьшение путём равномерно взвешенного суммирования с коэффициентом, являющимся степенью двойки для того, чтобы подобрать значение коэффициента масштабирования от 1 до ½ перед основным процессом уменьшения. Тем самым гарантируется, что каждый пиксель использовался хотя бы один раз, то есть все пиксели источника повлияли на результат независимо от значения коэффициента масштабирования. Размеры ширины и высоты фильтра сжались до 1, чтобы гарантировать покрытие максимум четырьмя пикселями приемника. Таким образом, в случае уменьшения размера изображения значение шага смещения фильтра для получения следующего пикселя будет больше 1, а значение коэффициента SF независимо от коэффициента масштабирования будет равно 1.