На Горох
Информатика, 11 класс

§ 14. Кодирование цветовой информации

"Информатика (базовый и углублённый уровень)", Гейн А.Г., Сенокосов А.И.

Объяснение темы В оглавлении: § 14. Кодирование цветовой информации

Кратко о теме

Цветовое изображение состоит из пикселей, и для каждого нужно сохранить сведения о цвете. Цветовая модель задаёт способ записать эти сведения числами: например, RGB описывает цвет интенсивностями красного, зелёного и синего каналов. Глубина цвета показывает, сколько бит выделено на пиксель и сколько оттенков можно закодировать. Другой подход — индексное кодирование: пиксель хранит номер цвета в палитре. Понимание этих способов помогает оценивать размер изображения и выбирать подходящее кодирование.

Объяснение темы

Текст подготовлен нейронной сетью по теме параграфа и не заменяет учебник — важные факты и формулировки сверяйте с ним.

Определения и обозначения

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

Модель RGB задаёт цвет интенсивностями красного (R), зелёного (G) и синего (B) каналов. Каждый компонент показывает, насколько ярко соответствующий цветной свет участвует в итоговом цвете. Такое представление удобно для экранов, где изображение создаётся из светящихся пикселей.

Глубина цвета — количество бит, выделенное для кодирования цвета одного пикселя. Чем больше бит, тем больше разных кодов можно использовать и тем шире набор доступных оттенков. Это понятие помогает сравнивать цветовые возможности изображения и оценивать объём его данных.

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

Как это устроено

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

Чтобы сохранить цвет пикселя, компьютер записывает значения каналов RGB двоичными числами. Например, при восьми битах один канал может иметь 2⁸ = 256 уровней интенсивности. Если бит на все три канала поровну, общая глубина складывается: 8 + 8 + 8 = 24 бита на пиксель. Поэтому число возможных комбинаций составляет 2²⁴.

Для любого способа кодирования действует правило: i бит дают 2ⁱ возможных кодов, потому что каждый бит может принимать одно из двух значений. Увеличение глубины добавляет коды, а значит, позволяет различать больше оттенков. Но каждый дополнительный бит приходится хранить для каждого пикселя, поэтому объём несжатых данных растёт вместе с глубиной цвета.

При индексном кодировании пикселю назначают номер цвета в палитре, а не записывают значения всех цветовых компонентов. Если в палитре 256 цветов, индекс можно хранить в 8 битах, поскольку 2⁸ = 256. Это экономит место по сравнению с 24-битным RGB, но изображение ограничено цветами, которые есть в палитре; оттенок, которого в ней нет, напрямую задать нельзя.

Для предварительной оценки объёма несжатых данных перемножают число пикселей и глубину цвета. Результат получается в битах, поэтому его делят на 8, чтобы получить байты. Для индексного изображения к данным пикселей нужно добавить память палитры, а для оценки размера файла — учитывать также заголовок и применённое сжатие. Поэтому рассчитанный объём пикселей не всегда совпадает с размером файла.

Сравнение способов кодирования цвета

СвойствоRGB-кодированиеИндексное кодирование
Что хранится для каждого пикселяЗначения цветовых каналовНомер цвета в палитре
Как задаётся цветИнтенсивностями красного, зелёного и синегоВыбором записи из палитры
Связь с глубиной цветаГлубина складывается из битов каналовГлубина задаёт число бит для номера цвета
ПреимуществоМожно задавать широкий набор цветов без фиксированной палитрыМеньше данных на пиксель при небольшом наборе цветов
ОграничениеНа пиксель может требоваться больше битДоступны только цвета палитры, которая тоже занимает память

При выборе способа сначала смотрите, что записывается для одного пикселя, а затем учитывайте дополнительные данные. RGB удобен для широкого диапазона цветов, а индексы — когда достаточно ограниченной палитры. Для честного сравнения объёмов учитывайте и память самой палитры.

Разбор задач

Задача 1. Глубина и число цветов RGB

В модели RGB каждому каналу отведено по 8 бит. Определите глубину цвета и максимальное число кодируемых цветов. Сначала нужно понять, сколько бит приходится на один пиксель в целом, а затем применить правило: i бит дают 2ⁱ кодов. Предполагается, что используются все возможные комбинации значений трёх каналов.

  1. В RGB три канала: R, G и B. На каждый выделено 8 бит, поэтому суммарная глубина равна 8 + 8 + 8 = 24 бита на пиксель.
  2. Для 24 бит число комбинаций равно 2²⁴. Можно также проверить расчёт по каналам: каждый имеет 2⁸ = 256 значений, значит, всего 256 × 256 × 256 комбинаций.
  3. Вычисляем: 2²⁴ = 16 777 216. Это максимальное число цветовых кодов при такой глубине.

Ответ: глубина цвета — 24 бита на пиксель, максимально кодируется 16 777 216 цветов.

Задача 2. Объём несжатого изображения

Изображение размером 800 × 600 пикселей хранится без сжатия с глубиной цвета 24 бита. Оцените объём данных в байтах и килобайтах. Считаем только данные пикселей, без заголовка файла и других служебных сведений. Для перевода используем 1 КиБ = 1024 байта.

  1. Находим количество пикселей: 800 × 600 = 480 000. Каждый пиксель требует 24 бита, поэтому на всё изображение приходится 480 000 × 24 = 11 520 000 бит.
  2. Переводим биты в байты: 11 520 000 ÷ 8 = 1 440 000 байт. Деление на 8 нужно потому, что в одном байте восемь бит.
  3. Переводим байты в кибибайты: 1 440 000 ÷ 1024 = 1406,25 КиБ. При переводе в килобайты по десятичному стандарту делили бы на 1000, поэтому основание перевода нужно указывать.

Ответ: 1 440 000 байт, или 1406,25 КиБ при 1 КиБ = 1024 байта. Это оценка несжатых данных пикселей, а не обязательно размер готового файла.

Задача 3. Палитра или RGB

Для изображения 256 цветов выбирают индексное кодирование с палитрой или RGB с 8 битами на канал. Сравните объём данных пикселей изображения размером 1024 × 768 без учёта заголовка файла. Для палитры из 256 цветов требуется 8-битный индекс, а RGB использует 24 бита на пиксель. Отдельно проверим, как палитра влияет на итог.

  1. Находим число пикселей: 1024 × 768 = 786 432. При индексном кодировании на пиксели приходится 786 432 × 8 = 6 291 456 бит, то есть 786 432 байта.
  2. Для RGB требуется 24 бита на пиксель: 786 432 × 24 = 18 874 368 бит. В байтах это 18 874 368 ÷ 8 = 2 359 296 байт.
  3. Сравниваем: 24 бита в три раза больше 8 бит, поэтому данные пикселей RGB занимают втрое больше места. Палитра из 256 RGB-цветов при 8 битах на канал занимает 256 × 24 = 6144 бита, или 768 байт.

Ответ: данные пикселей занимают 786 432 байта при индексном кодировании и 2 359 296 байт при RGB. Если палитра хранится в файле, к индексному варианту нужно добавить её 768 байт; он всё равно значительно компактнее.

Типичные ошибки

Ошибка — считать, что 8 бит на каждый канал RGB означают глубину 8 бит на пиксель. Её допускают, когда смотрят на число бит для одного канала и забывают о двух остальных. Проверьте себя: сложите биты R, G и B; здесь получается 8 + 8 + 8 = 24.

Ошибка — путать число бит и число доступных цветов. При i битах получается 2ⁱ кодов, а не i цветов, потому что каждый бит имеет два возможных значения. Чтобы проверить результат, возведите 2 в степень, равную числу бит; например, 8 бит дают 256 кодов.

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

Ошибка — не переводить биты в байты или принимать объём пикселей за размер файла. В первом случае результат выражен не в тех единицах, а во втором не учтены заголовок и сжатие. Проверяйте единицы на каждом шаге: делите биты на 8, а затем отдельно уточняйте, оцениваете ли несжатые данные или готовый файл.

Связь с другими темами

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

Тема пригодится, когда нужно оценить объём графического файла, выбрать формат изображения или настроить качество цветной картинки. Сравнение глубины цвета и палитры помогает понять, почему файлы одного разрешения могут занимать разное место. При выборе следует учитывать не только число цветов, но и сжатие, которое влияет на размер файла.

Что запомнить

  • RGB кодирует цвет интенсивностями красного, зелёного и синего каналов.
  • В RGB белый получается при максимуме всех трёх каналов, чёрный — при их нулевых значениях.
  • Глубина цвета показывает число бит на пиксель.
  • При глубине i бит можно закодировать до 2ⁱ вариантов.
  • Индексный способ задаёт цвет пикселя номером записи в палитре.
  • Объём несжатых данных зависит от числа пикселей и глубины цвета.

Частые вопросы по теме

Почему в модели RGB используют именно три канала?

Экраны создают цвет смешением красного, зелёного и синего света. Изменяя интенсивность каждого из этих трёх компонентов, можно получить множество оттенков. Поэтому для описания цвета на экране достаточно трёх каналов.

Сколько цветов можно закодировать 24 битами?

24 бита дают 2²⁴ = 16 777 216 различных кодов. В RGB это обычно по 8 бит на каждый из трёх каналов, то есть 256 уровней интенсивности для каждого.

Почему при увеличении глубины цвета растёт размер изображения?

Для каждого пикселя приходится хранить больше бит. Если число пикселей не меняется, объём несжатых данных увеличивается пропорционально глубине цвета.

Чем индексное кодирование отличается от RGB?

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

Нужно ли учитывать палитру при расчёте размера индексного изображения?

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

Спросить по теме параграфа

§ 14. Кодирование цветовой информации

Эта же тема в других учебниках

Учебник

Оглавление →
Предмет
Информатика
Класс
11 класс
Учебник
"Информатика (базовый и углублённый уровень)", Гейн А.Г., Сенокосов А.И.