Природа цифрового изображения: пиксели, цветовые каналы и системы координат
Природа цифрового изображения: пиксели, цветовые каналы и системы координат
Человеческий глаз воспринимает картину Леонардо да Винчи «Мона Лиза» как плавные переходы полутеней, тончайшие лессировки и неуловимую улыбку. Но если передать эту же картину в алгоритм машинного зрения, никакой магии внутри процессора не произойдёт: алгоритм «увидит» исключительно гигантскую прямоугольную таблицу из миллионов целых чисел.
Компьютер полностью слеп к художественным образам, геометрическим фигурам и физическим объектам, пока мы не научим его интерпретировать эту числовую матрицу. Чтобы создавать системы машинного зрения — от автопилотов до конвейерных детектеров брака, — необходимо понимать, как непрерывный световой поток реального мира превращается в дискретные значения и как эти значения структурированы в памяти программы.
Дискретизация и пиксель: как свет становится числом
Свет в физическом мире непрерывен. Когда фотоны отражаются от поверхности предмета и попадают на кремниевую матрицу цифровой камеры, они взаимодействуют с миллионами светочувствительных элементов — фотодиодов.
Каждый отдельный фотодиод накапливает электрический заряд, пропорциональный количеству упавшего на него света. Затем аналого-цифровой преобразователь (АЦП) измеряет этот заряд и переводит непрерывную аналоговую величину в дискретное число. В этот момент происходят два ключевых процесса:
- Пространственная дискретизация (семплирование) — непрерывное оптическое изображение разбивается на сетку крошечных неделимых элементов. Такой базовый элемент называется пикселем (сокращение от английского picture element).
- Квантование по уровню — непрерывная физическая яркость округляется до ближайшего целочисленного значения из фиксированного диапазона.
В классической обработке изображений и машинном зрении стандартной глубиной цвета для одного канала является 8 бит ( байт памяти на один элемент).
Пояснение: один байт состоит из 8 бит, каждый из которых может принимать значение 0 или 1. Число задает полное количество уникальных состояний, которые можно закодировать таким объемом данных.
В 8-битном представлении диапазон градаций яркости лежит в пределах от до :
- Значение 0 соответствует полному отсутствию светового сигнала (абсолютно чёрный цвет).
- Значение 255 соответствует максимальной насыщенности датчика светом (чистый белый цвет).
- Значения от 1 до 254 кодируют монотонно возрастающие оттенки серого.
В коде на Python и в библиотеках машинного зрения этот диапазон представляется беззнаковым 8-битным типом данных uint8 (unsigned integer 8-bit). Если вы попытаетесь записать в такой пиксель число , произойдет переполнение типа данных, и значение превратится в (), что приведет к визуальным артефактам на изображении.
Системы координат: ловушка и строк с колонками
В школьной геометрии и математическом анализе мы привыкли к декартовой системе координат: начало отсчёта находится в левом нижнем углу, ось направлена вправо, а ось — вверх.
В цифровых изображениях и компьютерной графике принята совершенно другая система — экранная (растровая) система координат.
Начало координат в цифровом изображении всегда зафиксировано в левом верхнем углу. Ось направлена слева направо (по горизонтали), а ось направлена сверху вниз (по вертикали).
Эта традиция берет начало со времён электронно-лучевых трубок (ЭЛТ) первых телевизоров и мониторов, где электронный луч сканировал экран построчно — начиная с верхней левой точки и смещаясь вправо и вниз.
| Параметр | Декартова система | Экранная система координат |
|---|---|---|
| Начало отсчёта | Левый нижний угол | Левый верхний угол |
| Ось X | Горизонтально вправо | Горизонтально вправо |
| Ось Y | Вертикально вверх | Вертикально вниз |
| Квадрант значений | Положительные | Только неотрицательные целые числа |
Однако здесь инженеров машинного зрения подстерегает главная концептуальная ловушка: несоответствие между экранными координатами и адресацией элементов в двумерных матрицах.
Если изображение имеет ширину (Width, количество пикселей по горизонтали) и высоту (Height, количество пикселей по вертикали):
- В терминах геометрических координат точка задается парой , где , а .
- В терминах матричной алгебры и массивов данных изображение представляется таблицей, где строки соответствуют высоте, а столбцы — ширине. Обращение к элементу матрицы всегда происходит по правилу:
[номер_строки, номер_столбца].
Номер строки (смещение по вертикали) — это координата . Номер столбца (смещение по горизонтали) — это координата .
Следовательно, для доступа к пикселю с координатами в программном коде мы обращаемся к ячейке матрицы по индексам [y, x].
Цветовое пространство RGB: как из трёх слоев собрать реальность
Изображение в оттенках серого описывается одной матрицей размера . Но окружающий мир полон красок. Каким образом сенсоры и алгоритмы кодируют цвет?
Человеческое зрение обладает трихроматической природой: на сетчатке глаза расположены рецепторы-колбочки трех типов, чувствительные к коротковолновой (синий), средневолновой (зеленый) и длинноволновой (красный) частям спектра. Любое цветовое ощущение формируется суперпозицией сигналов от этих трех типов рецепторов.
Цифровые системы воспроизводят этот биологический принцип с помощью аддитивной цветовой модели RGB (Red, Green, Blue). В аддитивной модели цвета получаются путем сложения световых потоков разной интенсивности.
Цветное цифровое изображение — это не одна матрица, а трёхмерный тензор (трехмерный массив), состоящий из трех наложенных друг на друга двумерных плоскостей одинакового разрешения:
- Красный канал (R) — матрица с интенсивностями красного компонента.
- Зеленый канал (G) — матрица с интенсивностями зеленого компонента.
- Синий канал (B) — матрица с интенсивностями синего компонента.
Каждый пиксель цветного изображения кодируется вектором из трех целых чисел: , где каждое значение лежит в диапазоне от до .
Рассмотрим базовые комбинации:
(0, 0, 0)— отсутствие свечения во всех каналах: черный цвет.(255, 255, 255)— максимальная яркость всех трех компонентов: белый цвет.(255, 0, 0)— максимальный красный при выключенных остальных: чистый красный.(255, 255, 0)— сумма красного и зеленого света равной мощности: чистый желтый.(0, 255, 255)— сумма зеленого и синего света: голубой (cyan).(255, 0, 255)— сумма красного и синего света: пурпурный (magenta).(128, 128, 128)— равные промежуточные значения во всех каналах: нейтральный серый.
Если цветное изображение имеет разрешение пикселей, его форма в пространстве данных составляет строк, столбцов и цветовых среза. Общее количество байт, требуемое для хранения такого кадра в несжатом виде, вычисляется прямым перемножением:
Пояснение: высота кадра () умножается на ширину () и на число каналов (). Полученный объем в байтах переводится в мегабайты делением на .
От абстрактных матриц к вычислениям
Итак, любое изображение для инженера машинного зрения — это строгая математическая структура:
- Разрешение определяет сетку дискретизации пространства.
- Глубина цвета (
uint8) определяет диапазон квантования яркости от до . - Оси координат начинаются в точке вверху слева, из-за чего координата управляет выбором столбца, а — выбором строки.
- Цветность формируется объединением трех матриц каналов (R, G, B) в трехмерную структуру размера .
Понимание этой физической и математической основы снимает ореол таинственности с машинного зрения. Вся последующая работа с изображениями сводится к быстрым матричным операциям: сложению, умножению, транспонированию и фильтрации этих числовых сеток.
В следующей главе мы разберем, как именно этот трехмерный числовой массив размещается в оперативной памяти компьютера с помощью фундаментальной библиотеки научных вычислений Python — NumPy.