
- •Глава 6. Системы технического зрения
- •6.1. Основные понятия
- •6.2. Основы формирования и передачи изображений
- •6.2.1. Понятие о видеосигнале
- •6.2.2. Принципы кодирования цвета
- •6.3. Датчики изображений
- •6.3.1. Видикон
- •6.3.2. Телекамеры на основе приборов с зарядовой связью
- •6.3.3. Фотодиодные матрицы
- •6.4. Устройства ввода и хранения изображений
- •6.4.1. Принципы хранения изображений
- •6.4.2. Кодирование видеосигнала
- •Форматы хранения изображений в стз
- •6.5.1. Структура графического файла
- •6.5.2. Сжатие изображений
- •6.5.2.1. Сжатие графических файлов
- •Ааааааааааааааа
- •6.5.2.2. Сжатие видеоизображений
- •6.6. Базовые алгоритмы обработки изображений
- •6.6.1. Предварительная обработка изображений
- •6.6.2. Сегментация
- •6.6.3. Кодирование изображений
- •6.6.4. Описание изображений
- •6.7. Распознавание изображений
- •6.7.1. Пример алгоритма распознавания
- •6.7.2. Особенности получения трехмерных изображений
- •Вопросы для самостоятельной подготовки
6.5.2. Сжатие изображений
Одной из важнейших процедур обработки изображений является сжатие. Ее целью является уменьшение физического размера массива данных. В СТЗ применяется сжатие как статических, так и динамических изображений. В первом случае говорят о графических файлах, во втором - о видеоизображениях.
6.5.2.1. Сжатие графических файлов
Сначала рассмотрим наиболее известные принципы сжатия статических изображений. Процедуры сжатия могут встраиваться в спецификацию графического формата или выполняться отдельно. Существует два основных подхода к сжатию изображений: сжатие без потери информации (примерами являются методы Хаффмена, LZW, группового кодирования - RLE и др.) и сжатие с потерей информации (например, дискретное косинусное преобразование - ДКП, JPEG и MPEG). В большинстве спецификаций графических форматов включены процедуры сжатия. Анализ этих процедур показывает, что чаще всего они являются модификациями нескольких базовых методов сжатия, к которым относятся: метод группового кодирования (RLE); метод Лемпела-Зива-Велча (LZW); метод CCITT (один из вариантов этого сжатия является сжатие по алгоритму ДКП, применяемого в формате JPEG), метод фрактального сжатия и ряд других.
Заметим, что сжатие растровых, векторных и метафайловых данных осуществляется по-разному. В растровых файлах сжимаются только данные изображения, заголовок и все остальные данные (таблица цветов, концовка и т.п.) всегда остаются несжатыми. При этом несжатые данные занимают очень незначительную часть растрового файла. Векторные файлы обычно не имеют «родной» формы сжатия данных, т.к. в них хранятся математические описания изображения, а не сами данные изображения. Учитывая, что представление данных в компактной форме заложено в основу любого векторного формата, их сжатие дает очень незначительный эффект.
Методы сжатия изображений разделяются на две категории: симметричные и асимметричные.
Симметричные методы используют при сжатии и распаковке примерно одинаковые алгоритмы. Поэтому длительность процедур сжатия и распаковки примерно одинаковы. Такие алгоритмы применяются в программах обмена данными (например, протоколы V42).
При асимметричном сжатии в одном направлении выполняется значительно больший объем работы, чем в другом. Обычно на сжатие затрачивается намного больше времени и системных ресурсов, чем на распаковку. Это имеет смысл, например, если создается база данных изображений - изображения сжимаются для хранения всего однажды, зато распаковываться с целью отображения они могут неоднократно.
Алгоритмы сжатия изображений базируются на модификациях стандартных кодировщиков. Таких программ существует довольно много и они, как правило, специализированные, т.е. созданы специально для обработки данных только определенных типов. Их особенностью является применение процедуры подстановки данных из словаря. Примером подобного алгоритма, получившего название неадаптивного кодировщика, является алгоритм сжатия CCITT. Он содержит статический словарь предопределенных подстрок, о которых известно, что они появляются в кодируемых данных достаточно часто. В отличие от него адаптивный кодировщик не содержит априорных эвристических правил для сжимаемых данных. Адаптивные компрессоры, такие как LZW, не зависят от типа обрабатываемых данных, поскольку строят свои словари полностью из поступивших (рабочих) данных. Они не имеют предопределенного списка статических подстрок, а, наоборот, строят фразы динамически, в процессе кодирования. Наконец, метод полуадаптивного кодирования основан на применении обоих принципов кодирования. Кодировщик работает в два прохода. При первом он просматривает все данные и строит свой словарь, при втором - выполняет кодирование. Этот метод позволяет построить оптимальный словарь прежде, чем приступить к кодированию.
Рассмотрим подробнее некоторые типовые алгоритмы сжатия изображений без потерь информации. Существует два основных подхода; либо оптимизируется кодирование минимального элемента информации - байта, либо удаляется избыточная информация. Представителем первого подхода является метод Хаффмана, второго - метод LZW, разработанный Лемпелем и Зивом и дополненным Велчем, а также групповое кодирование.
В методе Хаффмана сжатие проводится в два этапа. Сначала считываются данные, и определяется частота встречаемости отдельных байтов данных. Затем байты кодируются, причем, наиболее часто встречающиеся значения кодируются меньшим количеством символов. (Например, самое часто встречающееся значение яркости -183 кодируется одним битом, что в 8 раз меньше, чем при использовании стандартной кодовой таблицы). По мере снижения частоты появления значений используются все более длинные слова для их кодирования. В сжатый файл записывается поток битов и информация о том, как этот поток интерпретировать. Этот метод используется, например, при факсимильной передаче. Кодирование по Хаффману неэффективно, если значения данных распределены статистически равномерно.
Групповое кодирование (RLE) - представляет собой алгоритм сжатия данных, поддерживаемый большинством растровых файловых форматов, включая такие популярные как TIFF, BMP и PCX. В СТЗ данный алгоритм имеет также и другое название КДС - кодирование методом длин серий. Алгоритм RLE позволяет сжимать данные любых типов, невзирая на содержащуюся в них информацию. Групповое кодирование уменьшает физический размер повторяющихся строк символов. Такие повторяющиеся строки, называемые группами, обычно кодируются в двух байтах. Первый байт определяет количество символов в группе и называется счетчиком группы. На практике закодированная группа может содержать от 1 до 128 или 256 символов. Второй байт содержит значение символа в группе, которое находится в диапазоне от 0 до 255 и называется значением группы. Например, несжатая символьная группа из 15 символов А обычно занимает 15 байтов: