Урок №18. Кодирование изображений.
Существуют два основных способа получения растровых изображений. При вводе изображения с помощью какого-либо устройства (сканера, цифрового фотоаппарата или веб-камеры) происходит дискретизация (оцифровка) — преобразование аналоговой информации в компьютерные данные. Как правило, оцифровка связана с потерей информации, поскольку требуется, чтобы каждый пиксель был залит одним цветом.
Второй способ — создание рисунка с помощью какой-либо компьютерной программы. В этом случае мы сразу строим цифровое изображение. Появилось даже отдельное направление в искусстве, которое называется «цифровая живопись» — создание электронных картин с помощью компьютерных технологий.
Пиксели растрового изображения обычно имеют квадратную форму, размеры рисунка (ширина и высота) также задаются в пикселях.
Для каждого пикселя в памяти хранится код его цвета. В модели RGB обычно используется по 256 вариантов яркости каждого из трёх цветов. Это позволяет закодировать 2563 = 16 777 216 оттенков, что более чем достаточно для человека. Так как 256 = 28, каждая из трёх составляющих цвета занимает в памяти 8 бит (1 байт), а вся информация о каком-то цвете — 24 бита (3 байта).
Глубина цвета — это количество бит, используемых для кодирования цвета пикселя.
24-битное кодирование цвета часто называют режимом истинного цвета (англ. True Color — истинный цвет).
Конечно, при решении этой задачи мы не учитывали сжатие — уменьшение объёма файла с помощью специальных алгоритмов, — которое применяется во всех современных форматах графических файлов. Кроме того, в файлах всегда есть заголовок, в котором записана служебная информация (например, размеры рисунка).
Кроме режима истинного цвета используется также 16-битное кодирование (англ. High Color — «высокий» цвет), когда на красную и синюю составляющие отводится по 5 бит, а на зелёную, к которой человеческий глаз более чувствителен, — 6 бит. В режиме High Color можно закодировать 216 = 65536 различных цветов. Иногда применяют 12-битное кодирование цвета (4 бита на канал, 4096 цветов).
Как правило, чем меньше цветов используется, тем больше будет искажаться цвет. Таким образом, при кодировании цвета тоже возможна потеря информации, которая «добавляется» к потерям, вызванным дискретизацией. Однако при увеличении количества используемых цветов одновременно растёт объём файла. Например, в режиме истинного цвета файл получится в два раза больше, чем при 12-битном кодировании.
Если количество цветов в изображении невелико (не более 256), применяют кодирование с палитрой. Цветовая палитра — это таблица, в которой каждому цвету, заданному в виде составляющих в модели RGB, сопоставляется числовой код.
Палитра хранится в заголовке файла. Если рисунок содержит пиксели четырёх цветов — чёрного, красного, синего и белого, то его палитра содержит четыре трёхбайтных блока, в которых записаны RGB-коды этих цветов:
![]()
Таким образом, размер палитры в байтах вычисляется как 3 • N, где N — количество цветов в палитре.
Для каждого пикселя изображения в памяти хранится не RGB-код цвета, а номер (код) соответствующего блока в палитре. Так как мы используем всего 22 = 4 цвета, этот код занимает всего два бита, так что глубина цвета для такого рисунка составляет i = 2 бита на пиксель.
Растровое кодирование — это универсальный метод, позволяющий кодировать любые изображения, в том числе размытые (например, фотографии). В то же время у него есть существенные недостатки:
- при дискретизации всегда есть потеря информации;
- при изменении размеров изображения искажается цвет и форма объектов на рисунке, поскольку при увеличении размеров надо как-то восстановить недостающие пиксели, а при уменьшении — заменить несколько пикселей одним;
- размер файла не зависит от сложности изображения, а определяется только разрешением и глубиной цвета; как правило, растровые рисунки имеют большой объём.
Задача 1. Определите информационный объём рисунка размером 20 х 30 пикселей, закодированного в режиме истинного цвета.
Решение. В режиме истинного цвета на каждый пиксель выделяется i = 3 байта. Количество пикселей изображения можно вычислить как произведение его размеров: К = 20 • 30 = 600. Поэтому информационный объём рисунка равен I = К • i = 20 • 30 • 3 байт = = 1800 байт.
Ответ: 1800 байт.
Задача 2. Какой минимальный объём памяти (в Кбайт) нужно зарезервировать, чтобы можно было сохранить любое растровое изображение размером 64 х 128 пикселей при условии, что в изображении могут использоваться 256 различных цветов?
Решение. Сначала находим количество пикселей Ку перемножив ширину и высоту рисунка в пикселях. При этом удобно проводить все вычисления через степени числа 2:
К = 64 • 128 = 26 • 27 = 213.
Так как 256 = 28, глубина цвета составляет i = 8 = 23 бит на пиксель. Поэтому информационный объём файла в битах равен I = 213 • 23 = 216 бит. Остаётся перевести его в килобайты:
I = 216 : 213 Кбайт = 23 Кбайт = 8 Кбайт.
Ответ: 8 Кбайт.
Заметим, что мы вычислили только размер памяти, необходимый для хранения кодов пикселей (без учёта заголовка с палитрой).
Задача 3. Рисунок размером 512 х 256 пикселей занимает в памяти 64 Кбайт (без учёта сжатия). Найдите максимально возможное количество цветов в палитре изображения.
Решение. Максимально возможное количество цветов в палитре определяется глубиной цвета — количеством бит на пиксель. Чтобы найти глубину цвета, нужно разделить информационный объём изображения I на количество пикселей К.
Находим количество пикселей, перемножив размеры рисунка:
К = 512 • 256 = 29 • 28 = 217.
Информационный объём данных в битах равен
I = 64 Кбайт = 26 • 213 бит = 219 бит.
Теперь можно вычислить глубину цвета: i = I: К = 219 : 217 = 4 бита на пиксель. В этом случае максимально возможное количество цветов в палитре изображения равно 24 = 16.
Ответ: 16 цветов.
Существует много разных форматов хранения растровых рисунков. В большинстве из них используется сжатие, т. е. размер файла уменьшают с помощью специальных алгоритмов. В некоторых форматах применяют сжатие без потерь, при котором исходный рисунок можно в точности восстановить из сжатого состояния. Ещё большую степень сжатия можно обеспечить, используя сжатие с потерями, при котором незначительная часть данных (почти не влияющая на восприятие рисунка человеком) теряется. Подробно мы изучим эти вопросы в 11 классе.
Чаще всего встречаются следующие форматы файлов:
- BMP (англ, bitmap — битовая карта, файлы с расширением bmp) — стандартный формат растровых изображений в операционной системе Windows; поддерживает кодирование с палитрой и в режиме истинного цвета;
- JPEG (англ. Joint Photographic Experts Group — объединённая группа фотографов-экспертов, файлы с расширением jpg или jpeg) — формат, разработанный специально для кодирования фотографий; поддерживает только режим истинного цвета; для уменьшения объёма файла используется сильное сжатие, при котором изображение немного размывается, поэтому не рекомендуется использовать его для рисунков с чёткими границами объектов;
- GIF (англ. Graphics Interchange Format — формат для обмена изображениями, файлы с расширением gif) — формат, поддерживающий только кодирование с палитрой (от 2 до 256 цветов); в отличие от предыдущих форматов части рисунка могут быть прозрачными, т. е. на веб-странице через них будет «просвечивать» фон; в современном варианте формата GIF можно хранить анимированные изображения; используется сжатие без потерь;
• PNG (англ. Portable Network Graphics — переносимые сетевые изображения, файлы с расширением png) — формат, поддерживающий как режим истинного цвета, так и кодирование с палитрой; части изображения могут быть прозрачными и даже полупрозрачными (32-битное кодирование RGBA, где четвёртый байт задаёт прозрачность); изображение сжимается без искажения; анимация не поддерживается.
Свойства рассмотренных форматов сведены в таблицу:

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

Рис. 2.22
Как вы понимаете, сделать что-то подобное с растровым рисунком не удастся.
При векторном кодировании для отрезка хранятся координаты его концов, для прямоугольников и ломаных — координаты вершин. Окружность и эллипс можно задать координатами прямоугольника, в который вписана фигура. Сложнее обстоит дело со сглаженными кривыми. На рисунке 2.23 изображена линия с опорными точками А, Б, Б, Г и Д.

У каждой из этих точек есть «рычаги» (управляющие линии), перемещая концы этих рычагов, можно регулировать наклон касательной и кривизну всех участков кривой. Если оба рычага находятся на одной прямой, получается сглаженный узел (Б и Г), если нет — то угловой узел (Б). Таким образом, форма этой кривой полностью задаётся координатами опорных точек и координатами рычагов. Кривые, заданные таким образом, называют кривыми Безье в честь их изобретателя французского инженера Пьера Безье.
Векторный способ кодирования рисунков обладает значительными преимуществами по сравнению с растровым:
- если изображение (например, чертёж, схема, карта, диаграмма) может быть полностью разложено на простейшие геометрические фигуры, то при векторном кодировании нет потери информации;
- объём файлов напрямую зависит от сложности рисунка — чем меньше элементов, тем меньше места занимает файл. Как правило, векторные рисунки значительно меньше по объёму, чем растровые;
- при изменении размера векторного рисунка не происходит никакого искажения формы элементов, при увеличении наклонных линий не появляются «ступеньки», как при растровом кодировании (рис. 2.24).

Рис. 2.24
Самый главный недостаток этого метода — он практически непригоден для кодирования изображений, в которых объекты не имеют чётких границ, например для фотографий.
Среди форматов векторных рисунков отметим следующие:
- WMF (англ. Windows Metafile — метафайл Windows, файлы с расширениями wmf и emf) — стандартный формат векторных рисунков в операционной системе Windows;
- CDR (файлы с расширением cdr) — формат векторных рисунков программы CorelDRAW;
- AI (файлы с расширением ai) — формат векторных рисунков программы Adobe Illustrator;
- SVG (англ. Scalable Vector Graphics — масштабируемые векторные изображения, файлы с расширением svg) — векторная графика для веб-страниц в Интернете.