(C)1997 Serge Segal
АЛГОРИТМЫ СГЛАЖИВАНИЯ ИЗОБРАЖЕНИЙ.
В данной статье речь пойдет об
алгоритмах сглаживания стати-
ческих изображений. Сначала
разберемся зачем это нужно, а
затем можно уже разбирать сам
процесс.
ИТАК, ЗАЧЕМ ЭТО НУЖНО?
Каждый кто видел программу "EXTACY MD"
группы "RUSH", помнит часть, в которой
вращается надпись "XTC". Так как она
вращается быстро, незаметно, что линии
составляющие ее выглядят, мягко говоря,
не очень красиво, как-то зубцевато.
Все дело в том, что использовался ре-
дактор 3D-изображений, который не сгла-
живает линии. Сейчас все редакторы для
3D-графики на мощных машинах это делают.
Для этого специально изменяется алгоритм
рисования линии и окружности. Об этом мы
расскажем в следующих номерах нашего
журнала, а сейчас, о том, как эту проб-
лему можно решить, не меняя кода редак-
тора. Можно самому написать алгоритм,
который автоматически сгладит линии.
Второе применение сглаживания - кор-
рекция увеличенных растровых изображе-
ний. С проблемой угловатости картинки
сталкивался каждый, кто работал в редак-
торе "Art Studio" с увеличением, особен-
но с непропорциональным. Такую увеличен-
ную картинку также необходимо сгладить.
КАК ЖЕ ВСЕ-ТАКИ РАБОТАЕТ ЭТОТ АЛГОРИТМ
По старой традиции мы не будем рассма-
тривать сложные и малоприменимые для
"ZX-Spectrum" алгоритмы. Так интеллекту-
альное сглаживание обрабатывает одну
картинку около часа. Эффект, конечно ...
Но вот производительность, как-то не тя-
нет... Поэтому я придумал иной алгоритм
сглаживания, простой до идиотизма, но,
вместе с тем, работающий довольно быстро
и дающий сносный эффект. Состоит алго-
ритм из двух частей: сглаживание линий
(для векторных изображений) и сглажива-
ние углов (для увеличенных избражений).
Работают оба алгоритма на одном и том же
принципе: сканирование экрана в поисках
шаблона и замена шаблона на более краси-
вый.
┌─┬─┐ ┌─┬─┐ Как видно, для первого
│█│░│ │█│█│ алгоритма, мы находим
├─┼─┤=>├─┼─┤ зубец и заменяем его на
│░│█│ │█│█│ квадрат, либо уголок.
└─┴─┘ └─┴─┘ На что будем менять, по-
|| казывает переменная DOU-
┌─┬─┐ BLE, если 0 - то зуб,
│█│█│ иначе квадрат. Рекомен-
├─┼─┤ дую для увеличенных изо-
│░│█│ бражений квадрат, а для
└─┴─┘ векторных - уголок.
Второй проход - сглаживание углов рабо-
тает с матрицей 3 на 3.
┌─┬─┬─┐ ┌─┬─┬─┐ Аналогично первому,
│█│█│█│ │█│█│█│ этот алгоритм заме-
├─┼─┼─┤ ├─┼─┼─┤ няет углы на треу-
│█│░│░│=>│█│█│░│ льные зубцы. Никакой
├─┼─┼─┤ ├─┼─┼─┤ сложности в этом
│█│░│░│ │█│░│░│ нет, главное - пра-
└─┴─┴─┘ └─┴─┴─┘ вильно снять матрицу
и правильно ее вернуть
на место. Кроме того пришлось ввести
принудительное инвертирование для неко-
торых картинок на время сглаживания (пе-
ременная INVERT). После окончания сгла-
живания, картинка возвращается в неин-
вертированное состояние.
Кроме названных существуют еще две пе-
ременных управления процессом: FIRST и
SECOND, включение / выключение соответ-
ственно первого и второго алгоритмов.
Ну и естественно координаты окна, кото-
рое сглаживается: X1, Y1, X2, Y2.
В приложении Вы найдете:
- SGLAV1.Z, SGLAV2.Z два исходных
файла алгоритмов с комментариями
- SGLAV2 кодовый файл, готовый к
использованию
- SGL.EXMP пример использования
- $BASHK1 картинка - пример.
Ну все, на сегодня пожалуй хватит. В
дальнейших номерах мы возможно (!) про-
должим тему извращений над картинками.
____________________________________