Индексированный цвет

В вычислениях индексированный цвет — это способ управления цветами цифровых изображений ограниченным образом, чтобы сохранить память компьютера и хранилище файлов, одновременно ускоряя обновление дисплея и передачу файлов. Это форма сжатия векторного квантования.

Когда изображение кодируется таким образом, информация о цвете непосредственно не переносится данными пикселя изображения, а хранится в отдельной части данных, называемой палитрой: массив цветовых элементов. Каждый элемент массива представляет собой цвет, индексированный по его положению в массиве. Отдельные записи иногда называются цветовыми регистрами. Пиксели изображения не содержат полную спецификацию его цвета, а только его индекс в палитре. Этот метод иногда упоминается как псевдоколорный или косвенный цвет, поскольку цвета косвенно адресуются.

Возможно, первым устройством, поддерживавшим цвета палитр, был буфер кадра произвольного доступа, описанный в 1975 году Каджией, Сазерлендом и Чидллом. Это поддерживало палитру из 256 36-битных цветов RGB.

Размер палитры
Сама палитра хранит ограниченное количество различных цветов; 4, 16 или 256 являются наиболее распространенными случаями. Эти ограничения часто накладываются аппаратным оборудованием адаптера целевой архитектуры, поэтому не совпадение состоит в том, что эти числа являются точной мощностью двух (двоичный код): 22 = 4, 24 = 16 и 28 = 256. Хотя 256 значений могут быть вписывается в один 8-разрядный байт (а затем один индексный цветной пиксель также занимает один байт), пиксельные индексы с 16 (4-битным, полубайтом) или меньшим количеством цветов могут быть упакованы вместе в один байт (два куска на один байт, если используются 16 цветов или четыре 2-битных пикселя на байт, если используются 4 цвета). Иногда можно использовать 1-битные (2-цветные) значения, а затем до восьми пикселей можно упаковать в один байт; такие изображения считаются двоичными изображениями (иногда называемыми растровым или двууровневым изображением), а не индексированным цветным изображением.

Если простое наложение видеоизображений осуществляется прозрачным цветом, для этой цели специально зарезервирована одна запись палитры, и она обесценивается как доступный цвет. Некоторые машины, такие как серия MSX, имели прозрачный цвет, зарезервированный аппаратными средствами.

Индексированные цветные изображения с размерами палитр, превышающими 256 записей, встречаются редко. Практический предел составляет около 12 бит на пиксель, 4096 разных индексов. Использовать индексированные 16 бит / с или более не дает преимуществ прироста индексированных цветных изображений из-за того, что размер цветовой палитры в байтах больше, чем данные необработанных изображений. Кроме того, полезные режимы RGB Highcolor можно использовать с 15 бит / с и выше.

Если изображение имеет много тонких цветовых оттенков, необходимо выбрать ограниченный репертуар цветов для приближения изображения с использованием квантования цвета. Такую палитру часто недостаточно, чтобы точно представлять изображение; труднообрабатываемые функции, такие как градиенты, будут казаться блочными или полосами (цветовая гамма). В таких случаях обычно используется сглаживание, которое смешивает разноцветные пиксели в шаблонах, используя тенденцию человеческого зрения размывать соседние пиксели вместе, давая результат визуально ближе к оригиналу.

Цвета и палитры
Как цвета кодируются в карте цветовой палитры с заданным индексированным цветным изображением, зависит от целевой платформы.

Ранние методы окраски
У многих ранних персональных и домашних компьютеров были очень ограниченные аппаратные палитры, которые могли создавать очень маленький набор цветов. В этих случаях значение каждого пикселя отображается непосредственно на один из этих цветов. Известные примеры включают Apple II, Commodore 64 и IBM PC CGA, все из которых включают аппаратное обеспечение, которое может обеспечить фиксированный набор из 16 цветов. В этих случаях изображение может кодировать каждый пиксель с 4 битами, напрямую выбирая цвет для использования. Однако в большинстве случаев аппаратное обеспечение дисплея поддерживает дополнительные режимы, в которых только одно из этих цветов может использоваться в одном изображении, что является полезным методом для экономии памяти. Например, режим разрешения 320 × 200 CGA может отображать только четыре из 16 цветов за один раз. Поскольку палитры были полностью запатентованными, изображение, сгенерированное на одной платформе, не может быть непосредственно просмотрено должным образом на другом.

Другие машины этой эпохи имели возможность генерировать более широкий набор цветов, но обычно допускали только подмножество тех, которые будут использоваться в любом изображении. Примеры включают 256-цветную палитру на 8-разрядных машинах Atari или 4096 цветов терминала VT241 в графическом режиме ReGIS. В этих случаях для изображения было достаточно разрешить одновременное отображение небольшого подмножества из общего количества цветов, до 16 одновременно на Atari и VT241. Как правило, эти системы работали одинаково с их менее красочными братьями, но ключевое различие заключалось в том, что в палитре было слишком много цветов для прямого кодирования в пиксельных данных при ограниченном количестве видеопамяти. Вместо этого они использовали таблицу цветового поиска (CLUT), в которой данные каждого пикселя указывали на запись в CLUT, а CLUT был настроен под программный контроль. Это означало, что данные изображения CLUT должны храниться вместе с необработанными данными изображения, чтобы иметь возможность повторно воспроизводить изображение правильно.

RGB
Аппаратные палитры на основе цветных компонентных видео, таких как YPbPr и т.п., обычно заменялись в середине 1980-х годов более гибкой цветовой моделью RGB, в которой данный цвет можно получить, смешивая разные количества трех основных цветов: красного, зеленого и синий. Хотя общее количество разных цветов зависит от количества уровней на первичный и от конкретной аппаратной реализации (9-разрядный RGB обеспечивает 512 комбинаций, 12-разрядный RGB обеспечивает 4 096 и т. Д.), В этой модели Digital- to-Analog Converters (ЦАП) могут генерировать цвета — упрощая конструкцию аппаратного обеспечения — в то время как программное обеспечение может обрабатывать количество на уровни, используемые абстрактно, и управлять цветами RGB не зависящим от устройства способом. С цветами, хранящимися в формате RGB в палитрах файлов с индексированным изображением, любое изображение может отображаться (посредством соответствующих преобразований) в любой такой системе независимо от глубины цвета, используемой в аппаратной реализации.

Сегодня отображать аппаратные и графические форматы файлов, которые имеют отношение к индексированным цветным изображениям, почти исключительно управляют цветами в формате RGB, стандартная кодировка де-факто — так называемый truecolor или 24-бит RGB с 16 777 216 различными возможными цветами. Однако индексированные цветные изображения не являются подлинно ограниченными 24-битной кодировкой цвета RGB; палитры изображений могут содержать кодировку любого типа. Например, формат файла PDF поддерживает индексированный цвет в других цветовых пространствах, в частности CMYK и Adobe Distiller, по умолчанию будет преобразовывать изображения в индексированный цвет, если общее количество цветов на изображении равно или меньше 256. При использовании RGB, форматы файлов TIFF и PNG могут дополнительно хранить триплеты RGB с точностью до 16 бит (65 536 уровней на компонент), что дает в общей сложности 48 бит на пиксель. Предлагаемое расширение стандарта TIFF допускает цветные палитры не RGB, но это никогда не было реализовано в программном обеспечении по техническим причинам. Таблица цветовых карт формата индексированного цветного формата BMP хранит свои записи в порядке BGR, а не RGB, и имеет (в текущей версии) дополнительный неиспользуемый байт для заполнения для соответствия 32-битовому выравниванию слов во время обработки, но это по существу, еще 24-битное кодирование цвета RGB. (В более ранней версии формата BMP использовалось три байта на запись в 24-битной таблице цветовых карт, и многие файлы в этом формате все еще находятся в обращении, поэтому многие современные программы, которые читают файлы BMP, поддерживают оба варианта.)

Механизмы пиксельных бит
За исключением графических режимов с очень низким разрешением, ранние домашние и персональные компьютеры редко реализовывали дизайн с разрешением всех пикселей, то есть возможность изменять один пиксель на любой из доступных цветов независимо друг от друга. Их ограничения исходили от использования отдельных атрибутов цвета или области памяти, что привело к эффектам столкновения атрибутов. Кроме того, пиксельные биты и / или линии сканирования видеопамяти обычно были организованы нечетными способами, удобными для оборудования видеогенератора (таким образом, сберегая затраты на оборудование на конкурентном рынке), но иногда создавая трудности для людей, пишущих графические программы , Биты пикселя в изображениях с индексированным цветом, с разрешением в один пиксель не всегда смежны в видеопамяти или файлах изображений (т. Е. Короткая организация не всегда используется.) Некоторые видеоустройства, такие как 16-цветные графические режимы Enhanced Графический адаптер (EGA) и графический массив (VGA) для совместимых компьютеров IBM или видеобумага Amiga расположены в виде серии бит-плоскостей (в конфигурации, называемой planar), в которой связанные биты одного пикселя разделяются между несколькими независимых растровых изображений. Таким образом, пиксельные биты концептуально выровнены вдоль трехмерной оси Z. (Концепция «глубина» здесь не такая же, как у пиксельной глубины).

Ранние форматы файлов изображений, такие как PIC, хранятся немного больше, чем пустой дамп памяти видеобумага данной машины.

Некоторые форматы файлов с индексированным цветным изображением, такие как формат обмена изображениями (GIF), позволяют линиям сканирования изображения располагаться чередующимся образом (не линейным порядком), что позволяет отображать изображение с низким разрешением изображения на экране, пока оно еще загружается , так что пользователь компьютера может получить представление о его содержимом в течение секунд до прибытия всего изображения.

Как показано здесь, изображение было разделено на четыре группы строк: группа А содержит каждую четвертую строку, группа В содержит строки, следующие сразу за группами в группе А, группа С также содержит строки, непосредственно следующие линиям в группе В, а группа D содержит остальные строки, которые находятся между линиями группы C (непосредственно выше) и группами A (непосредственно ниже). Они сохраняются в файле в порядке A, C, B, D, так что, когда файл передается, вторая полученная группа (C) линий располагается по центру между линиями первой группы, что дает наиболее пространственно равномерное и распознаваемое возможно изображение, состоящее только из двух групп линий. Тот же метод может применяться с большим количеством групп (например, восемь), и в этом случае на каждом шаге следующая группа, которая должна быть отправлена, содержит строки, лежащие на или вблизи центров оставшихся полос, которые еще не заполнены данными изображения. Этот метод с четырьмя или восемью группами линий обычно использовался в ранней Всемирной паутине во второй половине 1990-х годов. Вместо того, чтобы оставлять фон (черный), как показано на рисунке выше, частичное изображение часто отображалось на экране путем дублирования каждой строки, чтобы заполнить пространство ниже его до следующей полученной линии изображения. Конечным результатом было непрерывное изображение с уменьшенным вертикальным разрешением, которое увеличилось бы до полного разрешения в течение нескольких секунд, когда появятся более поздние части данных изображения.

преимущества
Индексированный цвет экономит много памяти, пространства для хранения и времени передачи: с использованием truecolor каждому пикселю требуется 24 бита или 3 байта. Типичное несжатое изображение TrueColor с разрешением 640 × 480 VGA требует 640 × 480 × ?оддерживающими цвет форматами файлов, такими как PNG, для быстрого обмена изображениями с ограниченным цветом и хранения их в ограниченном пространстве для хранения.

Большинство форматов файлов изображений, которые поддерживают индексированные цветные изображения, также обычно поддерживают некоторую схему сжатия, повышая их способность хранить изображения в меньших файлах.

Интересные колористические и художественные эффекты могут быть легко достигнуты путем изменения цветовой палитры индексированных цветных изображений, например, для создания цветных изображений тонов сепии. Из-за отдельного характера связанного элемента палитры индексированных цветных изображений они идеально подходят для переназначения изображений в оттенках серого в ложные цвета с помощью ложных цветовых палитр.

Простое наложение видео может быть легко достигнуто благодаря технологии прозрачного цвета.

Управляя цветными аппаратными регистрами (таблица поиска цветов или CLUT) адаптера дисплея в режимах с индексированной цветовой графикой, полноцветные эффекты цветной анимации могут быть достигнуты без перерисовки изображения, то есть при низкой стоимости процессора; одно изменение значений регистра влияет на весь экран одновременно. В демосцену широко используется анимация цветной карты, также известная как «Цветовое циклирование». Экран логотипа загрузки Microsoft Windows в Windows 95, 98, ME и 2000 Professional (который использует режим цветного отображения VGA 320x200x256, потому что он является самым большим общим знаменателем на всех ПК) использует этот метод для полосы градиента прокрутки в нижней части экрана ; изображение представляет собой статическое изображение без пикселов, переписанных после его первоначального отображения. Пользовательские изображения загрузочного экрана могут использовать циклические цвета для анимации других частей изображений.

Недостатки
Основным недостатком использования индексированного цвета является ограниченный набор одновременных цветов для каждого изображения. Маленькие 4- или 16-цветные палитры по-прежнему приемлемы для маленьких изображений (значков) или очень простой графики, но для воспроизведения изображений реальной жизни они становятся почти бесполезными. Некоторые методы, такие как квантование цвета, сглаживание и сглаживание, объединенные вместе, могут создавать индексированные 256-цветные изображения, сравнимые с оригинальным, до приемлемого уровня.

Индексированные цветные изображения сильно зависят от собственных цветовых палитр. За исключением нескольких хорошо известных палитр фиксированного цвета (например, адаптера цветной графики-CGA), данные необработанного изображения и / или таблицы цветовой карты не могут быть надежно обмениваться между различными файлами изображений без какого-либо промежуточного отображения. Кроме того, если исходная цветовая палитра для данного проиндексированного изображения теряется, восстановить ее почти невозможно. Вот пример того, что происходит, когда индексированное цветное изображение (предыдущий попугай) связано с неправильной цветовой палитрой:

Индексированные цветные графические режимы для адаптеров дисплея имеют ограничение на 16 или 256 цветов, накладываемое аппаратными средствами. Индексированные цветные изображения с богатыми, но несовместимыми палитрами можно точно отображать только по одному, как в слайд-шоу. Когда необходимо отображать несколько изображений вместе, как и в мозаике миниатюр, часто используется общая или основная палитра, которая включает как можно больше различных оттенков в один набор, тем самым ограничивая общую точную доступность цвета.

Следующее изображение представляет собой мозаику из четырех различных индексированных цветных изображений, созданных с помощью единой общей палитры хозяев с 6-8-5 уровнями RGB плюс 16 дополнительных сери. Обратите внимание на ограниченный диапазон цветов, используемых для каждого изображения, и сколько элементов палитры осталось неиспользованным.

Индексированная цветовая модель Mosaic не достигает 24-битного предела для полной палитры RGB. Совместимость VGA для IBM PC, например, обеспечивает только 18-битную палитру RGB с 262 144 различными цветами в 16- и 256-цветных графических режимах.
Некоторое программное обеспечение для редактирования изображений позволяет применять гамма-коррекцию к палитре для файлов с индексированным цветным изображением. В целом, применить гамма-коррекцию непосредственно к цветной карте — это плохая практика, поскольку исходные значения цвета RGB теряются. Лучше применять гамма-коррекцию с оборудованием дисплея (большинство современных адаптеров дисплея поддерживают эту функцию) или в качестве активного промежуточного этапа программного обеспечения рендеринга посредством управления цветом, который сохраняет исходные значения цвета. Только когда индексированные цветные изображения предназначены для систем, которые не имеют какой-либо цветовой калибровки, и они не предназначены для кросс-платформенной, гамма-коррекция может применяться к самой таблице цветов.