Предисловие

 

Целью написания этой книги было создать пособие по компьютерной графи­ке для студентов, которые также изучают программирование. Занятие про­граммированием облегчает восприятие компьютерных информационных технологий, это позволяет глубже заглянуть в мир компьютеров, получить ответы на многие вопросы типа "почему именно так". Оказалось полезным построить курс компьютерной графики с точки зрения программистов. Для лучшего восприятия этого курса желательно уже уметь, хотя бы немного, программировать на компьютерном языке C++ или С.

Материал данной книги в значительной мере соответствует курсу компью­терной графики, что читается мною в Киевском инженерно-техническом ин­ституте на протяжении последних нескольких лет. Также полезным для написания книги оказался опыт автора в качестве одного из разработчиков и программистов геоинформационной системы "ОКО" в фирме "Геобио-номика".

Я понимаю, что это безнадежное дело — охватить в довольно небольшой по объему книге огромный массив знаний, накопленный в области компьютер­ной графики. Тем более, что уже издано достаточное количество книг на эту тему, многие из них считаю непревзойденными. Однако компьютерная гра­фика бурно развивается, поэтому есть потребность обобщить некоторые ас­пекты современного состояния, написать о них как можно более простым и ясным языком, четко и понятно объяснить суть вещей. Кроме того, надеюсь, и мой собственный опыт программирования графики может кому-то быть полезным.

В любом обществе можно встретить людей, которые не удовлетворяются только использованием результатов труда других. Эта книга в первую оче­редь для тех, кто хочет создавать что-то собственноручно и получать удовлетворение от процесса созидания. Компьютерная графика дает бесконечный простор для творчества. Кроме того, она возбуждает воображение челове­ка — это один из факторов ее популярности.

Выражаю благодарность всем тем, кто, так или иначе, помогал мне в работе над книгой. Это сотрудники Киевского инженерно-технического и Киевского политехнического институтов, работники фирмы "Геобиономика". Особая благодарность жене Татьяне, без которой этой книги никогда бы не было.

 

Введение

                         

Самая важная функция компьютера — обработка информации. Особо можно выделить обработку информации, связанную с изображениями. Она разделя­ется на три основные направления: компьютерная графика (КГ), обработка изображений и распознавание изображений [19].

Задача компьютерной графики — визуализация, то есть создание изобра­жения. Визуализация выполняется исходя из описания (модели) того, что нужно отображать. Существует много методов и алгоритмов визуализации, которые различаются между собою в зависимости от того, что и как отобра­жать. Например, отображение того, что может быть только в воображении человека— график функций, диаграмма, схема, карта. Или наоборот, имита­ция трехмерной реальности — изображения сцен в компьютерных развлече­ниях, художественных фильмах, тренажерах, в системах архитектурного проектирования. Важными и связанными между собою факторами здесь яв­ляются: скорость изменения кадров, насыщенность сцены объектами, качест­во изображения, учет особенностей графического устройства.

Обработка изображений — это преобразование изображений. То есть вход­ными данными является изображение, и результат — тоже изображение. Примером обработки изображений могут служить: повышение контраста, четкости, коррекция цветов, редукция цветов, сглаживание, уменьшение шумов и так далее. В качестве материала для обработки могут быть космические снимки, отсканированные изображения, радиолокационные, инфракрасные изображения и тому подобное. Задачей обработки изображений может   

быть как улучшение в зависимости от определенного критерия (реставрация,

восстановление), так и специальное преобразование, кардинально изменяющее изображения. В последнем случае обработка изображений может быть промежуточным этапом для дальнейшего распознавания изображения. Например, перед распознаванием часто необходимо выделять контуры, создавать бинарное изображение, разделять по цветам. Методы обработки изображения могут существенно отличаться в зависимости от того, каким путем оно получено — синтезировано системой КГ, .либо это результат оцифровки черно-белой или цветной фотографии.

Для распознавания изображений основная задача— получение описания изображенных объектов. Методы и алгоритмы распознавания разрабатыва­лись, прежде всего, для обеспечения зрения роботов и для систем специаль­ного назначения. Но в последнее время компьютерные системы распознава­ния изображений все чаще появляются в повседневной практике многих лю­дей— например, офисные системы распознавания текстов или программы векторизации, создание трехмерных моделей человека.

Цель распознавания может формулироваться по-разному— выделение от­дельных элементов (например, букв текста на изображении документа или условных знаков на изображении карты); классификация изображения в це­лом (например, проверка, изображен ли определенный воздушный аппарат, или установление персоны по отпечаткам пальцев).

Методы классификации и выделения отдельных элементов могут быть взаи­мосвязаны. Так, классификация может быть выполнена на основе структур­ного анализа отдельных элементов объекта. Или для выделения отдельных элементов можно использовать методы классификации. Задача распознава­ния является обратной по отношению к визуализации.

До недавнего времени достаточно популярным было словосочетание интер­активная компьютерная графика. Им подчеркивалась способность компь­ютерной системы создавать графику и вести диалог с человеком. Раньше системы работали в пакетном режиме — способы диалога были не развиты. В настоящее время почти любую программу можно считать системой интер­активной КГ.

Исторически первыми интерактивными системами считаются системы ав­томатизированного проектирования (САПР), которые появились в 60-х годах [18, 19, 28]. Они представляют собой значительный этап в эволюции компьютеров и программного обеспечения. В системе интерактивной КГ пользователь воспринимает на дисплее изображение, представляющее неко­торый сложный объект, и может вносить изменения в описание (модель) объекта (рис. 1). Такими изменениями могут быть как ввод и редактирование отдельных элементов, так и задание числовых значений для любых параметров, а также иные операции по вводу информации на основе восприятия изображений.

Системы типа САПР активно используются во многих областях, например в машиностроении и электронике. Одними из первых были созданы САПР для проектирования самолетов, автомобилей, системы для разработки микроэлектронных интегральных схем, архитектурные системы. Такие системы на первых порах функционировали на достаточно больших компьютерах. Потом распространилось использование быстродействующих компьютеров средне­го класса с развитыми графическими возможностями — графических рабо­чих станций. С ростом мощностей персональных компьютеров все чаще САПР использовали на дешевых массовых компьютерах, которые сейчас имеют достаточные быстродействие и объемы памяти для решения Многих задач. Это привело к широкому распространению систем САПР

 

 

 

Ныне становятся все более популярными геоинформационные системы (ГИС). Это относительно новая для массовых пользователей разновидность систем интерактивной компьютерной графики. Они аккумулируют в себе методы и алгоритмы многих наук и информационных технологий. Такие сис­темы используют последние достижения технологий баз данных, в них зало­жены многие методы и алгоритмы математики, физики, геодезии, топологии, картографии, навигации и, конечно же, компьютерной графики. Системы ти­па ГИС зачастую требуют значительных мощностей компьютера как в плане работы с базами данных, так и для визуализации объектов, которые находят­ся на поверхности Земли. Причем, визуализацию необходимо делать с раз­личной степенью детализации — как для Земли в целом, так и в границах отдельных участков (рис. 2). В настоящее время заметно стремление разра­ботчиков ГИС повысить реалистичность изображений пространственных объектов и территорий.

Типичными для любой ГИС являются такие операции — ввод и редактиро­вание объектов с учетом их расположения на поверхности Земли, формиро­вание разнообразных цифровых моделей, запись в базы данных, выполнение разнообразных запросов к базам данных. Важной операцией является анализ с учетом пространственных, топологических отношений множества объек­тов, расположенных на некоторой территории.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Важным этапом развития систем компьютерной графики являются так назы­ваемые

системы виртуальной реальности (virtual reality). Наращивание мощности компьютеров, повышение реалистичности трехмерной графики и совершенствование способов диалога с человеком позволяют создавать ил­люзию вхождения человека в виртуальное пространство. Это пространство может быть моделью или существующего пространства, или выдуманного. Системы класса виртуальной реальности для диалога с компьютером обычно используют такие устройства, как шлем-дисплей, сенсоры на всем теле чело­века.

Образцы компьютерной графики известны уже каждому. Приобрели распро­странение, например, разнообразные компьютерные игры. Значительную роль в них играет анимация, реалистичность изображений, совершенство способов ввода-вывода информации. Здесь следует отметить, что во многих компьютерных играх реализованы идеи и методы, которые ранее были во­площены в профессиональных дорогостоящих системах, например, в трена­жерах для летчиков.                                                                                         

Широко используется компьютерная графика в кино. Одним из первых из­вестных фильмов был фильм "Звездные войны". Он был создан с помощью суперкомпьютера Cray. Этапы дальнейшего развития компьютерного кине­матографа можно проследить по таким фильмам, как "Терминатор-2", "Вави­лон 5", "Леке" и десяткам (если уже не сотням) других. До недавнего време­ни технологии компьютерной графики использовались для спецэффектов создания изображений экзотических чудовищ, имитации стихийных бедствии и других элементов, которые являлись лишь фоном для игры живых актеров. В 2001 году вышел на экраны полнометражный кинофильм "Финальная фан­тазия", в котором все, включая изображения людей, синтезировано компью­тером — живые актеры только озвучили роли за кадром.

Важным событием в жизни общества стало появление глобальной сети Internet. Сейчас происходит бурное развитие этой сети. Наращиваются мощности каналов передачи данных, усовершенствуются способы обмена и обра­ботки информации. Сеть Internet используют все больше людей во всех стра­нах. Это способ общения людей, обмена информацией, сближения языков, распространения идей, новое пространство для бизнеса и тому подобное. Можно относиться к Internet по-разному — например, одни считают ее важ­ным фактором демократизации, а другие ее называют орудием чьего-то ми­рового господства. Вероятно, оба эти мнения справедливы, как и многие дру­гие. Одно несомненно — создание сети Internet является выдающимся дос­тижением человечества. Важное место в Internet занимает компьютерная графика. Все больше совершенствуются способы передачи визуальной ин­формации, разрабатываются более совершенные графические форматы, ощу­тимо желание использовать трехмерную графику, анимацию, весь спектр мультимедиа.

 

 

ЧАСТЬ 1

                                     Основы

компьютерной графики

 

 

 

ГЛАВА 1

 

                                              1.1 . Визуализация изображений

 

Наиболее известны два способа визуализации: растровый и векторный. Первый способ ассоциируется с такими графическими устройствами, как дисплей, телевизор, принтер. Второй используется в векторных дисплеях, плоттерах.

Наиболее удобно, когда способ описания графического изображения соот­ветствует способу визуализации. Иначе нужна конвертация. Например, изо­бражение может храниться в растровом виде, а его необходимо вывести (ви­зуализировать) на векторном устройстве. Для этого нужна предварительная векторизация — преобразование из растрового в векторное описание. Или наоборот, описание изображения может быть в векторном виде, а нужно ви­зуализировать на растровом устройстве — необходима растеризация.

Растровая визуализация основывается на представлении изображения на эк­ране или бумаге в виде совокупности отдельных точек (пикселов). Вместе пикселы образуют растр

Векторная визуализация основывается на формировании изображения на эк­ране или бумаге рисованием линий (векторов) — прямых или кривых. Сово­купность типов линий (графических примитивов), которые используются как базовые для векторной визуализации, зависит от определенного устройства. Типичная последовательность действий при векторной визуализации для плоттера или векторного дисплея такова: переместить перо в начальную точ­ку (для дисплея — отклонить пучок электронов); опустить перо (увеличить яркость луча); переместить перо в конечную точку; поднять перо (уменьшить яркость луча).

Качество векторной визуализации для векторных устройств обуславливается точностью вывода и номенклатурой базовых графических примитивов — ли­ний, дуг, кругов, эллипсов и других

            Доминирующим сейчас является растровый способ визуализации. Это обу­словлено большей распространенностью растровых дисплеев и принтеров. Недостаток растровых устройств — дискретность изображения. Недостатки векторных устройств — проблемы при сплошном заполнении фигур, мень­шее количество цветов, меньшая скорость (в сравнении с растровыми уст­ройствами).

 

 

1.2.Растровые изображения и их основные характеристики

 

Растр — это матрица ячеек (пикселов). Каждый пиксел может иметь свой цвет. Совокупность пикселов различного цвета образует изображение. В за­висимости от расположения пикселов в пространстве различают квадратный, прямоугольный, гексагональный или иные типы растра. Для описания распо­ложения пикселов используют разнообразные системы координат. Общим для всех таких систем является то, что координаты пикселов образуют дис­кретный ряд значений (необязательно целые числа). Часто используется сис­тема целых координат — номеров пикселов с (0,0) в левом верхнем уголку.

Такую систему мы будем использовать и в дальнейшем, ибо она удобна для рассмотрения алгоритмов графического вывода.

Какие основные характеристики растровых изображений?

 

Геометрические характеристики растра 

 

Разрешающая способность. Она характеризует расстояние между соседни­ми пикселами (рис. 1.1). Разрешающую способность измеряют количеством пикселов на единицу длины. Наиболее популярной единицей измерения яв­ляется dpi (dots per inch)— количество пикселов в одном дюйме длины (2.54 см). Не следует отождествлять шаг с размерами пикселов — размер пикселов может быть равен шагу, а может быть как меньше, так и больше, чем шаг.

                  Размер растра обычно измеряется количеством пикселов по горизонтали и вертикали. Можно сказать, что для компьютерной графики зачастую наибо­лее удобен растр с одинаковым шагом для обеих осей, то есть dpiX = dpiY. Это удобно для многих алгоритмов вывода графических объектов. Иначе — проблемы. Например, при рисовании окружности на экране дисплея EGA (устаревшая модель компьютерной видеосистемы, ее растр — прямоуголь­ный, пикселы растянуты по высоте, поэтому для изображения окружности необходимо генерировать эллипс).

 

 

Форма пикселов растра определяется особенностями устройства графиче­ского вывода (рис. 1.2). Например, пикселы могут иметь форму прямоуголь­ника или квадрата, которые по размерам равны шагу растра (дисплей на жидких кристаллах); пикселы круглой формы, которые по размерам могут и не равняться шагу растра (принтеры).

 

 

Количество цветов

 

Количество цветов (глубина цвета) — также одна из важнейших характери­стик растра. Количество цветов является важной характеристикой для любо­го изображения, а не только растрового. Согласно психофизиологическим исследованиям глаз человека способен различать 350 000 цветов [28].

 

Классифицируем изображения следующим образом:

 

□  Двухцветные (бинарные) — 1 бит на пиксел. Среди двухцветных чаще всего встречаются черно-белые изображения.

□  Полутоновые — градации серого или иного цвета. Например, 256 града­ций (1 байт на пиксел).

□  Цветные изображения. От 2 бит на пиксел и выше. Глубина цвета 16 бит на пиксел (65 536 цветов) получила название High Color, 24 бит на пиксел

                                      

(16,7 млн цветов)— True Color. В компьютерных графических системах используют и большую глубину цвета — 32, 48 и более бит на пиксел.

 В качестве примера рассмотрим растровый рисунок (рис. 1.3). Количество цветов — 256 градаций серого, разрешающая способность — примерно 100 dpi. Отметим, что в книге вы видите печатное изображение, поэтому о количестве цветов и разрешающей способности можно говорить лишь условно.

 

 

Изображения тех же объектов, но для иных параметров растра даны на рис. 1.4 и 1.5.

 

 

 

      Недостаточное количество цветов приводит к появлению лишних контуров на гладких поверхностях цилиндра и шара.

 

 

 

 

Оценка разрешающей способности растра

 

      Глаз человека с нормальным зрением мо­жет различать объекты с угловым разме­ром около одной минуты. Если расстояние до объекта равно R, то можно приблизи­тельно оценить этот размер (dP) как длину дуги, равную Ra (рис. 1.6). Можно пред­положить, что человек различает дискрет­ность растра (шаг) также соответственно этому минимально различимому размеру.

 

 

 

 

 

            Иначе говоря, отдельные точки (пикселы), смещенные менее чем на dP, уже не воспринимаются смещенными. Тогда можно оценить разрешающую спо­собность растра, который не воспринимается как растр, следующей вели­чиной:

 

dpi = 25.4/dP [мм].

 

 Приведем несколько значений dpi для различных R (табл. 1.1).

 

 

 

            Если считать расстояние, с которого человек обычно разглядывает бумажные документы, равным 300 мм, то можно оценить минимальную разрешающую способность, при которой уже не заметны отдельные пикселы, как приблизи­тельно 300 dpi (примерно 0,085 мм). Лазерные черно-белые принтеры пол­ностью удовлетворяют такому требованию.

          Дисплеи обычно рекомендуется разглядывать с расстояния не ближе 0.5 м. В соответствии с приведенной выше оценкой минимальной разрешающей способности расстоянию 0,5 м соответствует около 200 dpi. В современных дисплеях минимальный размер пикселов (пятна) примерно 0,25 мм, что дает 100 dpi — это плохо, например, дисплей 15" по диагонали должен обеспечи­вать не 1024 на 768 пикселов, а вдвое больше. Но на современном уровне техники это пока что невозможно.

 

Примеры изображений

для некоторых растровых устройств

 

Для иллюстрации работы реальных растровых устройств рассмотрим резуль­таты вывода одной и той же картинки. Поскольку в этой книге невозможно показать цветные изображения, то в качестве тестового образца выбран чер­но-белый рисунок, состоящий из текста и простейшей графики. Образец изо­бражен на рис. 1.7 в натуральную величину. Текст ("Строчка текста") набран шрифтом TrueType Times New Roman, размер 8 пунктов. Графика — вектор­ный рисунок из линий минимально возможной толщины. Тестовый образец изготовлен и выводился на устройства с помощью редактора Word 97.

 

Почему именно такой образец? Для того чтобы оценить погрешности вывода, тест следует подобрать так, чтобы устройства работали в режиме, близкому к предельно возможному. Тогда и можно оценить их возможности. Однако за­дача усложняется тем, что проверяются устройства различного класса. Ока­залось, что некоторые устройства почти не в состоянии удовлетворительно отобразить даже такой простой образец, а некоторые устройства продемонст­рировали значительный запас точности — для них нужны другие тесты.

После вывода образца на графическом устройстве соответствующее растро­вое изображение оцифровывалось сканером с оптическим разрешением 600x600 dpi (2400x2400 в режиме интерполяции). Отсканированные изобра­жения в увеличенном масштабе приведены ниже. Безусловно, погрешность сканера существенна для изображений, полученных устройствами, обладаю­щих соизмеримым, а также более высоким разрешением. Однако полученные здесь результаты не следует рассматривать как точные измерения. Здесь ста­вилась иная цель — проиллюстрировать геометрические свойства растров (расположение, форму и размеры отдельных пикселов) для устройств раз­личного типа, показать наиболее характерные особенности отображения.

Для сравнения были выбраны графические устройства, которые можно встретить практически в любом современном офисе, — это дисплеи и прин­теры.

           Торговые марки устройств не приводятся. Приведенные образцы не следует рассматривать как тестирование или рекламу.

 

 

 

 

 

 

        Изображение, полученное на экране, было сфотографировано и оцифровано. Картинка имеет множество градаций серого цвета, которые здесь, к сожале­нию, не могут быть точно воспроизведены. Для печати иллюстраций на бу­маге (в том числе и для этой книги) используется дизеринг — имитация от­тенков серого цвета многими близко расположенными черными точками.

       Поэтому при просмотре с помощью лупы данная картинка "рассыпается" на отдельные мелкие точки. На рис. 1.9 показано увеличенное изображение фрагмента рис. 1.8. Здесь уже отчетливо видна шестиугольная структура растра, характерная для цветного кинескопа.

 

 

      Растровый характер изображения монитора на жидких кристаллах (рис. 1.10) выражен значительно четче, нежели монитора на электронно-лучевой трубке. Четкость отдельных пикселов обуславливает заметный лестничный эффект наклонных линий (рис. 1.11).

 

 

 

 

 

 

 

 

Качество печати для матричных принтеров определяется погрешностями ме­ханики и износом красящей ленты. Здесь красящая лента выработала свой ресурс наполовину, поэтому изображение получилось как бы "в градациях серого цвета". Кроме того, полутоновый характер изображение имеет и из-за того, что чернота уменьшается на краях впадин оттиска игл (рис. 1.13). Во­обще говоря, матричные принтеры могут печатать и намного лучше. Даже испытуемый принтер может печатать с разрешением 240x216 dpi. Однако драйвер для Windows позволяет установить только 240x144 dpi, а качество практически не улучшается по сравнению с 120x144 dpi (вероятно из-за из­носа механики).

 

 

 

 

      Лазерные принтеры, как правило, безупречно отрабатывают свое паспортное разрешение. Немаловажным является то, что качество печати стабильно и практически не зависит от качества бумаги. Принтеры данного типа вне кон­куренции (по крайней мере, в настоящее время) по быстродействию и каче­ству черно-белой печати среди других типов принтеров. Более дорогие моде­ли лазерных принтеров обладают в несколько раз большим разрешением, при этом качество печати, как правило, возрастает соответственно паспортному разрешению. Оптического разрешения сканера в 600 dpi (2400 dpi интерпо­ляция) уже не достаточно, чтобы точно отобразить фрагмент растра в мель­чайших деталях (рис. 1.15).

 

 

 

 

 

 

      Струйные принтеры достаточно редко соответствуют заявляемой паспортной разрешающей способности. Данная модель, возможно, исключение из обще­го правила. В черно-белом режиме здесь фактически продемонстрирована точность печати на уровне 600 dpi лазерного принтера (рис. 1.17). Многие другие струйные принтеры с рекламируемым разрешением более тысячи dpi работают еще хуже. И это при печати на специальной бумаге.

 

 

Достоинством струйных принтеров является то, что это относительно недо­рогое устройство для цветной печати. С приемлемым качеством для цветной фотографии работают струйные фотопринтеры. Технология струйной печати также используется и в достаточно популярных крупноформатных (АЗ-А1) цветных растровых принтерах.

 

1.3.Цвет

 

Для изучения способов представления цвета в компьютерных системах вна­чале рассмотрим некоторые общие аспекты.

Цвет— это один из факторов нашего восприятия светового излучения. Све­том и цветом исследователи интересовались давно. Одним из первых вы­дающихся достижений в этой области являются опыты Исаака Ньютона в 1666 г. по разложению белово света на составляющие. Ранее считалось, что белый свет является простейшим. Ньютон опроверг это. Суть опытов Ньюто­на такова. Белый луч света (использовался солнечный свет) направлялся на стеклянную треугольную призму. Пройдя сквозь призму, луч преломлялся и, будучи  направленный  на  экран,  давал  в  результате  цветную  полосу — спектр. В спектре присутствовали все цвета радуги, плавно переходящие друг в друга. Эти цвета уже не раскладывались на составляющие. Ньютон разбил весь спектр на семь участков, соответствующих ярко выраженным различным цветам. Он считал эти семь цветов основными — красный, оран­жевый, желтый, зеленый, голубой, синий и фиолетовый. Почему именно семь? Некоторые объясняют это убежденностью Ньютона в мистических свойствах семерки [10].

Вторая часть опытов Ньютона такова. Лучи, прошедшие сквозь призму, на­правлялись на вторую призму, с помощью которой удалось вновь получить белый свет. Таким образом, было доказано, что белый цвет является смесью множества различных цветов. Семь основных цветов Ньютон расположил по кругу (рис. 1.18).

                                                  

 

                                                    

            Ньютон предположил, что некоторый цвет образуется путем смешивания ос­новных цветов, взятых в определенной пропорции. Если в точках на границе цветового круга, соответствующих основным цветам, расположить грузы, пропорциональные количеству каждого цвета в смеси, то суммарный цвет будет соответствовать точке центра тяжести. Белый цвет соответствует цен­тру цветового круга [15].

Последующие исследования цвета выполняли Томас Юнг, Джемс Максвелл и другие ученые. Исследования человеческого световосприятия являлись достаточно важной задачей, но основные усилия были направлены на изуче­ние объективных свойств света. В настоящее время физики полагают, что свет имеет двойственный характер. С одной стороны, свет представляется в виде потока частиц (еще Ньютон выдвинул так называемую корпускулярную теорию). С другой стороны, свету присущи волновые свойства. С помощью волновой теории, выдвинутой Христианам Гюйгенсом в 1678 году, были объяснены многие свойства света, в частности законы отражения и прелом­ления [30].

          Рассмотрим цвет с позиций волновых свойств. Одной из волновых характе­ристик света является длина волны — расстояние, которое проходит волна в течение одного периода колебания. Монохроматическим называется излуче­ние, спектр которого состоит из единственной линии, соответствующей единственной длине волны. Радуга, полученная Ньютоном, состоит из бес­численного множества монохроматических излучений (равно как и радуга, наблюдаемая нами после дождя). Достаточно качественным источником мо­нохроматического излучения является лазер — именно поэтому его луч легко сфокусировать. Цвет монохроматического излучения определяется длиной волны. Диапазон длин волн для видимого света простирается от 380—400 нм (фиолетовый) до 700—780 нм (красный). В указанном диапазоне чувстви­тельность человеческого зрения непостоянна. Наибольшая чувствительность наблюдается для длин волн, соответствующих зеленому цвету (рис. 1.19).

 

 

Как показал Ньютон, белый цвет можно представить смесью всех цветов ра­дуги. Иными словами, спектр белого является непрерывным и равномер­ным — в нем присутствуют излучения всех длин волн видимого диапазона.

Для характеристики цвета используются следующие атрибуты:

□  Цветовой тон. Можно определить преобладающей длиной волны в спек­тре излучения. Цветовой тон позволяет отличать один цвет от другого — например, зеленый от красного, желтого и других.

 Яркость. Определяется энергией, интенсивностью светового излучения. Выражает количество воспринимаемого света.

□  Насыщенность или чистота тона. Выражается долей присутствия белого цвета. В идеально чистом цвете примесь белого отсутствует. Если, напри­мер, к чистому красному цвету добавить в определенной пропорции бе­лый цвет (у художников это называется разбелом), то получится светлый бледно-красный цвет.

Указанные три атрибута позволяют описать все цвета и оттенки. То, что ат­рибутов именно три, является одним из проявлений трехмерных свойств цве­та. Как мы увидим далее, имеются и другие трехмерные системы описания цвета.

Мы попытались объяснить цвет с помощью длин волн и спектра. Как оказы­вается, это неполное представление о цвете, а вообще говоря, оно неправиль­но. Во-первых, глаз человека — это не спектроскоп. Зрительная система че­ловека, скорее всего, регистрирует не длину волны и спектр, а формирует ощущения иным способом. Во-вторых, без учета особенностей человеческого восприятия невозможно объяснить смешение цветов. Например, белый цвет действительно можно представить равномерным спектром смеси бесконеч­ного множества монохроматических цветов. Однако тот же белый цвет мож­но создать смесью всего двух специально подобранных монохроматических цветов (такие цвета называются взаимно дополнительными). Во всяком слу­чае, человек воспринимает эту смесь как белый цвет. А можно получить бе­лый цвет, смешав три или более монохроматических излучений. Излучения, различные по спектру, но дающие один и тот же цвет, называются метамврными [15].

Необходимо также уточнить, что понимается под цветовым тоном. Рассмот­рим два примера спектра (рис. 1.20).         

Анализ спектра, изображенного на рис. 1.20 (а), позволяет утверждать, что излучение имеет светло-зеленый цвет, поскольку четко выделяется одна спектральная линия на фоне равномерного спектра белого. А какой цвет (цветовой тон) соответствует спектру варианта (б)? Здесь нельзя выделить в спектре преобладающую составляющую, поскольку присутствуют красная и зеленая линии одинаковой интенсивности. По законам смешения цветов это может дать оттенок желтого цвета, однако в спектре нет соответствующей линии монохроматического желтого. Поэтому под цветовым тоном следует понимать цвет монохроматического излучения, соответствующего суммар­ному цвету смеси. Впрочем, как именно "соответствующего" — это также требует уточнения.

 

 

Наука, которая изучает цвет и его измерения, называется колориметрией. Она описывает общие закономерности цветового восприятия света челове­ком [1,10, 15].

Одними из основных законов колориметрии являются законы смешивания цветов. Эти законы в наиболее полном виде были сформулированы в 1853 году немецким математиком Германом Грассманом:

1. Цвет трехмерендля его описания необходимы три компоненты. Лю­бые четыре цвета находятся в линейной зависимости, хотя существует неограниченное число линейно независимых совокупностей из трех цветов.

Иными словами, для любого заданного цвета (Ц) можно записать такое цве­товое уравнение, выражающее линейную зависимость цветов:

 

 

            где Ц1 Ц2 Ц3 — некоторые базисные, линейно независимые цвета, коэффи­циенты к1, k2 и к3 указывают количество соответствующего смешиваемого цвета. Линейная независимость цветов Ц1 Ц2, Ц3 означает, что ни один из них не может быть выражен взвешенной суммой (линейной комбинацией) двух других.

        Первый закон можно трактовать и в более широком смысле, а именно, в смысле трехмерности цвета. Необязательно для описания цвета применятьсмесь других цветов, можно использовать и другие величины — но их обяза­тельно должно быть три.

2.   Если в смеси трех цветовых компонент одна меняется непрерывно, в то время, как две другие остаются постоянными, цвет смеси также изме­няется непрерывно.

3.  Цвет смеси зависит только от цветов смешиваемых компонент и не за­висит от их спектральных составов.

Смысл третьего закона становится более понятным, если учесть, что один и тот же цвет (в том числе и цвет смешиваемых компонент) может быть полу­чен различными способами. Например, смешиваемая компонента может быть получена, в свою очередь, смешиванием других компонент.

Аддитивная цветовая модель RGB

 

Эта модель используется для описания цветов, которые получаются с по­мощью устройств, основанных на принципе излучения. В качестве основных цветов выбран красный (Red), зеленый (Green) и синий (Blue). Иные цвета и оттенки получаются смешиванием определенного количества указанных ос­новных цветов.

 

        Вкратце история системы RGB такова. Томас Юнг (1773—1829) взял три фо­наря и приспособил к ним красный, зеленый и синий светофильтры. Так бы­ли получены источники света соответствующих цветов. Направив на белый экран свет этих трех источников, ученый получил такое изображение (рис. 1.21). На экране свет от источников давал цветные круги. В местах пе­ресечения кругов наблюдалось смешивание цветов. Желтый цвет получался смешиванием красного и зеленого, голубой — смесь зеленого и синего, пур­пурный — синего и красного, а белый цвет образовывался смешением всех

трех основных цветов. Некоторое время спустя, Джемс Максвелл (1831—1879) изготовил первый колориметр, с помощью которого человек мог зрительно сравнивать монохроматический цвет и цвет смешивания в заданной пропор­ции компонент RGB. Регулируя яркость каждой из смешиваемых компонент, можно добиться уравнивания цветов смеси и монохроматического излучения. Это описывается следующим образом:

                                                       

где r, g и b — количество соответствующих основных цветов.

Соотношение коэффициентов г, g и b Максвелл наглядно показал с помощью треугольника, впоследствии названного его именем [1]. Треугольник Мак­свелла является равносторонним, в его вершинах располагаются основные цвета— R, G и В (рис. 1.22). Из заданной точки проводятся линии, перпен­дикулярные сторонам треугольника. Длина каждой линии и показывает соот­ветствующую величину коэффициента r, g или b. Одинаковые значения r=g=b имеют место в центре треугольника и соответствуют белому цвету. Следует также отметить, что некоторый цвет может изображаться как внут­ренней точкой такого треугольника, так и точкой, лежащей за его пределами. В последнем случае это соответствует отрицательному значению соответст­вующего цветового коэффициента. Сумма коэффициентов равна высоте тре­угольника, а при высоте, равной единице, — r+g+b = 1.

В качестве основных цветов Максвелл использовал излучения с такими дли­нами волн— 630, 528 и 457 нм.

К настоящему времени система RGB является официальным стандартом. • Решением Международной Комиссии по Освещению — МКО (CIE — Соmmision International de 1'Eclairage) в 1931 году были стандартизованы основ­ные цвета, которые было рекомендовано использовать в качестве R, G и В. Это монохроматические цвета светового излучения с длинами волн соответ­ственно:

R—700 нм; G — 546.1 нм; В — 435.8 нм.

            Красный цвет получается с помощью лампы накаливания с фильтром. Для получения чистых зеленого и синего цветов используется ртутная лампа. Также стандартизировано значение светового потока для каждого основного цвета [ 1].

                Еще одним важным параметром для системы RGB является цвет, получае­мый смешением трех компонент в равных количествах. Это белый цвет. Ока­зывается, что для того, чтобы смешиванием компонент R, G и В получить белый цвет, яркости соответствующих источников не должны быть равны друг другу, а находиться в пропорции

 

           

Если расчеты цвета производятся для источников излучения с одинаковой яркостью, то указанное соотношение яркостей можно учесть соответствую­щими масштабными коэффициентами [15].

 

                         

 

            Теперь рассмотрим другие аспекты. Цвет, создаваемый смешиванием трех основных компонент, можно представить вектором в трехмерной системе координат R, G и В, изо­браженной на рис. 1.23. Черному цвету соот­ветствует центр координат,— точка (0, 0, 0). Белый цвет выражается максимальным значе­нием компонент. Пусть это максимальное значение вдоль каждой оси равно единице. Тогда белый цвет— это вектор (1, 1, 1). Точки, лежащие на диагонали куба от черного к белому, соответствуют равным значениям: Ri = Gi = Вi. Это градации серо­го — их можно считать белым цветом различной яркости. Вообще говоря, если все компоненты вектора (г, g, b) умножить на одинаковый коэффициент (к = 0...1), то цвет r, kg, kb) сохраняется, изменяется только яркость. По­этому, для анализа цвета важно соотношение компонент. Если в цветовом уравнении

 

            Это уравнение выражает векторы цвета , g b), лежащие в единичной плоскости r'+g'+b' = 1. Иными словами, мы перешли от куба к треугольнику Максвелла.

          В ходе колориметрических экспериментов были определены коэффициенты (r', g', b), соответствующие чистым монохроматическим цветам. Простейший колориметр можно представить как призму из белого гипса, грани которой освещают источниками света. На левую грань направлен источник чистого монохроматического излучения, а правая грань освещается смесью трех ис­точников RGB. Наблюдатель видит одновременно две грани, что позволяет фиксировать равенство цветов (рис. 1.24).

 

 

 

Результаты экспериментов можно изобразить графически (рис. 1.25).

Как видим, коэффициенты г', g' и b' могут быть и положительными, и отри­цательными. Что это означает? То, что некоторые монохроматические цвета не могут быть представлены суммой компонент R, G и В. Но как отнять то, чего нет? Для уравнивания цвета пришлось добавить к монохроматическому излучению одну из компонент R, G или В. Например, если монохроматическое излучение для некоторого значения Я разбавлялось красным, то это можно выразить так:

                       

          Как оказалось, ни один цвет монохроматического излучения (за исключени­ем самих цветов R, G и В) не может быть представлен только положитель­ными значениями коэффициентов смешивания. Это наглядно можно изобра­зить с помощью цветового графика, построенного на основе треугольника Максвелла (рис. 1.26). Верхняя часть кривой линии соответствует чистым монохроматическим цветам, а нижняя линия— от 380 до 780 нм-— пред­ставляет так называемые пурпурные цвета (смесь синего и красного), которые не являются монохроматическими. Точки, лежащие внутри контура кривой, соответствуют реальным цветам, а вне этого контура— нереальным цветам.    Точки внутри треугольника соответст­вуют неотрицательным значениям ко­эффициентов r g' и b' и представляют цвета, которые можно получить смеши­ванием компонент RGB.

 

R

Таким образом, система RGB имеет неполный цветовой охват— некоторые насыщенные цвета не могут быть представлены смесью указанных трех ком­понент. В первую очередь это цвета от зеленого до синего, включая все от­тенки голубого — они соответствуют левой ветви кривой цветового графика. Еще раз подчеркнем, что речь здесь идет о насыщенных цветах, поскольку, например, ненасыщенные голубые цвета смешиванием компонент RGB по­лучить можно. Несмотря на неполный охват, система RGB широко использу­ется в настоящее время — в первую очередь, в цветных телевизорах и дис­плеях компьютеров. Отсутствие некоторых оттенков цвета не слишком за­метно.

Еще одним фактором, способствующим популярности системы RGB, явля­ется ее наглядность — основные цвета находятся в трех четко различимых участках видимого спектра.

           Кроме того, одной из гипотез, объясняющих цветовое зрение человека, явля­ется трехкомпоиентная теория, которая утверждает, что в зрительной сис­теме человека есть три типа светочувствительных элементов. Один тип эле­ментов реагирует на зеленый, другой тип — на красный, а третий тип — насиний цвет. Такая гипотеза высказывалась еще Ломоносовым [15], ее обос­нованием занимались многие ученые, начиная с Т. Юнга. Впрочем, трехкомпонентная теория не является единственной теорией цветового зрения чело­века [1, 10, 15].

 

Цветовая модель CMY

 

Используется для описания цвета при получении изображений на устройст­вах, которые реализуют принцип поглощения (вычитания) цветов. В первую очередь она используется в устройствах, которые печатают на бумаге. Назва­ние данной модели составлено из названий основных субтрактивных цве­тов — голубого (Cyan), пурпурного (Magenta) и желтого (Yellow) (рис. 1.27).

 

Для того чтобы разобраться с поглощением цветов, рассмотрим рис. 1.28.

 

Нанесение желтой краски на белую бумагу означает, что поглощается отра­женный синий цвет. Голубая краска поглощает красный цвет, пурпурная краска — зеленый.

            Комбинирование красок позволяет получить цвета, которые остались — зе­леный, красный, синий и черный. Черный цвет соответствует поглощению всех цветов при отражении (рис. 1.29).

 

 

 

На практике добиться черного смешиванием сложно из-за неидеальности красок, поэтому в принтерах используют еще и краску черного цвета (blасК). Тогда модель называется CMYK.

Необходимо также отметить, что не всякие краски обеспечивают указанное выше вычитание цветов CMY. Подробнее об этом в [10].

В табл. 1.2 представлены некоторые цвета в моделях RGB и CMY.

 

 

 

 

            Здесь считается, что компоненты кодируются числами в диапазоне от 0 до 1. Для иного диапазона чисел можно записать соответствующие соотношения.

 

Другие цветовые модели

 

          Для решения проблемы отрицательных коэффициентов, которая имеет место для модели RGB, в 1931 году Международной Комиссией по Освещению (CIE) была принятая колориметрическая система XYZ (рис. 1.30). В системе МКО XYZ в качестве основных цветов были приняты также три цвета, одна­ко они являются условными, нереальными [1,15].

         Рассмотренные выше цветовые модели так или иначе используют смешива­ние некоторых основных цветов. Теперь рассмотрим цветовую модель, кото­рую можно отнести к иному, альтернативному типу.

В модели HSV цвет описывается следующими параметрами — цветовой тон Н (hue), насыщенность S (saturation), яркость, светлота V (value). Значение Н измеряется в градусах от 0 до 360, поскольку здесь цвета радуги распола­гаются по кругу в таком порядке — красный, оранжевый, желтый, зеленый, голубой, синий, фиолетовый (известна поговорка "каждый охотник желает знать, где сидят фазаны"). Значения S и V находятся в диапазоне (0...1).

Приведем примеры кодирования цветов для модели HSV (рис. 1.31). При S=0 (то есть на оси V) — серые тона. Значение V=0 соответствует черному цвету. Белый цвет кодируется как S=0, V=l. Цвета, расположенные по кругу напро­тив друг друга, то есть отличающиеся по Н на 180 градусов, являются допол­нительными [28]. Задание цвета с помощью параметров HSV достаточно час­то используется в графических системах, причем обычно показывается раз­вертка конуса.

 

Существуют и другие цветовые модели, построенные аналогично HSV, на­пример, модель HLS (Hue, Lighting, Saturation) также использует цветовой конус.

В [42] есть сведения о цветовой модели CIE L*a*b*, которая была принятая МКО.

Все вышеперечисленные цветовые модели описывают цвет тремя парамет­рами. Они описывают цвет в достаточно широком диапазоне. Теперь рас­смотрим цветовую модель, в которой цвет задается одним числом, но уже для ограниченного диапазона цветов (оттенков).

На практике часто используются черно-белые (серые) полутоновые изобра­жения. Серые цвета в модели RGB описываются одинаковыми значениями компонентов, то есть ri = gi = bi. Таким образом, для серых изображений нет необходимости использовать тройки чисел — достаточно и одного числа. Это позволяет упростить цветовую модель. Каждая градация определяетсяяркостью Y. Значение Y=0 соответствует черному цвету, максимальное зна­чение Y — белому.

В качестве примера рассмотрим преобразование цветных изображений, пред­ставленных в системе RGB, в градации серого (подобно тому, как показыва­ются цветные фильмы на черно-белом экране телевизора). Для этого можно воспользоваться соотношением

 

 

где коэффициенты при R, G и В учитывают различную чувствительность зре­ния к соответствующим цветам и, кроме того, их сумма равна единице. Оче­видно, что обратное преобразование R=Y, G=Y, B=Y не даст никаких других цветов, кроме градаций серого.

Еще один пример использования различных цветовых моделей. При записи цветных фотографий в графический файл формата JPEG выполняется преоб­разование из модели RGB в модель (Y, Сb, Сr). Это используется для даль­нейшего сжатия объемов информации растрового изображения. При чтении файлов JPEG выполняется обратное преобразование в RGB.

Разнообразие моделей обусловлено различными областями их использова­ния. Каждая из цветовых моделей была разработана для эффективного вы­полнения отдельных операций: ввода изображений, визуализации на экране, печати на бумаге, обработки изображений, сохранения в файлах, колоримет­рических расчетов и измерений. Преобразование одной модели в другую мо­жет привести к искажению цветов изображения.

Кодирование цвета. Палитра

 

Для того чтобы компьютер имел возможность работать с цветными изобра­жениями, необходимо представлять цвета в виде чисел — кодировать цвет. Способ кодирования зависит от цветовой модели и формата числовых дан­ных в компьютере.

Для модели RGB каждая из компонент может представляться числами, огра­ниченными некоторым диапазоном — например, дробными числами от О до 1 либо целыми числами от 0 до некоторого максимального значения. В настоящее время достаточно распространенным является формат True Color, в котором каждая компонента представлена в виде байта, что дает 256 градаций для каждой компоненты: R=0...255, G = 0...255, В = 0...255. Ко­личество цветов составляет 256x256x256 = 16.7 млн (224).

            Такой способ кодирования цветов можно назвать компонентным. В компь­ютере коды изображений True Color представляются в виде троек байтов, либо упаковываются в длинное целое (четырехбайтное) — 32 бита (так, на­пример, сделано в API Windows):

 

С = 00000000 bbbbbbbb gggggggg rrrrrrrr.

 

При работе с изображениями в системах компьютерной графики часто при­ходится искать компромисс между качеством изображения (требуется как можно больше цветов) и ресурсами, необходимыми для хранения и воспро­изведения изображения, исчисляемыми, например, объемом памяти (надо уменьшать количество бит на пиксел).

Кроме того, некоторое изображение само по себе может использовать огра­ниченное количество цветов. Например, для черчения может быть достаточ­но двух цветов, для человеческого лица важны оттенки розового, желтого, пурпурного, красного, зеленого; а для неба— оттенки голубого и серого. В этих случаях использование полноцветного кодирования цвета является избыточным.

При ограничении количества цветов используют палитру, представляющую набор цветов, важных для данного изображения. Палитру можно восприни­мать как таблицу цветов. Палитра устанавливает взаимосвязь между кодом цвета и его компонентами в выбранной цветовой модели.

В качестве примера дадим стандартную палитру дисплейных 16-цветных видеорежимов EGA, VGA (табл. 1.3).

 

 

 

 

Недостатком такой палитры можно считать отсутствие одного из важных цветов— оранжевого. Существуют также иные стандартные палитры, на­пример, 256-цветная для VGA. Компьютерные видеосистемы обычно предос­тавляют возможность программисту установить собственную палитру.

Каждый цвет изображения, использующего палитру, кодируется индексом, который будет определять номер строки в таблице палитры. Поэтому такой способ кодирования цвета называют индексным.                          

Формат файлов

для хранения растровых изображений

 

К настоящему времени известно много форматов файлов для растровых изо­бражений. Здесь мы рассмотрим один из самых популярных форматов, кото­рый обязан своей распространенностью операционной системе Windows — формат BMP.

Общая структура BMP-файла такова:

 

 

 

Количество записей RGBQUAD равно количеству используемых цветов. Па­литра отсутствует, если число бит на пиксел равно 24. Также палитра не нужна и для некоторых цветовых форматов 16 и 32 бит на пиксел.

 

            После палитры (если она есть) в файле BMP записывается растр в виде бито­вого (а точнее, байтового массива). В битовом массиве последовательно за­писываются байты строк растра. Количество байт в строке должно быть кратно четырем, поэтому если количество пикселов по горизонтали не соот­ветствует такому условию, то справа в каждую строку дописывается некото­рое число битов (выравнивание строк на границу двойного слова).

Сжатие изображений в файлах BMP отсутствует, однако подобный формат (Device Independent Bitmap) описания растровых изображений также исполь­зуется и для файлов типа DIB, где применяются простейшие алгоритмы сжа­тия RLE (Run Length Encoding) [61]. Алгоритмы RLE также используются и в других популярных растровых графических форматах, например PCX.

Описание других графических форматов можно найти в литературных ис­точниках, например [2], а также в сети Internet.

 

1.4.Методы улучшения растровых изображений

 

Рассмотрим некоторые из существующих методов улучшения качества изо­бражений, которые основываются на субъективном восприятии разрешаю­щей способности и количества цветов. При одних и тех же значениях техни­ческих параметров устройства графического вывода можно создать иллюзию увеличения разрешающей способности или количества цветов. Причем субъ­ективное улучшение одной характеристики происходит за счет ухудшения другой.

 

Устранение ступенчатого эффекта

 

В растровых системах при невысокой разрешающей способности (меньше 300 dpi) существует проблема ступенчатого эффекта (aliasing). Этот эффект особенно заметен для наклонных линий — при большом шаге сетки растра пиксель образуют как бы ступени лестницы.

           Рассмотрим это на примере отрезка прямой линии. Вообще говоря, растровое изображение объекта определяется алгоритмом закрашивания пикселов, соответствующих площади изображаемого объекта. Различные алгоритмы мо­гут дать существенно отличающиеся варианты растрового изображения од­ного и того же объекта. Можно сформулировать условие корректного закра­шивания следующим образом — если в контур изображаемого объекта попа­дает больше половины площади ячейки сетки растра, то соответствующий пиксел закрашивается цветом объекта (С), иначе— пиксел сохраняет цвет фона ф).

На рис. 1.32 показано растровое изображение толстой прямой линии, на ко­торое для сравнения наложен идеальный контур исходной линии.

 

 

 

         Устранение ступенчатого эффекта называется по-английски antialiasing. Для того чтобы растровое изображение линии выглядело более гладким, можно цвет угловых пикселов "ступенек лестницы" заменить на некоторый оттенок, промежуточный между цветом объекта и цветом фона. Будем вычислять цвет пропорционально части площади ячейки растра, покрываемой идеальным контуром объекта. Если площадь всей ячейки обозначить как S, а часть пло­щади, покрываемой контуром, — Sx, то искомый цвет равен

 

    На рис. 1.33 показано сглаженное растровое изображение, построенное ука­занным выше методом.

 

            Методы получения сглаженных растровых изображений можно разделить на две группы. Первую группу составляют алгоритмы генерации сглаженных изображений отдельных простейших объектов — линий, фигур. Некоторые из таких алгоритмов описаны в [33].

Другую группу методов сглаживания составляют методы обработки уже на­рисованного изображения. Для сглаживания растровых изображений часто используют алгоритмы цифровой фильтрации. Один из таких алгоритмов — локальная фильтрация. Она осуществляется путем взвешенного суммирова­ния яркостей пикселов, расположенных в некоторой окрестности текущего обрабатываемого пиксела. Можно представить себе, что в ходе обработки по растру скользит прямоугольное окно, которое выхватывает пикселы, исполь­зуемые *для вычисления цвета некоторого текущего пиксела. Если окрест­ность симметрична, то текущий пиксел находится в центре окна (рис. 1.34).

 

 

Базовую операцию такого фильтра можно представить так:

 

где Р— значение цвета текущего пиксела, F— новое значение цвета пиксе­ла, К— нормирующий коэффициент, М— двумерный массив коэффициен­тов, который определяет свойства фильтра (обычно этот массив называют маской).

Размеры окна фильтра: (jmax- jmin +1) по горизонтали и (imax imin+1)— по вертикали. При imin , jmin= -1 и imax,jmax = +1 имеем фильтр с окном 3x3, кото­рый часто используется на практике.

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

На рис. 1.35 представлены результаты работы двух вариантов сглаживающе­го нерекурсивного фильтра с окном (маской) 3x3.

 

г.

Значение нормирующего коэффициента здесь выбрано равным сумме эле­ментов маски. Этим обеспечивается сохранение масштаба яркости преобра­зованного растра. Заметьте, что маска — это не матрица, а массив коэффици­ентов, располагающихся соответственно пикселям окна. Средний фильтр можно задать и маской 2x2 — отбросить нулевые коэффициенты.

При сглаживании цветных изображений можно использовать модель RGB и производить фильтрацию по каждой компоненте.

С помощью локальной цифровой фильтрации можно выполнять достаточно разнообразную обработку изображений — повышение резкости, выделение контуров и многое другое [31, 34].

 

 

Дизеринг

 

Хорошо, когда растровое устройство отображения может прямо воссоздавать тысячи цветов для каждого пиксела. Не так давно это было проблемой даже для компьютерных дисплеев (а точнее — для видеоадаптеров). Современные

            растровые, дисплеи достаточно качественно отображают миллионы цветов, благодаря чему без проблем можно отображать цветные фотографии. Но для растровых устройств, которые печатают на бумаге, положение совсем дру­гое. Устройства печати обычно имеют высокую разрешающую способность (dpi), часто на порядок большую, чем дисплеи. Однако нельзя непосредст­венно воссоздать даже сотню градаций серого для пикселов черно-белых фо­тографий, не говоря уже о миллионах цветов. Вы можете возразить, что в любой газете или журнале мы видим иллюстрации. Возьмите лупу и посмот­рите, например, на изображение любой напечатанной фотографии. В боль­шинстве случаев можно увидеть, что оттенки цветов (для цветных изображе­ний) или полутоновые градации (для черно-белых) имитируются комбиниро­ванием, Смесью точек. Чем качественнее полиграфическое оборудование, тем меньше отдельные точки и расстояние между ними.

Иногда отдельные точки на фотографии нельзя различить даже с помощью лупы, что может быть в таких случаях — или нам посчастливилось увидеть печать многими сотнями красок, или разрешающая способность устройства печати очень высокая. Оба варианта пока что не встречаются. Однако, безус­ловно, с течением времени будут изобретены способы печати если не многи­ми тысячами красок (что маловероятно), то хотя бы красками, которые плав­но изменяют свой цвет, или будет изобретена бумага с соответствующими свойствами [51].

Для устройств печати на бумаге проблема количества красок достаточно важна. В полиграфии для цветных изображений обычно используют три цветных краски и одну черную, что в смеси дает восемь цветов (включая черный и белый цвет бумаги). Встречаются образцы печати большим коли­чеством красок — например, карты, напечатанные с использованием восьми красок, однако такая технология печати намного сложнее. Состояние дел с цветной печатью можно оценить также на примере относительно простых офисных принтеров. Недавно появились струйные принтеры с шестью цвет­ными красками вместо трех. В таких принтерах в состав обычных CMYK-красок добавлены бледно-голубая, бледно-пурпурная и бледно-желтая краски (семицветные принтеры). В шестицветных принтерах отсутствует бледно-желтая краска [43]. Увеличение количества красок значительно улучшило качество печати, однако и этого пока явно мало.

Если графическое устройство не способно воссоздавать достаточное количе­ство цветов, тогда используют растрирование — независимо от того, растро­вое это устройство или не растровое. В полиграфии растрирование известно давно [14, 21]. Оно использовалось несколько столетий тому назад для печа­ти гравюр. В гравюрах изображение создается многими штрихами, причем полутоновые градации реализованы или штрихами различной толщины на одинаковом расстоянии, или штрихами одинаковой толщины с переменной густотою расположения. Такие способы используют особенности человече­ского зрения и в первую очередь — пространственную интеграцию. Если достаточно близко расположить маленькие точки различных цветов, то они будут восприниматься как одна точка с некоторым усредненным цветом. Если на плоскости густо расположить много маленьких разноцветных точек, то будет создана визуальная иллюзия закрашивания плоскости некоторым усредненным цветом. Однако если увеличивать размеры точек и (или) рас­стояние между ними, то иллюзия сплошного закрашивания исчезает — включается другая система человеческого зрения, обеспечивающая нашу  способность различать отдельные объекты, подчеркивать контуры.

В компьютерных графических системах часто используют эти методы. Они позволяют увеличить количество оттенков цветов за счет снижения про­странственного разрешения растрового изображения. Иначе говоря — это обмен разрешающей способности на количество цветов. В литературе по компьютерной графике такие методы растрирования получили название dithering (дрожание, разрежение).

Простейшим вариантом дизеринга можно считать создание оттенка цвета парами соседних пикселов.

Если рассмотреть ячейки из двух пикселов (рис. 1.36), то ячейка номер 1 дает оттенок цвета

где С1 и Сг — цвета, которые графическое устройство способно непосредст­венно воспроизвести для каждого пиксела. Числовые значения С, С1 и С2 можно рассчитать в полутоновых градациях или в модели RGB — отдельно для каждой компоненты.

            Пример растра с использованием ячеек из двух пикселов приведен на рис. 1.37. Как видим, для создания промежуточного оттенка С ячейки обра­зовывают вертикальные линии, которые очень заметны. Для того чтобы человек воспринял это как сплошной оттенок, необходимо, чтобы угловой раз­мер ячеек был меньше одной угловой минуты. Можно изменять положения таких ячеек в растре, располагая их, например, по диагонали. Это несколько лучше, но не намного.

 

 

Чаще используют квадратные ячейки больших размеров. Дадим пример яче­ек размером 2 x 2 (рис. 1.38).

Такие ячейки дают 5 градаций, из них три комбинации (1, 2, 3) образуют но­вые оттенки.

 

 

Расчет цвета, соответствующего одной из комбинаций пикселов в ячейке, можно выполнить таким образом. Если пикселы ячейки могут быть только двух цветов 1 и С2), то необходимо подсчитать часть площади ячейки для пикселов каждого цвета. Цвет ячейки (С) можно оценить соотношением

 

                     где S— общая площадь ячейки; Si и S2 — части площади, занятых пикселями цветов С1 и С2 соответственно, причем S1 + S2 = S. Проще всего, когда пик­селы квадратные, а их размер равен шагу размещения пикселов. Примем площадь одного пиксела за единицу. В этом случае площадь, занимаемая пикселями в ячейке, равна их количеству (рис. 1.41).

 

            Для ячейки 5 x 5, изображенной на рис. 1.41, дадим расчет цвета С для неко­торых цветов С1 и С2. Пусть С1 — белый цвет (R1 G1 B 1) = (255, 255, 255), а С2 — черный (R2 G2 B2) = (0, 0, 0), тогда

 

 

 

то есть мы получили светло-серый цвет.

Еще пример. Если С)— желтый (R 1G 1B1 = (255, 255, 0), а С2— красный (R2G2B2) = (255, 0, 0), то С = (255, 204, 0). Это оттенок оранжевого цвета.

Следовательно, если в ячейке размерами пx п использованы два цвета, то с помощью этой ячейки можно получить п2+1 различных цветовых градаций. Две комбинации пикселов — когда все пикселы ячейки имеют цвет С1 или С2 — дают цвет ячейки соответственно С, или С2. Все иные комбинации дают оттенки, промежуточные между С1 и С2.

Можно считать, что ячейки размером пx п образовывают растр с разрешаю­щей способностью в п раз меньшей, чем у исходного растра, а глубина цвета возрастает пропорционально и2. Для характеристики изображений, которые создаются методом дизеринга, используют термин лшшатура растра. Линиатура вычисляется как количество линий (ячеек) на единицу длины — сан­тиметр, миллиметр, дюйм. В последнем случае единицей измерения для линиатуры является lpi (по аналогии с dpi).

Как реализовать метод дизеринга в графической системе? Рассмотрим при­меры преобразования растрового изображения размером pxq с определенной глубиной цвета в другой растр, предназначенный для отображения с по­мощью графического устройства, в котором используется ограниченное ко­личество основных цветов. В таком случае нужно выбрать размеры ячей­ки тxп, которые обеспечивают достаточное количество цветовых градаций. Затем каждый пиксел растра превращается в пиксел растра отображения. Это можно осуществить двумя способами.

Первый способ. Каждый пиксел заменяется ячейкой из m^п пикселов. Это самое точное преобразование по цветам, но размер растра увеличивается и равен mp x nq пикселов.

Второй способ. Размер растра в пикселях не изменяется, если пиксел растра отображения образовывается следующим образом:

1.   Определяем координаты пиксела (х, у) для преобразуемого растра.

2.   Находим цвет пиксела (х, у)

3.   По цвету пиксела находим номер (к) ячейки, наиболее адекватно представляющей этот цвет.

4.   По координатам (х,у) вычисляем координаты пиксела внутри ячейки: хк = х mod т; уk = у mod п.

5.  Находим цвет (С) пиксела ячейки с координатами kyk  )

6.  Записываем в растр отображения пиксел (х,у) с цветом С.

Такой способ можно использовать не для любых вариантов расположения пикселов в ячейках. Конфигурации пикселов должны быть специально раз­работаны для таких преобразований. Одно из требований можно сформули­ровать так. Если ячейки разработаны на основе двух цветов, например, бело­го и черного, а градации изменяются пропорционально номеру ячейки, то необходимо, чтобы ячейка с номером (i) для более темной градации серого содержала бы все черные пикселы ячейки номер (i- 1).

Рассмотрим пример изображения, созданного на основе ячеек 5 Х5.

Для создания такого изображения специально была выбрана небольшая раз­решающая способность, чтобы подчеркнуть структуру изображения. Ячейки образовывают достаточно заметный квадратный растр (рис. 1.42).

 

 

         Для улучшения восприятия изображения можно использовать иное располо­жение ячеек, например, диагональное (рис 1.43).

 

 

 

 

            Диагональное расположение можно получить, если сдвигать четные строки

ячеек (рис. 1.44).

Координаты пикселов ячеек можно вычислять следующим образом:

 

Для, того чтобы получить диагональную структуру растра подобную той, что используется для печати газет, можно использовать квадратное расположе­ние ячеек другого типа (рис. 1.45).

 

 

 

Вы, наверное, уже заметили, что для всех приведенных выше примеров дизе­ринга ячейки образовывают точки переменного размера с постоянным ша­гом. Однако часто используется иной подход— переменная густота распо­ложения точек постоянного размера. Такой способ получил название частот­ной модуляции (ЧМ)'(рис. 1.46).

 

      Положительная черта способа ЧМ — меньшая заметность структуры растра. Однако его использование затруднено в случае, когда размер пикселов боль­ше, чем их шаг. Начиная с определенной густоты, пикселы смыкаются. Кро­ме того, на дискретном растре невозможно обеспечить плавное изменение густоты (частоты), в особенности для ячеек небольшого размера. Рассмотрим пример ячеек 5x5, реализующих ЧМ-дизеринг (рис. 1.47).

 

            Для изображений, созданных методом ЧМ-дизеринг, наблюдается меньшая заметность растровой структуры (рис. 1.48).

 

 

 

Однако при регулярном расположении одинаковых ячеек всегда образовыва­ется текстура, муар, лишние контуры. Одна из важных задач— разработка таких вариантов ячеек, которые предопределяют наименее заметную растро­вую структуру (кроме тех случаев, когда, наоборот, такую структуру нужно подчеркнуть для создания изображения в стиле гравюры). Это довольно сложная задача.

Один из способов создания достаточно качественных изображений — это диффузный дизеринг (diffused dithering). Суть его в том, что ячейки создают­ся случайно (или псевдослучайно). Если для каждой градации создавать слу­чайные ячейки, то даже для фрагмента растра пикселов с постоянным цветом не будут образовываться регулярные структуры. Это соответствует диффуз­ному отражению света от матовой поверхности.

 

1.5.Эволюция компьютерных видеосистем

 

         Компьютерные видеосистемы рассмотрим на примере персональных компь­ютеров класса IBM PC. Первый персональный компьютер фирмы IBM по­явился в 1981 году. Сейчас уже можно сказать, что появление как раз этого компьютера привело к значительному распространению персональных ком­пьютеров. Некоторые особенности архитектуры IBM PC сохранены и по сей день (рис. 1.49).

 

            Одной из таких особенностей, которые выгодно отличали его от других пер­сональных компьютеров, является открытость архитектуры. Это означает гибкие возможности подключения разнообразных устройств, простоту мо­дернизации компьютера. Важным фактором была цена— для IBM PC она была меньшей, чем, например, для компьютеров Apple, которые были лучше по другим показателям (в первую очередь, по графическим возможностям). Кроме того, с самого начала пользователям компьютеров семейства IBM PC были доступны разнообразные средства программирования — миллионы пользователей получили возможность сами разрабатывать программное обеспечение. Все это привело к массовому распространению таких компью­теров, использованию в разнообразных областях.

Важная черта архитектуры персонального компьютера с позиций графики — то, что контроллер видеосистемы (видеоадаптер) расположен рядом с про­цессором и оперативной памятью, так как подключен к системной шине че­рез скоростную локальную шину. Это дает возможность быстро вести обмен данными между оперативной памятью и видеопамятью. Для вывода графиче­ских изображений, в особенности в режиме анимации, нужна самая высокая скорость передачи данных. В отличие от этого в больших компьютерах (мэйнфреймах) данные к дисплеям передавались через интерфейс канала ввода-вывода, который работает намного медленнее, чем системная шина. Большие компьютеры, как правило, работают со многими дисплеями, распо­ложенными на значительном расстоянии.

         Первый компьютер IBM PC был оснащен видеоадаптером MDA (Mono­chrome Display Adapter). Видеосистема была предназначена для работы в тек­стовом режиме — отображалось 25 строк по 80 символов в каждой строке.

            Год спустя небольшая фирма Hercules выпустила видеоадаптер Hercules Graphic Card. Он поддерживал также и графический черно-белый режим

720x348.

Следующим шагом был видеоадаптер CGA (Color Graphic Adapter). Это пер­вая цветная модель для IBM PC. Адаптер CGA позволял работать в цветном текстовом или графическом режимах. Далее мы будем рассматривать только графические режимы видеоадаптеров. Графических режимов для CGA было два: черно-белый 640x200 и цветной 320х200. В цветном режиме можно бы­ло отображать только четыре цвета одновременно (2 бита на пиксел).

В 1984 году появился адаптер EGA (Enhanced Graphic Adapter). Это было значительное достижение для персональных компьютеров этого типа. По­явился графический 16-цветный видеорежим 640х350 пикселов. Цвета мож­но выбирать из палитры 64 цветов. В это время уже получили распростране­ние компьютерные игры с более или менее качественной графикой и графи­ческие программы для работы. Однако шестнадцати цветов явно мало для показа изображений типа фотографий, а разрешающая способность недоста­точна для графических пакетов типа САПР. Кроме того, видеорежим 640x350 имеет еще один недостаток — различная разрешающая способность по горизонтали и вертикали — "не квадратные пикселы".

В 1987 году появились видеоадаптеры MCGA (Multi-Color Graphic Array) и VGA (Video Graphic Array). Они обеспечивали уже 256-цветные видеорежимы.

            Более совершенным был адаптер VGA — он стал наиболее популярным. Адаптер VGA имел 256-цветный графический видеорежим с размерами рас­тра 320x200. Цвета можно выбирать из палитры в 256 тысяч цветов. Это дало возможность полностью удовлетворить потребности отображения полутоно­вых черно-белых фотографий. Цветные фотографии отображались достаточ­но качественно, однако 256 цветов мало, поэтому в компьютерных играх и графических пакетах активно использовался дизеринг. Кроме того, режим 320x200 тоже имеет различную разрешающую способность по горизонтали и вертикали. Для мониторов, которые используются в персональных компью­терах типа IBM PC, необходимо, чтобы количество пикселов по горизонтали и вертикали была в пропорции 4:3. То есть, не 320x200, а 320x240. Такого документированного видеорежима для VGA нет, однако в литературе [39] приведен пример, как создать 256-цветный видеорежим 320х240 на видео­системе VGA. Можно запрограммировать видеоадаптер, записав в его регистры, соответствующие значения, и получить видеорежим "X" (не путать с XGA). Несколько лет тому назад автор этой книги проверял сведения, приве­денные в статье [39], и может подтвердить, что действительно, "X — видеорежим" 256 цветов 320x240 может быть установлен для любой видеосистемы VGA (во всяком случае, не было найдено ни одной, где этого делать  нельзя).                                                                                                                            Видеоадаптер VGA также имеет 16-цветный видеорежим 640х480. Это соответствует "квадратным пикселем". Рост разрешающей способности в сравнении с EGA не очень большой, но ощутимый, что дает новый толчок для развития графических программ на персональных компьютерах.                           

Дальнейшее развитие видеоадаптеров для компьютеров типа IBM PC связано    с повышением разрешающей способности и количества цветов. Можно отметить видеосистему ЮМ 8514, которая была предназначена для работы с пакетами САПР. Стали появляться видеоадаптеры различных фирм, которые обеспечивали на первых порах видеорежимы 800*600, а потом и 1024*768 цветов при 16-ти цветах, и видеорежимы 640x480, 800x600 и больше для 256 цветов. Эти видеоадаптеры стали называть SuperVGA. Чуть позже появился видеоадаптер IBM XGA.

Первой достигла глубины цвета в 24 бит фирма Targa с видеоадаптером Targa24, что позволило получить на персональных компьютерах IBM PC видеорежим True Color. Такое достижение можно считать началом профес­сиональной графики на персональных компьютерах этого типа. Там, где ра­нее использовались графические рабочие станции или персональные компь­ютеры Apple Macintosh, отныне постепенно переходили на более дешевые компьютеры IBM PC. Одной из таких областей является компьютерное на­стольное издательство.

Сейчас на компьютерах ЮМ PC с процессором Pentium используется много типов видеоадаптеров. Все видеосистемы растрового типа. Некоторые из них позволяют устанавливать глубину цвета 32 бит на пиксел при размерах рас­тра 1600x1200 и более. Существуют стандарты на видеорежимы, установ­ленные VESA (Video Electronic Standards Association).

                Параметры отображения обусловливаются не только моделью видеоадапте­ра, но и объемом установленной видеопамяти. Видеопамять персонального компьютера (VRAMVideo RAM) хранит растровое изображение, которое показывается на экране монитора. Изображение на мониторе полностью со­ответствует текущему содержанию видеопамяти. Видеопамять постоянно сканируется с частотой кадров монитора. Запись новых данных в видеопа­мять немедленно изменяет изображение на мониторе. Необходимый объем видеопамяти вычисляется как площадь растра экрана в пикселях, умножен­ная на количество бит (или байтов) на пиксел. Например, для 24-битного видеорежима 1024x768 нужна видеопамять 24x1024x768 = 18 874 368 бит = = 2.25 Мбайт.

В видеоадаптерах первых образцов количество видеопамяти вычислялось в килобайтах, например, адаптер CGA имел 16 Кбайт [6, 29]. В современных видеоадаптерах счет идет на мегабайты. Как правило, объем видеопамяти кратен степени двойки-— 1, 2, 4, 8 Мбайт, встречаются также видеоадаптеры с 16 Мбайт и более. Наблюдается тенденция увеличения объемов видеопамя­ти — соответственно увеличению разрешающей способности и глубины цве­та видеосистем. В видеопамяти могут храниться несколько кадров изображе­ния — это может быть использовано при анимации. Кроме того, в некоторых видеоадаптерах предусмотрена возможность использования видеопамяти для хранения другой информации, например Z-буфера, растров текстур.

Адреса, по которым процессор обращается к видеопамяти, находятся в об­щем адресном пространстве. Например, для видеорежимов VGA 256 цветов 320 х200, 16 цветов 640 х480, а также для некоторых других, адрес первого байта видеопамяти равен А000:0000 (сегмент  смещение) или А0000 (абсо­лютный адрес) (рис. 1.50).

 

 

 

 

 

Для некоторых видеорежимов (старых образцов) используется другой адрес, например, В800:0000 для CGA 320x200. Современные видеоадаптеры обыч­но поддерживают видеорежимы, которые использовались ранее. Это делает­ся для обеспечения возможности функционирования старых программ. Каж­дый видеорежим имеет собственный номер (код).

Кроме физической организации памяти компьютера— в виде одномерного вектора байтов в общем адресном пространстве, необходимо учитывать ло­гическую организацию видеопамяти. Следует отметить, что названия "физи­ческая" и "логическая" организация могут означать разные вещи для различ­ных уровней рассмотрения. Например, если говорить о физической органи­зации памяти, то она в микросхемах выглядит совсем не как одномерный вектор байтов, а как матрица бит. Логическая организация видеопамяти зави­сит от видеорежима. В качестве примера на рис. 1.51 приведен видеорежим VGA 256 цветов 320x200 (его код 13h).

 

 

            В этом видеорежимё используются четыре массива байтов памяти. Каждый массив назван битовой плоскостью, для каждого пиксела используются оди­наковые биты данных различных плоскостей. Каждая битовая плоскость имеет 80 байтов в одной строке. Плоскости имеют одинаковый адрес в памя­ти, для доступа к отдельной плоскости необходимо устанавливать индекс плоскости в соответствующем регистре видеоадаптера.         Подобный способ организации видеопамяти используется во многих других видеорежимах, он позволяет, например, быстро копировать массивы пикселов.

Для сохранения нескольких кадров изображения в некоторых видеорежимах предусматриваются отдельные страницы видеопамяти с одинаковой логиче­ской организацией. Тогда можно изменять стартовый адрес видеопамяти — это приводит к сдвигу изображения на экране. Во всех графических видео-режимах стартовый адрес видеопамяти соответствует левому верхнему пик­селу на экране. Поэтому координатная система с центром координат (0,0) в левом верхнем углу растра часто используется в качестве основной (или устанавливается по умолчанию) во многих графических интерфейсах про­граммирования, например, в API Windows.

Обмен данными по системной шине для видеосистемы обеспечивают про­цессор, видеоадаптер и контроллер локальной шины. До недавнего времени для подключения видеоадаптеров использовалась локальная шина PCI (Peripheral Component Interconnect local bus). Шина PCI предназначена не только для графики, она является стандартом подключения самых разнооб­разных устройств, например, модемов, сетевых контроллеров, контроллеров интерфейсов. Эта шина— 32-битная, работает на частоте 33 МГц, скорость обмена до 132 Мбайт/с.

В настоящее время видеоадаптеры подключаются через локальную шину AGP (Accelerated Graphics Port). Разрядность — 64 бит. На частоте 66 МГц обеспечивала скорость обмена 528 Мбайт/с. Сейчас AGP работает и на более высоких частотах. Шина AGP была разработана для повышения скорости обмена данными между видеоадаптером и оперативной памятью в сравнении с возможностями шины PCI. Это позволяет достичь большей частоты кадров при работе графических ЗD-акселераторов. Высокая скорость обмена с опе­ративной памятью также позволяет хранить в этой памяти растровые тексту­ры (ранее для этого часто использовалась видеопамять, однако она обычно имеет недостаточную для этого емкость). Наличие AGP-порта также приво­дит к возрастанию быстродействия компьютера в целом благодаря уменьше­нию нагрузки на шину PCI, что дает возможность эффективнее использовать последнюю для работы с сетью, мультимедиа.

Современные видеоадаптеры представляют собой сложные электронные уст­ройства. Кроме видеопамяти, на плате видеоадаптера (сейчас его часто назы­вают видеокартой) располагается мощный специализированный графический процессор, который по сложности уже приближается к центральному про­цессору. Кроме визуализации содержимого видеопамяти графический про­цессор видеоадаптера выполняет как относительно простые растровые опе­рации — копирование массивов пикселов, манипуляции с цветами пикселов, так и более сложные. Там, где ранее использовался исключительно цен­тральный процессор, в данное время все чаще применяется графический процессор видеоадаптера, например, для выполнения операций графического вывода линий, полигонов. Первые графические процессоры видеоадаптеров выполняли преимущественно операции рисования плоских элементов. Со­временные графические процессоры выполняют уже много базовых опера­ций ЗD-графики, например, поддержку Z-буфера, наложение текстур и тому подобное. Видеоадаптер выполняет эти операции аппаратно, что позволяет намного ускорить их в сравнении с программной реализацией данных операций центральным процессором. Так появился термин графические акселе­раторы. Быстродействие таких видеоадаптеров часто измеряется в количест­ве графических элементов, которые рисуются за одну секунду. Современные графические акселераторы способны рисовать миллионы треугольников за секунду. Возможности графических акселераторов сейчас активно использу­ются разработчиками компьютерных игр.

Широка номенклатура видеоадаптеров для персональных компьютеров. Не­сколько примеров. Видеоадаптеры Matrox (качественная двумерная графика), NVidia GeForce (игровые ЗD-акселераторы), 3Dlabs Wildcat (для профессио­нального ЗD-моделирования).

Использование программистами графических возможностей видеосистемы может осуществляться различно. Во-первых, простейшие операции, такие как определение графического видеорежима, вывод пиксела на экран и неко­торые другие, поддерживаются BIOS. Во-вторых, можно использовать функ­ции операционной системы. Различные операционные системы могут пре­доставлять различные возможности. Например, в MS-DOS графических функций почти не было, однако программисту был разрешен свободный дос­туп ко всем аппаратным ресурсам компьютера. В быстродействующих гра­фических программах часто использовался непосредственный доступ к ви­деопамяти. В отличие от этого, операционная система Windows запрещает прикладным программам непосредственный доступ к аппаратным ресурсам, однако можно применять несколько сотен графических функций операцион­ной системы — интерфейс API. В-третьих, можно использовать специализи­рованные графические интерфейсы, которые поддерживают аппаратные воз­можности современных графических процессоров.

Одним из наиболее известных графических интерфейсов является OpenGL. Этот интерфейс в виде библиотеки графических функций был разработан Silicon Graphics, и поддерживается многими операционными системами (в том числе Windows) а также производителями графических акселерато­ров. Интерфейс OpenGL для графического отображения использует взаимо­действие типа клиент-сервер [25, 61].                                                              

Другим известным графическим интерфейсом является DirectX с подсисте­мой трехмерной графики Direct3D, а также подсистемой Direct Draw, которая обеспечивает, в частности, непосредственный доступ к видеопамяти. Этот интерфейс разработан Microsoft и предназначен только для Windows [26].     

Известны также другие разработки графических интерфейсов для видеоадаптеров. Например, интерфейс GLide, разработанный 3Dfx для графических видеоадаптеров семейства Voodoo (впрочем, это уже история, поскольку фирма 3Dfx недавно прекратила свое существование как изготовитель видеоадаптеров). 

 

                                                                                                    

ГЛАВА 2

 

Координатный метод

 

Координатный метод был введен в XVII веке французскими математикам Р. Декартом и П. Ферма. На этом методе зиждется аналитическая геометрия которую можно считать фундаментом компьютерной графики. В современ­ной компьютерной графике широко используется координатный метод. Это­му есть несколько причин.

Каждая точка на экране (или на бумаге при печати на принтере) задается координатами — например, пиксельными.

 Координаты используются для описания объектов, которые будут ото­бражаться как пространственные. Например, объекты микромира, объек­ты на поверхности Земли, объекты космического пространства и тому по­добное. Даже тогда, когда отображается нечто, не имеющее привязки к положению в пространстве (например, случайные цветовые пятна в ка­ком-то видеоэффекте), то и здесь используются координаты для учета взаиморасположения отдельных элементов.

 При выполнении многих промежуточных действий отображения исполь­зуют разные системы координат и преобразования из одной системы в другую.

 

2.1. Преобразование координат

 

      Сначала рассмотрим общие вопросы преобразования координат; Пусть зада­на и-мерная система координат в базисе 1, к2, ..., кп), описывающая положе­ние точки в пространстве с помощью числовых значений к,. В компьютер­ной графике чаще всего используется двумерная (п=2) и трехмерная ( n=3) системы координат.

            Если задать другую, N-мерную, систему координат в базисе 1, m2, ..., mN) и поставить задачу определения координат в новой системе, зная координаты в старой, то решение (если оно существует) можно записать в таком виде:

Гдеƒi— функция пересчета i-й координаты, аргументы — координаты в сис­теме кi

Можно поставить и обратную задачу — по известным координатам (mi, mi, ..., mN) определить координаты 1, к2, .... кn,). Решение обратной задачи запи­шем так:

где Fi — функции обратного преобразования.

В случае, когда размерности систем координат не совпадают (п ≠ N), осуще­ствить однозначное преобразование координат зачастую не удается. Напри­мер, по двумерным экранным координатам нельзя без дополнительных усло­вий однозначно определить трехмерные координаты отображаемых объектов.

 Если размерности систем совпадают (n = .N), то также возможны случаи, ко­гда нельзя однозначно решить прямую или обратную задачи.

 Преобразование координат классифицируют:

 по системам координат — например, преобразование из полярной систе­мы в прямоугольную; □ по виду функций преобразования ƒi.

                  По виду функций преобразования различают линейные и нелинейные преоб­разования. Если при всех i = 1, 2, ..., N функцииƒi — линейные относительно аргументов (k1,, к2 ..., кп), то есть

 

            где a,j— константы, то такие преобразования называются линейными, а при п = N- аффинными.

                      Если   хотя   бы   для   одного   i   функция fi—   нелинейная   относительно (k1 к2, ..., кn), тогда преобразование координат в целом не линейно.

 

 

нелинейное, так как в выражении для Y присутствует ху.

Тем, кто интересуется математическими аспектами, относящимся к системам

координат и преобразованиям систем координат, можно порекомендовать

такие книги, как [16, 23].

Линейные преобразования наглядно записываются в матричной форме:

 

 

Здесь матрица коэффициентов (аij) умножается на матрицу-столбец (ki) и в результате получается матрица-столбец i).

       Мы и далее часто будем использовать умножение матриц, поэтому сделаем небольшой экскурс в матричную алгебру. Для двух матриц А размером x п) и В размером (n х р):

 

            Правило вычисления элементов матрицы С можно легко запомнить по назва­нию "строка на столбец". И действительно, для вычисления любого элемента Су необходимо умножить элементы i-й строки матрицы А на элементы j-ro столбца матрицы В.

 

 

 

 

Произведение матриц определено только для случая,  когда количество столбцов матрицы А равно количеству строк матрицы В.

Подробнее с матрицами вы можете ознакомиться в специальной математиче­ской литературе, например в [S].

Ну а теперь вернемся к преобразованиям координат. Рассмотрим более под­робно некоторые отдельные типы преобразований.

 

Аффинные преобразования на плоскости

 

Зададим некоторую двумерную систему координат (х, у). Аффинное преобра­зование координат (х, у) описывается формулами

 

где A, В, ..., F — константы. Значения (X, Y) можно трактовать как координа­ты в новой системе координат.

Обратное преобразование (X, Y) в (х, у) также является аффинным:

 

          Аффинное преобразование удобно записывать в матричном виде. Константы А, В, .... F образовывают матрицу преобразования, которая, будучи умножен­ная на матрицу-столбец координат {х, у), дает матрицу-столбец (X, Y). Однако для того, чтобы учесть константы С и F, необходимо перейти к так называе­мым однородным координатам — добавим строку с единицами в матрицах координат:

 

 

            Матричная запись дает возможность наглядно описывать несколько преобра­зований, которые идут одно за другим. Например, если необходимо сначала выполнить преобразования

 

где матрица (С) равна произведению (В)(А).

: Перемножение матриц выполняется так, как это принято в линейной алгебре. Рассмотрим частные случаи аффинного преобразования.

           1. Параллельный сдвиг координат (рис. 2.1).

 

 

 

 

 

 

 

 

Коэффициенты кх и ку могут быть отрицательными. Например, кх = -1 соот­ветствует зеркальному отражению относительно оси у.

 

 

 

 

 

 

 

            Свойства аффинного преобразования.

 Любое аффинное преобразование может быть представлено как последо­вательность операций из числа указанных простейших: сдвиг, растяже­ние сжатие и поворот.

 Сохраняются прямые линии, параллельность прямых, отношение длин отрезков, лежащих на одной прямой, и отношение площадей фигур.

 

Трехмерное аффинное преобразование

Запишем в виде формулы:

 

Для трехмерного пространства любое аффинное преобразование также мо­жет быть представлено последовательностью простейших операций. Рас-s смотрим их.

                     

1. Сдвиг осей координат соответственно на dx, dy, dz:

 

 

 

 

2.2. Преобразование объектов

 

Преобразование объектов можно описать так. Пусть любая точка, которая принадлежит определенному объекту, имеет координаты (k1 к2 ..., кn) в n-мерной системе координат. Тогда преобразование объекта можно опреде­лить как изменение положения точек объекта. Новое положение точки про­странства отвечает новым значениям координат 1, m2 ..., mn).

Соотношение между старыми и новыми координатами для всех точек объек­та (m1 m2 ..., mn) = F(k1, k2 ..., кn) и будет определять преобразование объ­екта, где F— функция преобразования.

Классифицировать преобразования объектов можно согласно типу функции преобразования и типу системы координат.

Например, преобразование объектов на плоскости можно определить так:

 

 

Аффинные преобразования объектов

на плоскости

 

Аффинные преобразования объектов на плоскости описываются так:

 

где А, В, ..., Fконстанты; x, у — координаты до преобразования; X,Y— новые координаты точек объектов.

        Рассмотрим частные случаи аффинного преобразования.

 

 

 

 

 

            Обратное преобразование позволяет рассчитать старые координаты точек объектов по известным>новым координатам:

 

2. Растяжение-сжатие (рис. 2.8).

      Необходимо отметить, что это, вероятно, не очень удачное название, так как для некоторых типов объектов размеры и форма не изменяются — на­пример, для точечных объектов. По-другому это преобразование можно назвать масштабированием.

 

 

               

 

 

 

                                                                                                                

 

 

                                    Трехмерное аффинное преобразование объектов

Приведем в виде формулы:

 

 

 

 

 

                               

 

 

 

 

 

            Формулы для обратных преобразований не приведены, но их несложно полу­чить по аналогии с преобразованиями, которые рассмотрены выше.