Теория растровой графики
Пресс-центр

1. Что такое растровая графика?

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

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

bitmap1.jpg

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

bitmap2.jpg

Как мы видим, изображение стало состоять из конечного числа квадратиков определенного цвета. Эти квадратики называют pixel (от PICture ELement) - пиксел или пиксель.

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

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

212= 45= 67= 45= 127= 4= 78= 245= 34 ...

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

Цветовая глубина

Как мы увидели в предыдущей статье, все пикселы стали иметь цвет, определенным образом указанный цифрой. А как определить, какая цифра необходима? Есть ряд способов кодирования цвета, которые разделяются на 2 основные группы : индексированные (с палитрой) и полноцветные. Идея индексированных растров в том, что номер цвета на самом деле является номером "краски", которой закрашен данный пиксел. Поэтому кроме самих цветов пикселов программе необходимо также знать и "палитру" из которой эти цвета выбираются. Этот способ похож на методы настоящего художника, но не очень хорошо подходит для обработки на компьютере, так как программе кроме самих пикселов приходится мучаться еще и с палитрой, подбирая наиболее подходящие цвета. И второй метод состоит в том, что по номеру цвета мы можем непосредственно определить сам цвет. Однако, и тут есть ветвление. Для этого был придуман ряд цветовых моделей - Grayscale, RGB, CMYK, L*a*b= и другие.

Индексированные цвета

  • Черно-белое изображение. Вообще, это частный случай индексированного цвета. Но из-за особенностей выразительного характера его выделяют в отдельную группу. Нетрудно догадаться, что в подобном изображении могут быть только 2 цвета - черный и белый, кодируемые соответственно 0 и 1. Глубина изображения составляет в данном случае 1 бит. Эта глубина очень плохо подходит к представлению фотореалистичных образов и применяется лишь для специализированных изображений.

bitmap.gif

  • Индексированное изображение. Тут, в отличие от черно-белого режима палитра побогаче. Насколько? Определять Вам. Как правило, графические редакторы поддерживают палитру от 2 (необязательно черного и белого) до 256 цветов. Количество цветов в палитре определяет два взаимнопротивоположных параметра - качество изображения и его размер.

indexed8.gif

indexed16.gif

indexed256.gif

Приглядевшись к этим изображениям, Вы увидите, как постепенно улучшается качество, но и увеличивается размер - 9, 13 и 32 Кб соответственно. Глубина изображения при этом определяется двоичным логарифмом количества цветов в палитре, округленным в сторону большего целого. Например, для 6 цветов - 3 бита, для 8 - тоже 3 бита, для 16 - 4 бита и для 256 - 8 бит.

Непрерывный цвет

  • Полутоновый ( в градациях серого, Grayscale). Тут мы берем черный цвет за 0, белый за 255, а промежуточные оттенки обозначаются соответствующими цифрами. Например - 68 этот цвет, более близкий к черному ( темно серый, скажем так...). При этом уже намного удобнее проводить математические операции над изображением, так как по цвету можно напрямую определить его номер. Глубина изображения - 8 бит.

grayscale.jpg

  • Полноцветный. Как известно, любой цвет можно представить в виде смешения основных трех цветов - красного, синего и зеленого в различных пропорциях. Этим и пользуются при использовании полноцветных изображений. На каждый канал - R, G или B (Red, Green, Blue - Красный, Зеленый или Синий) имеется свой отдельный параметр, указывающий на количество соответствующей компоненты в конечном цвете. Например - (255,64, 23) -цвет содержащий сильный красный компонент, немного зеленого и совсем немного синего. Естествено, что этот режим наиболее подходит для передачи богатства красок окружающей природы :

rgb.jpg

Но он требует и больших расходов, так как глубина цвета тут наибольшая - 3 канала по 8 бит на каждый дают 24 бита.

Размер растровых изображений

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

Любое компьютерное растровое изображение измеряется в пикселах. Как было сказано, пикселы - это условные квадратики, на которые разбивается реальное изображение. В этом случае указывается количество пикселов в горизонтальной линии и вертикальной. Например "растр 2048 на 1536 пикселов" означает, что изображение представляет из себя матрицу 2048 пикселов шириной и 1536 высотой. Это все хорошо, но нормальные люди редко оперируют еденицей измерения "пиксел", предпочитая использовать более доступные миллиметры или сантиметры. Для того, чтобы соотнести эти 2 типа размера, используют еденицы типа dpi - dots per inch, то есть точек на дюйм. Она определяет, в сколько пикселов превратиться линия длиной 1 дюйм. Как правило, используются еденицы от 100 dpi до 2400 dpi. 100 dpi - это весьма посредественное качество, абсолютно непригодное для любой профессиональной деятельности. Лазерные принтеры обычно имеют от 300 до 600 dpi (ведь растровые изображения могут не только оцифровываться для компьютера, но и подвергаться обратной операции - выводиться на традиционный носитель типа бумаги). Такое-же разрешение обеспечивают сканеры домашнего уровня. Самые совершенные сканеры и фотонаборные аппараты обеспечивают качество порядка 2400-4800 dpi.

Однако, стоит разобраться, что стоит за этими dpi. Понятно, что чем лучше качество и больше dpi, тем более точное изображение мы получаем. Но следует соотносить требуемое разрешение и размер получившегося цифрового образа. У начинающих пользователей всегда возникает соблазн установить на сканере максимальное доступное разрешение. К примеру, 600 dpi. Пусть мы сканируем стандартный лист формата А4. Цветные сканеры работают в формате RGB и выдают изображение глубиной 24 бит, то есть 3 байта на пиксел. А4 - это 210*297 мм, т.е. примерно 8*11 дюймов. В результате мы получаем матрицу (8*600) на (11*600) пикселов, то есть около 4800*6600 пикселов. Перемножив эти две линейные величины и умножив их на 3 (столько занимает 1 пиксел в памяти), мы получим= 95040000 байт, то есть 90,63 мегабайта. Столько занимает обычный цветной лист формата А4, сканированный с приличным разрешением. Если же мы попробуем сканировать на хорошем сканере небольшой плакатик 90*60 сантиметров, то потребуются действительно мощные ресурсы. То есть, планируя оцифровку изображения, Вы должны заранее оценить какого качества Вам потребуется изображение. В противном случае Вам не хватит никаких ресурсов для обработки такого цифрового монстра.

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

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

В отличие от растра векторное изображение представляет из себя математическое описание. Растр - это дискретная структура, то есть всегда можно выделить определенные элементы. При использовании векторного представления изображение представляет из себя базу данных описаний примитивов. То есть, в составе изображения могут быть отрезки, окружности, овалы, точки, кривые Безье и так далее. А изображение будет представлять из себя массив описаний - нечто типа отрезок (20,20-100,80); окружность (50,40-30); кривая_Безье (20,20-50,30-100,50). Естественно, что детали хранения этого массива в памяти зависят от конкретной программы. И самое главное преимущество векторного изображения состоит в том, что оно является аналитически заданным и в любой момент мы можем изменить любой из параметров любого из его составляющих. Кроме того, над векторным изображением очень удобно проводить математические, в сущности, операции типа увеличения (scaling), поворота (rotation), нелинейных преобразования (defaormations) и так далее. В случае растра, по причине его дискретности и поэтому потери части информации, будут происходить необратимые потери качества изображения. И если с растровым изображением мы проведем большой ряд операций, то в конечном итоге оно может стать негодным к использованию в полиграфических целых или иных, требующих хорошего качества.

Кроме того, векторные изображения, как правило, занимают меньше памяти, чем растровые. Ведь гораздо проще сказать "Окружность радиусом 40 и центром в точек 60,80", чем выписывать все пикселы, на которые оно разбивается при оцифровке растра.

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

nature_bitmap.jpg

Теперь переведем ее в векторный формат с помощью программы Adobe StreamLine 4.0. При этом отметим, что изображение "поправилось" с 17 до 400 Кб. При этом вот что мы получили :

nature_vector.jpg

Нет, конечно определенный шарм имеет место быть. Но, конечно же, это изображение фотореалистичным уже не назовешь... Притом, это один из самых качетсвенных вариантов векторизации изображения - сам процесс занял около минуты на iPMMX225/64RAM. 

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

С преобразованием из растрового изображения в векторное дело обстоит хуже. Дело в том, что это процесс неоднозначный, то есть здесь уже появляется элемент эмпирики и нам в каждом конкретном случае предстоит определить, как лучше представить вектором данную цепочку пикселов. Так как лучше - понятие субъективное, то и результаты могут быть очень разными - в зависимости от принятой идеи векторизации. Но все таки мощные программы векторизации справляются с техногенными рисунками достаточно неплохо. Ну а с обычной картиной горного озера творят сами видели что...

Сжатие растровых изображений

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

Групповое сжатие

== Это один из самых простых способов сжатия изображений. Пусть у нас имеется такая цепочка пикселов :

colors.gif

Если мы запишем ее просто цветами, то она займет весьма заметное место:

ggbbbggyrrrrrbbybybg.

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

2g 3b 2g 1y 5r 2b 5(ybybg)

Реально при создании файла в цепочке байтов первый бит первого байта означает, постоянный цвет у пикселов в данной последовательности или разный, а остальные его биты означают соответственно или количество пикселов постоянного цвета (от 1 до 127) и тогда в последовательности присутствует еще один байт, описывающий этот повторяющийся цвет, или количество пикселов с чередующимися цветами и тогда в последовательности присутствует еще от 1 до 127 байтов, описывающие чередующиеся цвета. В нашем случае такой метод приведет к снижению размера кода с 20 до 18 байтов. Это очень незначительное сжатие, тем более учитывая наличие большого количества повторяющихся цветов в изображении. Реально это сжатие имеет смысл применять при обработке простого однотонного рисунка. Единственным его плюсом является простота реализации.


Источник: http://wing.da.ru


Мы в Telegram

Назад в раздел
1
X