ZX News
#03
28 февраля 1997 |
|
Сглаживание картинок - Алгоритм сглаживания статических изображений.
(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 картинка - пример. Ну все, на сегодня пожалуй хватит. В дальнейших номерах мы возможно (!) про- должим тему извращений над картинками. ____________________________________
Другие статьи номера:
Похожие статьи:
В этот день... 21 ноября