Входной диапазон и проверка результата в операциях яркости

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

Схема масштабирования и обрезки значений яркости: умножение на коэффициент и необратимое сжатие хвоста распределения к границе диапазона

Назначение

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

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

Представление данных

Восемьбитный канал хранит целые значения от 0 до 255. Шестнадцатеричное число 10000 равно десятичному 65536 и не помещается в беззнаковое 16битное поле, поэтому диапазон, выраженный таким числом, предполагает более широкое представление, например фиксированную точку с расширенным разрядом. В таком представлении 0x4000 делится на 65536 и даёт 0,25, 0x10000 даёт ровно 1, а 0x24000 даёт 2,25. Из самих числовых кодировок формула яркости не восстанавливается: они фиксируют только масштаб, а не порядок умножения, округления или обрезки.

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

Масштабирование и обрезка

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

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

Пример

Рассмотрим линейный 8битный канал с коэффициентом 1,25 и обрезкой на 255. Входные значения 40, 80 и 120 дают после умножения 50, 100 и 150, все они помещаются в диапазон и сохраняются без изменений. Входное значение 240 умножается до 300, а обрезка заменяет 300 на 255. Два разных входа, скажем 240 и 255, после операции дают одинаковый результат 255, и различие между ними утрачено навсегда.

Значение 255 в одном канале не означает белого пикселя: цвет определяется всеми тремя каналами RGB, и другие каналы могут оставаться тёмными. Обрезка в светлых областях не затрагивает тёмные области того же изображения автоматически. Если в пикселе канал красного цвета переполняется, а каналы зелёного и синего остаются на уровне 30, пиксель остаётся насыщенно красным, а не белым.

Ограничения

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

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

Связанные материалы

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

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