Сколько битов можно использовать для кодирования цвета одного пикселя черно-белого изображения?

Обновлено: 21.11.2024

для серии Making Fine
печатная серия

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

Пиксели и изображения

Цифровые изображения существуют в виде массива байтов в оперативной памяти компьютера или в виде файлов на картах памяти, жестких дисках, компакт-дисках или DVD-дисках. Ниже описаны несколько популярных форматов файлов.

Цифровые изображения получаются с цифровых камер или путем сканирования пленки или отпечатков. Сканеры определяются своим разрешением в точках на дюйм или в точках на дюйм — точках (фактически, пикселях) на дюйм, которые они могут получить от источника. Сканирование оригинала — негатива или слайда — всегда дает лучшее качество, чем сканирование отпечатка. Принтеры определяются их «разрешением» в dpi (точек на дюйм), обычно 720, 1440 или 2880 для Epson. Это число представляет собой шаг шагового двигателя, а не фактическое визуальное разрешение. Обычно для представления одного пикселя изображения требуется несколько точек принтера. Вам не нужно беспокоиться о соответствии между пикселями изображения и точками принтера; это обрабатывается редактором изображений и программным обеспечением драйвера принтера.

Разрешение изображения и размер печати

Изображение слева было снято на камеру Canon EOS-10D, конвертировано из RAW с помощью утилиты Canon File Viewer Utility (которую я позже заменил на Capture One DSLR LE), скорректировано по цвету (хотя и далеко не до конца). затем изменил размер до 260 x 175 пикселей в ширину в моем любимом графическом редакторе Picture Window Pro.

Справа показано диалоговое окно, используемое для изменения размера изображения. Исходное (текущее) изображение имеет ширину 3072 пикселя и высоту 2048 пикселов — прямо из EOS-10D. "Разрешение" 180 dpi (строго говоря, оно должно быть ppi -- пикселей на дюйм) устанавливается при преобразовании изображения из формата RAW. Это число является произвольным и не влияет на качество изображения. Оно носит информационный характер. То же самое относится к ширине 17,07 дюйма и высоте 11,38 дюйма. Он рассчитывается по уравнению,

Не имеет значения, будет ли изображение иметь разрешение 3437 dpi, 22,7 x 15,1 мм (фактический размер цифрового сенсора EOS-10D) или 17,07 dpi, 15 x 10 футов (рекламный щит); каждый из 3072 x 2048 (6,3 миллиона) пикселей (6,3 мегапикселя) совершенно одинаков. Я не менял разрешение (настройку dpi) при изменении размера изображения, поэтому «размер» нового изображения размером 200 x 133 пикселей крошечный: 1,11 x 0,74 дюйма. Этот «размер» совершенно не связан с размером, который вы видите на своем мониторе.

Чтобы добавить путаницы, слово "Резолюция" имеет несколько значений. Это может быть самая высокая пространственная частота, при которой виден линейный узор: см. серию статей о резкости изображения и ЧКХ. Часто это относится к общему количеству пикселей изображения, например, 3072 x 2048 пикселей для EOS-10D. Я предпочитаю любое из этих определений настройке dpi/ppi, которая не имеет ничего общего с общей детализацией изображения и которую можно изменить, не изменяя ни одного пикселя. Но мы застряли с ним в программах редактирования изображений.

Вы можете легко изменить Разрешение (т/д) , а значит, Ширину и Высоту , без изменения количества пикселей, т. е. вы можете изменить масштаб изображения без изменения размера (т. е. >пересэмплинг ) его. В Picture Window Pro откройте диалоговое окно «Изменить размер» (выше), щелкните стрелку справа от «Сохранить», затем выберите «Размер файла и пропорции». Когда вы можете изменить Width , Height или Resolution (dpi), остальные два следуют за ними. В Photoshop откройте диалоговое окно «Размер изображения», показанное ниже, и не устанавливайте флажок «Пересэмплировать изображение». Установите флажок Resample Image, если вы хотите изменить количество пикселей, чтобы изменить размер изображения.

Если щелкнуть правой кнопкой мыши изображение в Picture Window Pro, а затем щелкнуть «Информация об окне», появится окно «Информация об окне». Свойства измененного изображения размером 200 x 133 пикселей показаны слева. Числа размера такие же, как в столбце «Новый» в диалоговом окне «Изменить размер» выше. Но размер файла, 8305 пикселей, намного меньше, чем размер изображения 79800 байт (200x133 пикселей x 3 байта/пиксель). Это результат сжатия JPEG. Файлы GIF и PNG также сжимаются, а файлы TIFF — нет: размеры изображения и файла совпадают. Обычно я повышаю резкость изображения (используя простое преобразование Sharpen со значением Amount около 70%) после уменьшения его размера.

В Picture Window Pro вы выбираете размер отпечатка при печати. Атрибуты ширины и высоты игнорируются. Это не совсем относится к Photoshop.

  1. Вы можете изменить масштаб изображения с помощью диалогового окна "Размер изображения" в соответствии с приведенными выше инструкциями. Вам редко нужно изменить его размер.
  2. Нажмите «Параметры печати». вместо Печати. в Photoshop 6 (Печать с предварительным просмотром в Photoshop CS).При первом открытии этого поля для изображения масштаб устанавливается равным 100%, а флажок «Масштабировать по размеру носителя» снят. Если вы установите флажок «Масштабировать по размеру носителя», масштаб будет настроен таким образом, чтобы изображение соответствовало размеру страницы. Возможно, вам придется нажать кнопку «Параметры страницы». для настройки границ и ориентации (книжная или альбомная). Или вы можете оставить Scale to Fit Media не отмеченным флажком и вручную установить Scale . Небольшой предварительный просмотр страницы в окне «Параметры печати» помогает с настройками, которые будут запоминаться до тех пор, пока изображение остается открытым.

Сколько пикселей вам нужно для четкой печати?

300 пикселей на дюйм (ppi) — это примерно такое же резкое изображение, какое может видеть глаз на струйном отпечатке; он может быть очень впечатляющим при печати из файла с четким изображением. Помните, что эти числа представляют собой фактические пиксели на дюйм на отпечатке, а не значение ppi файла изображения.

Когда изображение отправляется на принтер, редактор изображений или драйвер принтера изменяет его размер до исходного разрешения принтера: 720 dpi для принтеров Epson Photo; 600 dpi для HP и Canon. Ручное изменение размера не требуется. Есть некоторые разногласия по поводу того, насколько хорошо работают редакторы изображений (особенно Photoshop). Прочтите Qimage Print Quality Challenge, чтобы узнать больше. Я доволен результатами, которые получаю от Picture Window Pro.

Большинство цифровых изображений должны быть уменьшены для отображения на мониторе — для веб-страниц или электронной почты. Многие люди стараются масштабировать изображения с измененным размером до 72 точек на дюйм. Абсолютно не нужно. Я не знаю ни одного веб-браузера или программного обеспечения для просмотра, которое обращало бы внимание на настройку dpi. Во всяком случае, большинство мониторов на самом деле отображают 80–100 пикселей на дюйм.

Форматы файлов изображений

  • Сжатие без потерь сохраняет все детали изображения побитно. Типичные коэффициенты сжатия составляют 30-50%, в зависимости от детализации изображения. Чем мельче детали, тем меньше сжатие. Сжатие без потерь используется форматом PNG. Он доступен, хотя и редко используется, в формате TIFF.
  • Сжатие с потерями приносит в жертву детализацию для достижения более высокого коэффициента сжатия. Степень сжатия зависит от детализации изображения и уровня качества, выбранного при сохранении изображения. JPEG и GIF используют разные типы сжатия с потерями.

Веб-браузеры поддерживают форматы JPEG, GIF и PNG, но не TIFF.

Каждая программа имеет собственные настройки качества JPEG; нет универсального стандарта. Photoshop имеет настройки от 0 до 12. IrfanView (удобная небольшая утилита для редактирования) имеет настройки от 0 до 100. Связь между настройками в разных программах совсем не линейная. Качество PW Pro = 70% (8,9 КБ) примерно эквивалентно качеству Irfanview = 50% (7,9 КБ) и качеству Photoshop = 3 (33 КБ в Photoshop CS; 13,8 КБ в Photoshop 6). Файлы Photoshop значительно больше, хотя и не имеют встроенных профилей ICC, возможно, потому, что в них есть дополнительное пространство, зарезервированное для данных Exif (настройки цифровой камеры). Это может быть недостатком для небольших изображений, используемых для отображения в Интернете.

Многие цифровые камеры сохраняют изображения в формате JPEG. Это может привести к проблемам, поскольку качество изображения может ухудшиться при сохранении и повторной загрузке изображений в формате JPEG. Ухудшение незначительно, когда файлы сохраняются с максимально возможным качеством JPEG, но оно может стать серьезным, если выбрано качество JPEG ниже максимального. JPEG следует использовать с осторожностью для изображений, предназначенных для высококачественной печати. Если вы планируете много редактировать изображение JPEG, лучше всего преобразовать его в TIFF. При сохранении и повторной загрузке изображений в формате TIFF качество не теряется.

Дополнительные форматы файлов Вы можете иногда сталкиваться с ними, но они не рекомендуются для общего использования.
Пользователям Macintosh следует добавлять соответствующие трехбуквенные суффиксы (JPG, TIF, PNG и т. д.) к именам файлов, чтобы пользователям Windows было легче их читать.

Используйте кнопку Переключиться на ученика, когда представляете это в классе

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

Данные в компьютерах хранятся и передаются в двоичном формате (1 и 0). Чтобы сохранить изображения на компьютере, это изображение необходимо разбить на последовательность 1 и 0. Это делается путем разбиения изображения на пиксели. Один пиксель — это один цвет. Количество пикселей, из которых состоит изображение, зависит от разрешения этого изображения. Если разрешение изображения 1920x1080, то будет 2 073 600 пикселей (просто перемножьте два числа, составляющие разрешение).

Цвет на изображениях

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

Если есть 1 бит, то могут быть представлены 2 цвета (черный и белый), где 0 соответствует белому, а 1 — черному.Ниже приведен пример простого черно-белого изображения.

Простое изображение лица

Это изображение закодировано следующим образом: белые пиксели кодируются 0, а черные пиксели кодируются 1.

Простое представление лица

Каждый дополнительный бит, добавленный к пикселю, удваивает количество цветов, которые могут быть представлены. Если на каждый пиксель приходится 2 бита, можно представить 4 цвета, 3 бита — 8 цветов и т. д.

Компьютерные мониторы, телевизоры и другие цветные дисплеи используют RGB (красный, зеленый, синий) для отображения цветов. Цвета RGB используют числа от 0 до 255 для каждого элемента (0-255 для красного, 0-255 для зеленого, 0-255 для синего). Если все числа равны 0, цвет черный (0, 0, 0). Если все числа 255, цвет белый (255, 255, 255). Если один цвет равен 255, а другие равны 0, то чисто этот цвет (255, 0, 0) дает вам красный цвет, (0, 255, 0) дает вам зеленый, а (0, 0, 255) дает вам синий. Любая другая комбинация цветов даст другой цвет.

0-255 в двоичном формате может быть представлено 8 битами, 1111 1111 — это 255 в двоичном формате, что дает нам 256 значений для работы или 2^8 для каждого элемента RGB. Таким образом, с 8 битами для каждого элемента всего 24 бита для RGB.

Допустим, цвет представлен значением RGB (64, 224, 208). Это будет представлено как (01000000, 11100000, 11010000) с соответствующими двоичными значениями, сохраненными для R, G и B соответственно в каждом пикселе. с этими значениями RGB.

С 256 значениями для каждого основного цвета у нас есть 256 x 256 x 256 = 16 777 216 цветов, и человеческий глаз может воспринимать около 10 миллионов цветов, поэтому этого количества цветов достаточно.

8 бит эквивалентны 1 байту, поэтому для представления одного пикселя определенного цвета требуется 3 байта (3 группы по 8 бит).

Размер изображения и разрешение

При обсуждении кодирования изображений полезно также знать, как работает качество изображения. Двумя основными элементами, влияющими на качество изображения, являются размеры в пикселях и разрешение (плотность пикселей). Скажем, у вас есть изображение круга с размерами пикселей 10x10 пикселей и разрешением (плотностью пикселей) 10 пикселей на дюйм. Это означает, что изображение круга умещается в квадрате размером 1 дюйм и состоит из 100 пикселей. Если бы вы растянули изображение до 2x2 дюймов, но сохранили то же количество пикселей, у вас были бы размеры 10x10 пикселей, но теперь разрешение составляет 5 пикселей на дюйм, поскольку вы растягиваете пиксели в области, которая в два раза больше. Это означает, что вы фактически уменьшили разрешение изображения, растянув его, и круг не будет выглядеть более гладким. Это хорошо видно, если вы манипулируете изображением в программе типа photoshop или paint, увеличение размера изображения не увеличивает разрешение.
Теперь предположим, что вы взяли это круглое изображение 10x10 пикселей с разрешением 10 пикселей на дюйм, и когда вы увеличили изображение до 2x2 дюйма, вы сохранили разрешение на постоянном уровне 10 пикселей на дюйм. Это приводит к изменению размеров на 20x20 пикселей, в результате чего общее количество пикселей увеличивается до 400 пикселей, что в 4 раза больше общего количества пикселей по сравнению с 10x10 пикселей в пространстве 1x1 дюйм. Это связано с тем, что вы удваиваете размер изображения, но сохраняете разрешение таким же, поэтому общее количество пикселей должно было увеличиться в четыре раза (поскольку это квадрат). Побочным эффектом этого изменения станет более плавный круг.

В этом видео объясняется то, что только что обсуждалось относительно размера и разрешения на примере круга.

Когда выходят новые смартфоны, камеры становятся одним из главных маркетинговых ходов. В рекламе этих телефонов указывается количество мегапикселей камеры (8 МП, 12 МП, 14 МП, 16 МП и т. д.). Один мегапиксель = 1 миллион пикселей, потребности вашей камеры зависят от размера отпечатков изображений, которые вы будете делать. Если вы будете просматривать изображения на HD-телевизоре с разрешением 1080p, тогда у этого телевизора всего около 2 мегапикселей, а у телевизора 4k или компьютерного монитора — около 8 мегапикселей. Если вы печатаете изображение размером 8 x 12 дюймов с разрешением 300 точек на дюйм (точек на дюйм, в основном печатная версия пикселей на дюйм) без изменения размера или «увеличения» изображения, вам потребуется около 8 мегапикселей. Это число увеличивается по мере увеличения размера отпечатка. Для печати изображения размером 30 x 45 дюймов с разрешением 200 DPI вместо 300 DPI потребуется около 54 мегапикселей. Конечно, приобрести 54-мегапиксельную камеру сейчас очень дорого, поэтому вам, скорее всего, придется использовать программное обеспечение для изменения размера изображения.

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

QR-коды

QR-коды (Quick Response) являются обычным явлением и могут считываться камерой на большинстве современных смартфонов. Они способны кодировать в несколько сотен раз больше данных, чем штрих-код, поскольку могут хранить информацию как по вертикали, так и по горизонтали. Одномерные штрих-коды могут хранить около 20–25 символов, а двухмерные QR-коды могут содержать либо 4296 буквенно-цифровых (цифры и буквы) символов, либо 7089 цифровых (только цифры) символов.

Поскольку в QR-коде можно хранить гораздо большее количество символов, вот несколько примеров информации, обычно хранимой в QR-кодах:

  • Контактные данные
  • Данные календаря
  • URL
  • Адрес электронной почты
  • Номер телефона
  • СМС
  • Обычный текст
  • Географическое местоположение

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

Упражнение

Распечатайте QR-код и посмотрите, что вы можете с ним сделать, прежде чем он станет нечитаемым, насколько вы можете исказить или уничтожить его?

Bpp или бит на пиксель обозначает количество бит на пиксель. Количество различных цветов в изображении зависит от глубины цвета или количества битов на пиксель.

Кратко о математике:

Это похоже на игру с двоичными битами.

Сколько чисел может быть представлено одним битом.

Сколько двухбитовых комбинаций можно составить.

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

Где bpp обозначает количество бит на пиксель. Подставьте 1 в формулу, получите 2, подставьте 2 в формулу, получите 4. Она растет экспоненциально.

Количество разных цветов:

Теперь, как мы сказали в начале, количество различных цветов зависит от количества битов на пиксель.

Таблица некоторых битов и их цвета приведены ниже.

В этой таблице показаны различные биты на пиксель и количество цвета, которое они содержат.

Оттенки

Вы можете легко заметить закономерность экспоненциального роста. Знаменитое изображение в оттенках серого имеет 8 бит на пиксель , что означает, что оно содержит 256 различных цветов или 256 оттенков.

Оттенки могут быть представлены как:

Цветные изображения обычно имеют формат 24 бит/пиксель или 16 бит/пиксель.

Мы узнаем больше о других цветовых форматах и ​​типах изображений в руководстве по типам изображений.

Цветовые значения:

Ранее мы видели в учебнике по понятию пикселя, что значение 0 пикселей обозначает черный цвет.

Черный цвет:

Помните, что значение 0 пикселей всегда соответствует черному цвету. Но не существует фиксированного значения, обозначающего белый цвет.

Белый цвет:

Значение, обозначающее белый цвет, можно рассчитать следующим образом:

В случае 1 бит/пиксель 0 – черный, 1 – белый.

В случае 8 бит/с 0 означает черный, а 255 – белый.

Серый цвет:

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

Серый цвет на самом деле является средней точкой черного и белого. При этом

В случае 8 бит на пиксель значение пикселя, обозначающее серый цвет, составляет 127 или 128 бит на пиксель (если считать от 1, а не от 0).

Требования к хранению изображений

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

Размер изображения

Размер изображения зависит от трех факторов.

  • Количество строк
  • Количество столбцов
  • Количество бит на пиксель

Формула расчета размера приведена ниже.

Размер изображения = количество строк * столбцов * бит/пиксель

Это означает, что если у вас есть изображение, скажем, вот это:

Предположим, что в нем 1024 строки и 1024 столбца. И поскольку это изображение в градациях серого, оно имеет 256 различных оттенков серого или количество битов на пиксель. Затем подставляя эти значения в формулу, получаем

Размер изображения = количество строк * столбцов * бит/пиксель

Но поскольку это не стандартный ответ, который мы распознаем, мы преобразуем его в наш формат.

Преобразование в байты = 8388608 / 8 = 1048576 байт.

Перевод в килобайты = 1048576 / 1024 = 1024 КБ.

Перевод в мегабайты = 1024/1024 = 1 Мб.

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

Изображения могут быть представлены несколькими способами. Наиболее распространенным является сетка из маленьких квадратов, называемых пикселями. В очень простом изображении, которое было только черно-белым, мы могли представить каждый пиксель как представленный 0 (черный) или 1 (белый). Таким образом, это изображение:

Можно хранить как двоичную строку из 36 бит: 111111101101111111101101100001111111. Чтобы успешно нарисовать изображение из этого шаблона, нам нужно знать, как интерпретировать эти серии двоичных цифр как 6 строк по 6 пикселей (а не 4 строки по 6 пикселей). 9 пикселей), поэтому форматы файлов реальных изображений часто содержат дополнительную информацию, например размер изображения.

На изображениях часто требуется передать оттенки серого или цвета. Для этого каждому пикселю может быть присвоено более одного бита. Если каждому пикселю присвоить значение, состоящее из 2 бит, мы можем иметь 4 цвета:

Используя эту схему, мы могли бы сделать такой заштрихованный круг:

Для представления этого изображения требуется 72 бита — сетка пикселей 6x6, для каждого из которых требуется 2 бита. Еще раз, чтобы нарисовать изображение из битов, нам нужно знать размеры изображения; но теперь нам также нужно указать количество битов, используемых для каждого пикселя. Эти 72 бита могут представлять изображение 3x6, где каждый пиксель представлен 4 битами (4 бита мы можем представить \(2^4 = 16\) разных оттенков серого).

Шаблон битов имеет только то значение, которое мы ему приписываем.

32 бита могут представлять изображение 4x8 из 1-битных пикселей, или изображение 4x4 из 2-битных пикселей, или последовательность из 4 букв ASCII, или действительно большое двоичное число, или что-то еще.

Что насчет цветов? Помните, биты имеют только то значение, которое мы им приписываем. Мы могли бы интерпретировать 2 бита на пиксель так:

И в итоге получится вот это изображение:

Если нам нужно более 4 цветов, нам просто нужно больше 2 бит. С 8 битами на пиксель мы можем представить \(2^8 = 256\) разных цветов или оттенков серого. Этого достаточно для черно-белой фотографии, но не позволяет получить тонкие оттенки цвета на фотографии. Для полноцветных изображений обычно используется 24 бита на пиксель, что позволяет использовать \(2^ = 16 777 216\) разных цветов.

Конечно, реальные изображения используют гораздо большее количество пикселей, чем мы видели здесь. Например, 12-мегапиксельная камера снимает изображения размером около 4000x3000 пикселей. Если каждый из этих пикселей хранить как 24-битное значение, это изображение будет состоять из 4000 x 3000 x 24 = 288 000 000 битов информации! Это 36 000 000 байт или примерно 34,3 МБ. Однако, если бы вы посмотрели на файл изображения, созданный этой камерой, вы бы обнаружили, что он намного меньше 34 МБ, даже несмотря на то, что в файле хранится дополнительная информация помимо содержимого каждого пикселя (размеры изображения, количество битов и т. д.). на пиксель и т. д.). Это связано с тем, что изображение было сжато. Наиболее распространенные форматы изображений (gif, jpeg, png) включают некоторую форму сжатия для уменьшения места, необходимого для хранения их информации… тема, о которой мы узнаем подробнее позже.

Самопроверка

В-1. Сколько бит потребуется для изображения 10 x 20 с 8 различными возможными цветами на пиксель? (Подсказка: сколько бит требуется для представления 8 разных цветов)

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

Когда мы говорим о разрешении изображения или устройства отображения, мы можем говорить о двух разных вещах:

Количество пикселей в изображении. Например, типичный экран компьютера с низким разрешением может иметь разрешение 1024×768.Всего это 786 432 пикселя, или около трех четвертей мегапикселя. Видеоизображение высокой четкости (HD) имеет размер 1920×1080 или около 2 мегапикселей. Цифровые камеры могут создавать 5 или 10 мегапикселей или около того, что означает, что изображение больше, чем вы можете разместить на большинстве экранов.

Разрешение также может относиться к плотности пикселей на дисплее, обычно называемой пикселями на дюйм (PPI) или точками на дюйм (DPI). Компьютерные экраны, как правило, имеют разрешение около 100 пикселей на дюйм, но некоторые из них больше. Дисплеи марки Apple Retina находятся в диапазоне 220–320 пикселей на дюйм. Мы можем добиться гораздо большей плотности, используя печать на бумаге: высококачественная лазерная печать может иметь разрешение 1200 dpi или даже выше. Проекционные экраны, вероятно, имеют очень низкую плотность только потому, что одинаковое количество пикселей растянуто на несколько футов. По моим оценкам, плотность нашего проекционного экрана в классе составляет менее 20 пикселей на дюйм (около 1024 пикселей на 1,5 м).

Так как же кодировать пиксели как биты? Самый простой случай, когда изображение полностью черно-белое. То есть каждый пиксель либо включен, либо выключен. Тогда мы можем представить каждый пиксель как ровно один бит.

На бумаге или доске разумно оставить 0=выкл.=белый (цвет фона по умолчанию) и 1=вкл.=черный (цвет пера). Итак, давайте нарисуем сетку 8×8 пикселей. Мы заполним некоторые пиксели и оставим другие пустыми. На этой конкретной сетке изображен пришелец из ранней аркадной игры Space Invaders.

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

Опять же, двоичные строки длинные, поэтому удобно иметь возможность сокращать их с помощью шестнадцатеричной системы счисления. Это приводит к очень естественному кодированию, когда вы пишете 8,2,4,1 над каждой группой из 4 пикселей, а затем конвертируете результаты. Вы можете увидеть шестнадцатеричную кодировку справа от изображения. На самом деле, поиск в Google этой шестнадцатеричной строки — 183C7EDBFF245AA5 — в настоящее время приводит вас к одной странице: моему сообщению в блоге на эту тему!

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

Пример проблемы с декодированием

Мое решение доступно; это символ растрового шрифта 8×8. Для дальнейшей практики расшифруйте эти дополнительные символы из этого шрифта:

  • 3C66703C0E663C00
  • 7E607C0606663C00
  • C6CCD8F0D8CCC600
  • 00663CFF3C660000
  • 0066ACD8366ACC00

Вы также можете кодировать символы в шестнадцатеричном формате на основе этого изображения шрифта (увеличьте масштаб, нажав Ctrl-плюс, чтобы увидеть сетки 8 × 8 над каждым символом).

Вы также можете использовать кодирование 1 бит на пиксель с цветом, если каждое закодированное изображение имеет один сплошной цвет. Например, в старых версиях игры Pac-Man главный герой и каждый призрак имеют сплошной цвет, хотя все цвета разные. Эти формы все еще могут быть закодированы как 1 бит на пиксель. (На уроке мы будем использовать мой мастер-класс по работе с шестнадцатеричными изображениями, который добавляет цвет к методу кодирования 1 бит на пиксель другим способом.)

Игра Pac-Man: каждый движущийся персонаж окрашен в один сплошной цвет

Отображение 1 бит на пиксель в кампусе

    транслировался в космос радиотелескопом Аресибо в Пуэрто-Рико в 1974 году. Сделано из жидкостей в чашках Стивом Зильберманом.

Как бы мы объединили несколько цветов в одном изображении? В качестве краткого экскурса давайте рассмотрим, что мы понимаем под цветом.

Что такое цвет?

Цвет относится к длине волны света. Мы воспринимаем короткие волны как фиолетовые, а длинные как красные. Между ними находится обычный спектр цветов: оранжевый, желтый, зеленый, синий и т. д. Этот диапазон охватывает видимый свет, но есть и «цвета» (другие длины волн), которые мы вообще не можем воспринимать. Свет с более длинными волнами, чем красный, называется инфракрасным, а с более короткими волнами, чем фиолетовый, — ультрафиолетовым.

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

Когда вы рисовали в начальной школе, вы могли знать о трех основных цветах: красном, желтом и синем. Красный и желтый дают оранжевый, желтый и синий — зеленый и т. д.

из Color Theory — нажмите, чтобы узнать, почему он помечен как "вводящий в заблуждение"

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

Субпиксели

Пиксель в большинстве технологий отображения на самом деле состоит из трех разных ламп. Они настолько плотно упакованы, что мы обычно не можем различить их по отдельности, поэтому они активируют наши колбочки, как если бы они производили единственную длину волны. Ниже представлена ​​фотография двух вариантов дисплея iPad под микроскопом (iPad 3 слева — дисплей Retina от Apple).

На некоторых больших дисплеях эти «субпиксели» можно увидеть невооруженным глазом, если стоять достаточно близко. Ниже показан крупный план экспозиции возле Бруклинской музыкальной академии на Флэтбуш-авеню. Хорошо видно, что пиксели имеют шесть лампочек: две красных в центре и зеленую и синюю в противоположных углах.

Я написал небольшую программу для рендеринга изображений при моделировании субпиксельного макета знака BAM. Если вы щелкните правой кнопкой мыши ниже и откроете Барта в новой вкладке, вы можете увеличить масштаб (control-плюс). Вы увидите, что то, что вы воспринимаете как желтое на расстоянии, на самом деле просто красное и зеленое; белки глаз Барта просто красно-зелено-голубые.

Кодировка цвета

Теперь вернемся к кодированию цветных изображений в виде битов. Представьте, что вы используете 3 бита на пиксель. (Мы называем количество битов, используемых для представления цвета одного пикселя, глубиной цвета изображения.) Мы бы сопоставили каждый бит с одной из красных-зеленых-синих первичных ламп. Это приводит к этим восьми цветам:

  • 0 = 000 = черный
  • 1 = 001 = синий
  • 2 = 010 = зеленый
  • 3 = 011 = голубой
  • 4 = 100 = красный цвет
  • 5 = 101 = пурпурный
  • 6 = 110 = желтый цвет
  • 7 = 111 = белый

Некоторые системы расширили это до 4-битного цвета, используя 4-й бит для обозначения дополнительной яркости всех ламп одновременно. Это дает 16 цветов, как показано ниже. См. также мою демонстрацию 4-битного цвета.

Из Википедии об адаптере цветной графики IBM (1981 г.)

Теперь перейдем к 6-битному цвету. Так как он кратен 3, мы можем управлять яркостью каждой лампы независимо: 2 бита для красного, 2 бита для зеленого, 2 бита для синего. Мы будем интерпретировать эти два бита как:

  • 0 = 00 = выкл.
  • 1 = 01 = низкий уровень
  • 2 = 10 = средний
  • 3 = 11 = высокий уровень

Затем цвет 110110 объединяет ярко-красный, темно-зеленый и средний синий. Когда все три лампы имеют одинаковую яркость, мы получаем оттенки серого. таким образом, 000000 — черный, 010101 — темно-серый, 101010 — светло-серый, а 111111 — белый. Всего существует 2⁶ = 64 возможных цвета с 6 битами.

Можно применить этот метод к любому кратному трем: 9-битному цвету (512 возможных цветов), 12-битному цвету (4096) и так далее. Пропустив их, нашей следующей остановкой будет 24-битный цвет. Он также известен как истинный цвет, поскольку считается, что в нем содержится больше цветов (16 миллионов!), чем может воспринять любой человек. Используя 8 бит (один байт) для каждой лампы, мы получаем яркость от 0 до 255. Выразив эти 8 бит в виде двух шестнадцатеричных цифр, мы получим диапазон от 00 до FF.

Истинные цвета — это шестизначные шестнадцатеричные числа, например 6B1CC6 . Давайте разобьем это на биты:

С этим цветом у нас есть красная лампа с яркостью \(6B_ = 107_\) (из 255, или 42%). Зеленая лампа имеет \(1C = 28\) из 255 или 11% яркости. Синяя лампа имеет \(C6 = 198\) из 255, или 78% яркости. Очевидно, что синий является доминирующим цветом, за ним следует красный. Вот пример 6B1CC6 :

Вы можете играть с шестнадцатеричными цветами, регулируя ползунки в моей демонстрации 24-битных цветов, и есть цветовой тест под названием "Что за шестнадцатеричный?"

    (прекрасное демонстрационное видео со Стивом Молдом)
  • Пример остаточного изображения физиологических цветов из программы BBC Four The Spectrum of Science [видео] и физика Хелен Черски: False color/B&W

Представления, которые мы исследовали до сих пор — просто запись битов, представляющих цвета пикселей, — неофициально известны как растровые изображения. На его основе существует формат изображения BMP, но он содержит дополнительные биты для указания глубины цвета, размера изображения и некоторых других возможностей. Мы сосредоточимся на трех форматах: PNG, JPEG и GIF.

PNG (Portable Network Graphics) – это сжатый формат изображения, поддерживающий 24-битный цвет. Это отличный выбор для комиксов, рисунков, логотипов и значков.

JPEG (Joint Photographic Experts Group) также сжат, но он разработан специально для фотографий. В отличие от PNG, сжатие в формате JPEG происходит с потерями — оно фактически отбрасывает часть информации в исходном изображении, поэтому размер файла может быть меньше. На фотографиях потери в основном незаметны, хотя если вы собираетесь обрезать и редактировать свои фотографии, лучше сжимать только один раз, в самом конце. Каждый раз, когда вы редактируете и сохраняете файл JPEG, теряется больше информации.

Взгляд (слегка преувеличенный) на использование JPEG для штриховых рисунков, Луи Брэнди

GIF (Graphic Interchange Format) — относительно старый формат, но он остается популярным в некоторых приложениях, главным образом потому, что поддерживает простую анимацию. Формат может содержать последовательность изображений, которые затем отображаются в быстрой последовательности и обычно циклически. Содержимое пикселей сжимается с использованием алгоритма LZW без потерь.

Большим недостатком GIF является то, что каждое изображение может использовать не более 256 цветов. Это связано с тем, что данные пикселей кодируются с использованием 8 бит на пиксель. Программа, которая создает GIF, может выбрать, какие 256 цветов из полных 16 миллионов 24-битных цветов использовать, так что это немного помогает. Но он по-прежнему не подходит для фотографий, которые обычно имеют тонкие градации цвета в светах и ​​тенях.

В этом разделе мы более подробно рассмотрим один метод сжатия изображений без потерь. Этот метод известен как кодирование длины цикла (RLE). Мы будем использовать это изображение флага размером 16×11 пикселей в качестве примера. Он показан увеличенным слева, поэтому все пиксели видны независимо друг от друга, а затем уменьшенным справа. Желтые полосы и затемненные края придают ему трехмерный вид.

В изображении используются красный, белый, синий, желтый, темно-красный и темно-белый (светло-серый) цвета. Давайте представим цвета, используя 4 бита, где четвертый (крайний левый) бит указывает яркость, как на изображении CGA 1981 года выше или в моей демонстрации 4-битного цвета.

Самое простое (растровое) кодирование заключается в записи четырех битов для каждого пикселя в порядке слева направо и сверху вниз. Таким образом, в одном байте мы можем представить два пикселя. Общее количество пикселей 16×11 = 176, то есть 176÷2 = 88 байт. Первые несколько строк будут закодированы как эти байты (шестнадцатеричная запись):

Чтобы сжать это изображение с помощью кодирования длин серий, мы должны сначала указать цвет, а затем количество пикселей по горизонтали, которые нужно закрасить этим цветом. Например, в первой строке будет написано «9 пикселей красного цвета, затем 6 пикселей белого, затем 1 пиксель темно-красного». Каждая инструкция может быть закодирована как один байт: первые четыре бита для количества пикселей (до 15), а затем еще четыре бита для цвета этих пикселей. Таким образом, первая строка будет представлена ​​только этими тремя байтами:

Для второй строки потребуется гораздо больше инструкций, потому что она так сильно меняет цвета:

Третья строка:

Если каждая строка не содержит большого количества чередований, это поможет сэкономить довольно много байтов. Моя оценка:

Стеганография – это способ отправить кому-либо секретное сообщение, при этом сообщение "спрятано на виду". Если вы не знаете, что искать, вы никогда не заметите, что это там.

В этом разделе демонстрируется написанная мной программа стеганографии изображений. Он берет обычное изображение с истинным цветом и манипулирует младшими двумя битами каждого цветового байта, сохраняя там вторичное 6-битное цветное изображение. Изменения, которые это влечет за собой, настолько незначительны, что вы даже не заметите их. (Это работает только со сжатием без потерь; если вы сохраните фотографию как обычный JPEG, ее сжатие с потерями нарушит скрытое изображение.) Вы можете открыть скрытое изображение, нажав кнопку сдвига влево ( Shift 0 : образец пикселя 727F1F = 01110010 01111111 00011111 >>

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

Возможно, это даже немного заметнее, когда внутреннее изображение тоже мультипликационное.

Читайте также:

Бит на пиксель Количество цветов
1 бит на пиксель 2 цвета
2 бита на пиксель 4 цвета
3 бита на пиксель 8 цветов
4 бита на пиксель 16 цветов
5 бит на пиксель 32 цвета
6 бит на пиксель 64 цвета
7 бит на пиксель 128 цветов
8 бит на пиксель 256 цветов
10 бит на пиксель 1024 цвета
16 бит на пиксель 65536 цветов
24 бит на пиксель 16777216 цветов (16,7 миллиона цветов)
32 бита на пиксель 4294967296 цветов (4294 миллиона цветов)