Изображение задаётся как набор графических примитивов (точки, линии, отрезки, кривые Безье, текстовые надписи и т.п.). Несколько замкнутых кривых могут образовывать замкнутый контур, который можно залить.
Достоинства:
● Параметры каждого примитива могут изменяться независимо от других
● Очень легко выполнять повороты и масштабирование
● Высокая точность рисования даже при большом увеличении
● Экономичный расход памяти
● Возможность растеризации
Недостатки:
● Все устройства ввода изображений — растровые
● Векторизация изображений — очень сложная задача
● В векторной форме сложно построить реалистичное изображение
● Нет возможности применять эффекты и фильтры
Примеры:
● PS / PDF
● TrueType-шрифты
Изображение разбивается на множество мелких, неделимых и не пересекающихся друг с другом фрагментов — пикселов. При этом каждая точка исходного изображения всегда попадает в некоторый из полученных фрагментов. Цвет каждого пикселя задаётся независимо от других.
Основные параметры растрового изображения:
● Логический размер (например, 1000х1000 пикселей)
● Физический размер (например, размеры монитора)
● Разрешение (плотность) — связывает логический и физический размеры
○ Знаете ли вы?
■ Человеческое зрение различает точки с точностью до одной минуты (1/60 градуса)
■ Для расстояния в 50 см это соответствует разрешению 181 175 dpi
■ А для 30 см — 192 291 dpi
● Форма, шаг, размер пикселя
● Геометрия растра
○ Форма пикселя (бывает прямоугольная (НЕ квадратная) и круглая)
○ Взаимное расположение пикселей
● Глубина цвета — определяется числом бит, отводящихся для хранения цвета пикселя
● Наличие α-канала (прозрачность)
Достоинства растровой графики:
● Универсальность
● Все устройства ввода и многие устройства вывода — растровые
● Скорость обработки изображения не зависит от самого изображения
● Возможность параллельной обработки
Недостатки:
● Большие объёмы памяти и ресурсоёмкость
● Невозможность точного масштабирования и поворота
● Невозможность вывод на плоттер (графопостроитель)
Задача хранения растрового изображения сводится к задаче хранения положения пикселя и его цвета.
Способы хранения цвета:
● Непосредственное кодирование (например, RGB24 (24 бит, по байту на цвет), RGBA32)
○ Достоинства:
■ Надёжность
■ Независимость хранения
○ Недостатки:
■ большой расход памяти
● Использование палитры (набор цветов — палитра — хранится отдельно, а в пикселях только ссылки на цвета из палитры). Обычно содержит 2n цветов.
○ Виды палитр
■ аппаратные (неизменяемые, заданные на уровне устройства)
■ программные
○ Достоинства
■ экономичный расход памяти
○ Недостатки
■ ограниченный набор цветов: приемлемо для просмотра/хранения, но неудобно при редактировании. При изменении количества цветов надо перелопатить всю палитру.
○ Примеры:
■ CGA (четыре некоторых цвета)
■ EGA (16 цветов)
■ VGA (256 цветов)
■ SVGA (16 млн.)
Способы хранения изображения:
● Без сжатия (в виде двумерного массива пикселей)
○ Достоинства:
■ Простота
○ Недостатки:
■ Большой расход памяти
● Сжатие без потерь
○ Виды
■ С использованием специфики изображения
■ Без использования специфики
○ Алгоритмы
■ RLE (Run-length encoding) — хранит значение и число повторов
Если мы применим простое кодирование длин серий, то получим следующее:
12W1B12W3B24W1B14W
Однако, в случае, если строка состоит из большого количества неповторяющихся символов, её объем может вырасти. Например, строка
ABCABCABCABCDDEFFFFFFFF
закодируется как
1A1B1C1A1B1C1A1B1C1A1B1C2D1E8F
Проблема решается достаточно просто. Положительные числа используют для записи количества повторяющихся одинаковых символов, а отрицательные — для записи количества неодинаковых:
-12ABCABCABCABC2D1E8F
Если кодировать также повтор групп символов, то можно сжать строку ещё больше:
4[ABC]1C2D1E8F
Ещё одна проблема связана с тем, что численные типы данных на компьютере всегда имеют некоторый предел. Предположим, мы используем signed char для записи длин серий. Тогда мы не можем записать серию длиннее 127 символов одной парой "длина-символ". Если подряд записано 256 символов “A”, их разделяют на минимальное количество групп:
127A127A2A
Запись на некотором языке программирования алгоритма RLE с учетом этих ограничений нетривиальна.
■ Методы энтропийной компрессии:
● LZW — zip-алгоритмы
● Метод Хаффмана (сначала собирает статистику по изображению)
Каждой последовательности пикселей ставится в соответствие битовая последовательность, длина которой обратно пропорциональна частоте появления цвета/группы пикселей в изображении: чем чаще встречается элемент, тем короче его код, и наоборот. (Мы считываем последовательно символы входного потока и проверяем, есть ли в созданной нами таблице строк такая строка. Если строка есть, то мы считываем следующий символ, а если строки нет, то заносим в поток код для предыдущей найденной строки, заносим строку в таблицу и начинаем поиск снова. LZW реализован в форматах GIF и TIFF. )
○ Достоинства
■ Экономичный расход памяти
■ Сохранение точной информации
○ Недостатки
■ Сложный доступ к данным
■ При изменении изображения может не хватить памяти (?)
■ Невозможность регуляции степени сжатия
● Сжатие с потерями — происходят незначительные изменения, незаметные человеку. Все алгоритмы этого класса используют особенности человеческого зрения. Однако существует порог, после которого изображение заметно теряет качество.
○ Достоинства
■ Экономичное расходование памяти
■ Возможность регулировки степени сжатия
○ Недостатки
■ Сложный доступ к данным
Основные форматы
● bmp
○ Использует несколько способов хранения цвета
○ Поддерживает α-канал
○ Поддерживает сжатие без потерь
○ Поддерживает палитры
● tiff
○ БОльшая глубина цвета
○ Поддерживает несколько цветовых моделей
○ Поддерживает несколько методов цветовой компрессии (изначально формат поддерживал сжатие без потерь, впоследствии формат был дополнен для поддержки сжатия с потерями в формате JPEG)
○ Поддерживает теги
● gif(graphics interchange format)
○ Сжатие без потерь
○ Однобитный α-канал (без полупрозрачности)
○ Поддерживает только 256-цветную палитру
○ Поддерживает анимацию
○ Поддерживает чересстрочную развёртку — позволяет увидеть картинку до полной загрузки, которая проходит в четыре этапа:
■
○ Можно создавать GIF-изображения только с помощью лицензионного ПО Срок действия последнего патента на GIF истёк 11 августа 2006 года (с) ВП
● png(portable network graphics)
○ Сжатие без потерь
○ Поддерживает двумерную и 4-х-строчную развёртку
○ Поддерживает палитры
○ Поддерживает анимацию
○ Поддерживает теги
● jpeg
○ использует для сжатия дискретно-косинусное преобразование (ДКП)
■ JPEG-LS — сжатие без потерь
■ JPEG-2000 — сжатие на основе вейвлетов
■ Сжатие с потерями
○ Хорошо подходит для фото, хуже для рисунков
○ Может хранить служебную информацию (тэги, информацию о фотоаппарате, условиях съёмки и т.п.)