
- •Сжатие данных
- •Терминология
- •Физическое и логическое сжатие
- •Симметричное и асимметричное сжатие
- •Адаптивное, полуадаптивное и неадаптивное кодирование
- •Сжатие с потерями и минимизация потерь
- •Варианты группового кодирования
- •Пакеты вертикального повторения
- •Удаление шума и дифференцирование
- •Варианты алгоритма lzw
- •Юридические вопросы использования lzw
- •Историческая справка
- •Одномерное кодирование Group 3 (g31d)
- •Сжатие tiff Type 2
- •Двухмерное кодирование Group 3 (g32d)
- •Двухмерное кодирование Group 4 (g42d)
- •Советы по разработке кодировщиков и декодеров ccitt
- •Jpeg в перспективе
- •Основы jpeg
- •Преобразование изображения
- •Субдискретизация компонентов цветности
- •Применение дискретного косинус-преобразования
- •Квантование каждого блока
- •Арифметическое кодирование
- •Сжатие jpeg без потерь
- •Селективное улучшение
- •Фрагментация изображения
- •Принцип работы jbig
- •Принципы работы art
- •Основы фрактальной графики
- •Мультимедиа
- •Анимация
- •Цифровая видеоинформация
- •Цифровая аудиоинформация
- •Стандарт midi
Сжатие tiff Type 2
Схема сжатия TIFF Туре 2 (значение тега сжатия равно 2) является вариацией кодирования CCITT G31 D. Методы сжатия TIFF Туре 3 и TIFF Туре 4 точно следуют спецификациям CCITT Group 3 и CCITT Group 4 соответственно. С другой стороны, сжатие Туре 2 реализует кодирование Group 3, но применяет кодовые слова EOL и RTC. На этом основании сжатие TIFF Type 2 иногда называют "Group 3 без EOL". Биты-заполнители в этом случае используются только для набивки последнего байта строки развертки до следующей границы байта.
Эти модификации включены в спецификацию TIFF потому, что коды EOL и RTC для чтения данных, записанных на диск или ленту, не нужны. Типичное изображение размером 1728 х 2200 пикселей будет содержать 26484 битов (3310,5 байта) EOL- и RTC-информации. При записи в файл данных, полученных в результате применения Group 3, не используются следующие коды:
• начальный 12-битовый EOL,
• 12-битовые EOL для каждой строки развертки,
• 72 бита кода RTC, добавляемые в конец каждого изображения.
Обычные декодеры Group 3 не учитывают этих модификаций и либо отказываются читать данные, закодированные TIFF Type 2, либо просто возвращают строку декодированного "мусора". Однако многие декодеры спроектированы с учетом этих тривиальных "модификаций" Group 3 и не создают проблем при чтении данных подобного типа. Порядок следования кодов при использовании схемы проиллюстрирован на рис. 9.10.
Формат TIFF Class F
Данный формат является едва ли не единственным из используемых для поддержки факсимильной связи и может применяться практически любым компьютерным факс-оборудованием и программным обеспечением. В основном для сжатия факсимильных данных применяется алгоритм RLE (считается, что это ускоряет отображение), либо же данные кодируются по схемам Group 3. Однако неофициальным форматом факс-файлов TIFF является Class F, дополнительная информация о котором приведена во второй части этой книги.
Формат Class F не был официально включен в стандарт даже последней реализацией TIFF — модификацией 6.0 (несмотря на желание Консультативного Совета TIFF). Причиной послужило мнение фирмы Aldus, что программы, требующие хранения и поиска факсимильных данных, не входят в сферу действия TIFF, поскольку он был разработан в основном для работы со сканерами и настольными издательскими системами. Бесспорно, это очень плохо, особенно если учесть, что одним из главных преимуществ формата TIFF является возможность его применения для обмена данными изображений между различными аппаратными платформами и программными продуктами.
Двухмерное кодирование Group 3 (g32d)
При одномерном кодировании по схеме Group 3 (G31D), которое мы обсуждали ранее, каждая строка развертки кодируется независимо от других строк. В процессе кодирования и декодирования каждая группа обрабатывается отдельно, и данные, обработанные до этого шага кодирования, и те, которые будут обрабатываться после него, не имеют решающего значения — важны только данные текущей группы.
При двухмерном кодировании по схеме G32D способ обработки строки развертки может зависеть от данных, содержащихся в предыдущей строке. Многие изображения имеют высокий уровень избыточности, поэтому, описывая различия между двумя строками развертки вместо того, чтобы представлять содержимое новой строки, двухмерное кодирование обеспечивает лучшую степень сжатия.
Первый пиксель каждой группы является изменяемым элементом. Каждый изменяемый элемент помечает цветовой переход в строке развертки (точку, где кончается группа одного цвета и начинается группа другого цвета).
Позиция каждого изменяемого элемента в строке развертки определяет конкретное количество пикселей от этого изменяемого элемента в текущей кодируемой строке (при горизонтальном кодировании) или в предыдущей, справочной строке (при вертикальном кодировании). Выходные коды, содержащие реальную позиционную информацию, называются READ-кодами.
Короткие кодовые слова применяются для описания цветовых переходов на расстоянии не более четырех пикселей в кодируемой или справочной строке. Длинные кодовые слова используются для описания цветовых переходов на большем расстоянии от текущего изменяемого элемента.
Двухмерное кодирование более эффективно, чем одномерное, поскольку сжимаемые данные (печатные и рукописные документы) имеют большую степень двухмерной связности.
Поскольку строка развертки, закодированная по схеме G32D, зависит от корректности предыдущей строки развертки, то ошибка, вызванная, например, всплеском шума в линии, может повлиять на многие строки развертки, закодированные двухмерным способом. Если при передаче сегмента данных закодированной строки развертки произошла ошибка, то эта строка не может быть декодирована. Но что значительно хуже, неправильно будут декодированы все строки развертки, передаваемые после нее.
Чтобы минимизировать потери от шумов, в G32D применяется переменная, называемая К-фактором, и после одной строки развертки, закодированной по схеме одномерного кодирования, следуют К—1 строк, закодированных методом двухмерного кодирования. Если при передаче данных произошел сбой, то будут потеряны только К-1 строк развертки. Декодер должен быть способен продолжить декодирование после получения следующего кода EOL.
Обычно переменная К равна 2 или 4. Данные, закодированные по схеме G32D с К=4, рассматриваются как блок данных, содержащий одну строку развертки, обработанную методом одномерного кодирования, и три строки развертки, обработанных методом двухмерного кодирования.
При декодировании данных по схеме G32D переменная К обычно не используется. Вместо этого модифицируется код EOL, указывая на алгоритм, который нужно применить для декодирования следующей строки. Если к коду EOL добавлен бит, равный 1, то следующая строка закодирована по принципу одномерного кодирования; если этот бит равен О—с применением двухмерного кодирования. Остальные кодовые слова (FILL и RTC), используемые для управления обменом, выполняют ту же роль, что и в G32D-KowpoBaHun. Переменная К при декодировании нужна только в том случае, если для исправления ошибки требуется восстановить предыдущую строку развертки, обработанную по схеме одномерного кодирования.