4.5.4. Некоторые принципы уменьшения объема графических
файлов
<<Назад
|
Содержание
| Далее>>
Сколько бит требуется, чтобы закодировать
информацию о 130 оттенках? Нетрудно подсчитать, что 8 (то есть 1
байт), поскольку при помощи 7 бит можно сохранить номер оттенка
о 0 до 127, а 8 бит хранят от 0 до 255. Легко видеть, что такой
способ кодирования не является оптимальным: 130 заметно меньше
255. Подумайте, как уплотнить информацию о рисунке при его
записи в файл, если известно, что:
а) в
рисунке одновременно содержится только 16 цветовых оттенков из
130 возможных;
б) в
рисунке присутствуют все 130 оттенков одновременно, но
количество точек, закрашенных разными оттенками, сильно
различаются.
Решение
а) Очевидно, что для хранения информации
о 16 оттенках достаточно log2(16)=4 бита.
Однако так как эти 16 оттенков выбраны из 130, то они могут
иметь номера, двоичные коды которых не умещаются в 4
битах. Поэтому воспользуемся методом палитр. Назначим 16
используемым в нашем рисунке оттенкам свои “локальные” номера от
0 до 15 и закодируем весь рисунок из расчета 4 бита на пиксель.
Допишем к этой информации (в конец содержащего ее файла) таблицу
соответствия, состоящую из 16 пар байтов с номерами оттенков: 1
байт - наш “локальный” номер в данном рисунке, второй - реальный
номер данного оттенка. Если рисунок достаточно велик, выигрыш в
объеме полученного файла будет значительным.
б) Попытаемся реализовать простейший
алгоритм архивации графической информации. Назначим трем
оттенкам, которыми закрашено минимальное количество точек, коды
128 – 130 (восьмибитные), а остальным оттенкам - коды 1 -127
(семибитные). Будем записывать в файл (который в этом случае
представляет собой не последовательность байтов, а сплошной
битовый поток) семибитные коды для оттенков с номерами от 1 до
127. Для оставшихся же трех оттенков в битовом потоке будем
записывать число-признак - семибитный 0 - и сразу за ним
двухбитный “локальный” номер, а в конце файла добавим таблицу
соответствия “локальных” и реальных номеров. Так как оттенки с
кодами 128 - 130 встречаются редко, то семибитных нулей будет
немного.
Заметим, что постановка вопросов в данной
задаче не исключает и другие варианты решения, без привязки к
цветовому составу изображения - архивацию:
-
на основе выделения последовательности точек,
закрашенных одинаковыми оттенками и замены каждой из этих
последовательностей на пару чисел (цвет, количество) (этот
принцип лежит в основе графического формата РСХ);
-
путем сравнения пиксельных строк (запись номеров
оттенков точек первой строки целиком, а для последующих строк
запись номеров оттенков только тех точек, оттенки которых
отличаются от оттенков точек, стоящих в той же позиции в
предыдущей строке, - это основа формата GIF);
-
с помощью фрактального алгоритма упаковки
изображений (формат YPEG).
<<Назад
|
Содержание
| Далее>>
|