Данное учебное пособие посвящено основным методам и алгоритмам, применяющимся в различных областях растровой компьютерной графики. Объединяющим элементом для рассматриваемых в книге идей является понятие растра или, иными словами, цифрового изображения, включая изображение на мониторе Вашего домашнего компьютера. С большинством изложенных алгоритмов Вы, хотя и не замечая этого, сталкиваетесь каждодневно - ведь компьютер используется повсеместно для решения Ваших как бытовых, так и профессиональных проблем, а его монитор служит практически единственным средством отображения различного рода информации.
В первой части книги, после введения в такие понятия, как растр и цвет (как ни странно, кажущееся простым понятие "цвет" требует достаточно нетривиальных подходов при его описании в компьютере), дается обзор современных аппаратных средств растровой графики, включая цифровые мониторы, камеры, сканеры, принтеры и т.п. Кроме того, рассматривается структура графической подсистемы персонального компьютера как системы, непосредственно отвечающей за то, что окажется на экране Вашего монитора.
Несколько глав далее посвящены алгоритмам растеризации или, иными словами, рисования различного рода линейных объектов, начиная с простых, таких как отрезки, окружности и эллипсы, и заканчивая сложными, такими как параметрические кривые, включая кривые Безье и сплайны на их основе.
Далее рассматриваются алгоритмы заполнения многоугольников и областей произвольной формы, а также некоторые методы отсечения отрезков и многоугольников другими многоугольниками, что предполагает анализ взаимного расположения точек, отрезков и областей на плоскости.
Большое внимание в книге уделяется различным алгоритмам обработки цифровых изображений, например, фотографий. Так, подробно рассматриваются способы осуществления различных геометрических преобразований над изображениями на плоскости и алгоритмы фильтрации изображений, например с целью удаления шумов или повышения контраста, а также методы поиска границ на основе градиента и лапласиана. Отдельная глава в книге посвящена методам выделения объектов из общего фона изображения, включая такие алгоритмы, как "Волшебная палочка" и "Умные ножницы", а также современный метод сегментации изображений при помощи разрезов на графах.
В условиях определенных аппаратных ограничений в части передачи цветов важную роль играют методы подмены одного способа описания цвета другим. Например, если Вы хотите распечатать полутоновое изображение, скажем, фотографию на черно-белом принтере, то Вы не обойдетесь без алгоритмов псевдотонирования, рассматриваемых в данной книге. Также для многих задач важно иметь возможность заменить 24 бита, хранимых в каждом пикселе цветного изображения, на 8 бит, не внося существенных визуальных искажений, - это можно сделать с использованием приведенных методов квантования.
Заключительная часть книги посвящена крайне актуальным вопросам уменьшения объема данных, представляющих растровое изображение, или, как их часто называют в обиходе, вопросам "сжатия" изображений. В случае необходимости сохранить изображение в оригинальном виде (это важно, например, для медицинских или спутниковых изображений) используются методы сжатия данных без потерь, основанные на анализе повторений элементов или целых последовательностей, неравномерности гистограммы распределения цветов. Однако, если Вы готовы пожертвовать незначительными, часто не видимыми "невооруженным" глазом, искажениями в пользу многократного уменьшения объема требуемого места на диске, скажем, для Вашей коллекции фотографий, то тогда Вам подойдут алгоритмы сжатия изображений с потерей данных, такие как косинусное или вейвлет преобразования, используемые в JPEG.
Изложенный в данной книге материал апробирован многолетней практикой его преподавания в рамках специального курса лекций "Алгоритмические основы машинной графики", читаемого авторами на Механико-математическом факультете МГУ для студентов I-V курса и аспирантов. Надеемся, что приведенные в этом пособии идеи будут полезны широкому кругу специалистов, - как начинающих изучение, так и активно практикующих в своей работе алгоритмы растровой компьютерной графики.
Алгоритмы в книге записываются на псевдокоде с синтаксисом напоминающим объектно-ориентированные языки семейства C (такие как C++, C#, Java ). Основные управляющие конструкции: