Что такое коды Грея, как они влияют на сжатие

Методы сжатия изображений, разработанные для конкретных типов графических образов, иногда могут успешно применяться для компрессии других типов. Например, любой метод сжатия двухуровневых изображений годится для полутоновых образов, если предварительно расслоить полутоновой образ на несколько двухуровневых и каждый слой сжимать независимо. Представим себе изображение с 16 градациями серого цвета. Каждый пиксел определяется 4 битами, поэтому изображения разделяется на 4 двухуровневых. Однако при таком подходе может нарушиться основной принцип сжатия изображений. Вообразим себе два прилегающих 4-битных пиксела. Эти пикселы имеют близкие значения, но при их разделении на 4 слоя, они будут различаться во всех 4 слоях! Происходит это из-за того, что в двоичном представлении числа 7 и 8 различаются во всех четырех разрядах.

Для того, чтобы успешно применить здесь метод сжатия двухуровневых изображений необходимо, чтобы в двоичном представлении два последовательных числа имели двоичные коды, различающиеся только на один бит. Такое представление чисел существует и оно называется рефлексными кодами Грея (RGC, reflected Gray code).

Как меняются отдельные биты двоичных кодов, представляющих числа от 0 до 32. В этой таблице в нечетных столбцах приведены обычные двоичные коды целых чисел. В четных столбцах таблицы помещены все последовательные коды Грея. Под таблицей приведена рекурсивная функция Matlab, вычисляющая коды Грея. Коды RGC можно построить для целого n, и не прибегая к рекурсивной процедуре. Достаточно применить функцию «ИСКЛЮЧАЮЩЕЕ ИЛИ» к числу пи к его логическому сдвигу на один разряд вправо.

Можно сделать следующий вывод. Слой, соответствующий самому старшему двоичному разряду (в обычном представлении) изображения, подчиняется принципу сжатия в большей, чем слой самого младшего разряда. Когда соседние пикселы имеют значения, которые различаются на единицу (равны р и р + 1), шансы на то, что их менее значимые или более значимые разряды отличаются, одинаковы. Значит, любой метод компрессии, который будет по отдельности сжимать слои должен или учитывать эту особенность разрядности слоев, или использовать коды Грея для представления величин пикселов. Очевидно, что слой самого младшего бита не показывает никакую корреляцию между пикселами; они случайны или близки к случайным для обоих представлений, двоичного и RGC. Однако, слои от 2 до 5 демонстрируют большую корреляцию пикселов для кодов Грея. Слои с 6 по 8 выглядят по-разному для двоичных кодов и для кодов Грея, но кажутся сильно коррелированными в обоих случаях.

Две версии первых 32 кодов Грея в их графическом представлении. Несмотря на то, что оба семейства образуют коды Грея, в них по разному чередуются биты 0 и 1 в разных побитных слоях. Самый значимый бит меняется 4 раза. Второй значимый бит меняется 8 раз, а биты трех младших разрядов меняются, соответственно, 16, 2 и 1 раз. Если использовать это множество кодов Грея для расслоения изображения, то средние слои, очевидно, обнаружат наименьшую корреляцию между соседними пикселами.

А младшие разряды покажут слабую корреляцию пикселов, которая стремится к нулю, как при случайном распределении пикселов. Обычные двоичные коды. Видно, что в этих кодах разряды меняются существенно чаще. Даже поверхностный взгляд на коды Грея обнаруживает в них некоторую регулярность. Более тщательное исследование выявляет две важные особенности этих кодов, которые можно использовать при их построении. Первая особенность заключается в периодической смене значений всех пяти разрядов. Легко написать программу, которая сначала установит все пять разрядов в О, потом будет менять самый правый разряд у каждого второго кода, а остальные четыре разряда будет менять в середине периода своего правого соседнего разряда.

-----------------------------