Понимание нелинейного цветового пространства RGB PNM NetPBM для преобразования в оттенки серого

Я пытаюсь понять, как правильно работать со значениями RGB, найденными в форматах PNM, чтобы неизбежно преобразовать их в оттенки серого.

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

Похоже, существует ожидаемый формат http://netpbm.sourceforge.net/doc/ppm.html:

В растре значения выборки являются «нелинейными». Они пропорциональны интенсивности красного, зеленого и синего цветов в пикселе согласно Рекомендации МСЭ-R BT.709, настроенной с помощью передаточной функции гаммы BT.709.

Итак, я считаю, что эти значения нелинейны, но не sRGB. Я нашел несколько тем в ImageMagick, в которых говорится, что они могут сохранять их как линейные значения RGB.

Правильно ли я, что PNM определяет стандарт, но различные редакторы, такие как Photoshop или GIMP, могут следовать ему, а могут и не следовать?

Из http://netpbm.sourceforge.net/doc/pamrecolor.html

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

В другом месте я вижу этот http://netpbm.sourceforge.net/doc/pgm.html:

Каждое значение серого - это число, пропорциональное интенсивности пикселя, настроенное функцией передачи гамма-излучения Рекомендации ITU-R BT.709. (Эта передаточная функция определяет гамма-число 2,2 и имеет линейный участок для малых интенсивностей). Следовательно, нулевое значение является черным. Значение Maxval представляет белый цвет CIE D65 и наиболее интенсивное значение в изображении и любом другом изображении, с которым можно сравнивать изображение.

Диапазон значений канала BT.709 (16–240) не имеет отношения к PGM.

Обратите внимание, что обычным отклонением от формата PGM является "линейное" значение серого, т. е. как указано выше, за исключением регулировки гаммы. pnmgamma принимает такой вариант PGM на входе и производит настоящий PGM на выходе.

Большинство источников предполагают, что имеют дело с линейным RGB и просто применяют свои веса и сохраняют, возможно, не сохраняя яркость. Я предполагаю, что любой обработчик жалоб будет предполагать, что эти значения RGB являются гамма-сжатыми ... таким образом, технически отображая "цвета" оттенков серого, отличные от тех, что я указал. Это правильно? Может по другому спросить, имеет ли значение? Я знаю, что это загруженный вопрос, но если я не могу точно сказать, является ли он линейным или нелинейным, или как он был сжат или ожидается, что он будет сжат, будут ли сильно затронуты алгоритмы обработки изображений (бинаризация), если я просто предполагаю линейные значения RGB?


person Brandon Petty    schedule 07.05.2019    source источник
comment
Я, Брэндон, я предлагаю Gamma FAQ для получения полезной информации по этому вопросу по адресу: poynton.ca/GammaFAQ.html   -  person Myndex    schedule 21.05.2019


Ответы (2)


Есть только один хороший способ преобразовать цветовой сигнал в оттенки серого: перейти в линейное пространство и добавить свет (и, следовательно, интенсивность цвета). Таким образом вы получаете эффективный свет и можете рассчитать яркость. Затем вы можете «гамма» скорректировать значение. Это то, как ведет себя свет (линейное пространство), и как яркость была измерена CIE (по длине волны).

На телевидении принято строить яркость, а затем черно-белое изображение) из нелинейных R, G, B. Это сделано потому, что простота и способ работы аналогового цветного телевидения (NTSC и PAL): черно-белый сигнал (для телевидения BW) в качестве основного сигнала, а затем добавление цветов (в качестве поднесущей) к изображению BW. По этой причине расчеты производятся в нелинейном пространстве.

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

Для алгоритмов обнаружения кромок не должно быть важно, какой метод вы используете: нам трудно обнаружить кромку с одинаковыми L или Y ', поэтому нас не волнует, есть ли у компьютеров аналогичная проблема.

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

Итак, если вы хотите Y ', используйте нелинейные R', G ', B'. Но если вам нужна настоящая шкала серого, вам нужно рассчитать реальную шкалу серого в линейном пространстве. Вы можете увидеть различия, особенно на средне-серых, а также на пурпурном или желтом, где два из R, G, B почти одинаковы (и это максимальное значение между тремя).

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

Примечание. В Рекомендации Rec.709 никогда не указывается применяемая гамма-коррекция (OETF в стандарте бесполезен, нам нужен EOTF, и часто по практическим соображениям один не является инверсией другого). Только после последовательной рекомендации эта недостающая информация была наконец предоставлена. Но поскольку многие говорят о Rec.709, в качестве гаммы используется инверсия OETF, что неверно.

Как обнаружить: классическое желтое солнце на голубом небе, выбирая желтый и синий с одинаковыми L. Если вы видите солнце на сером изображении, вы трансформируетесь в нелинейном пространстве (Y 'не равно). Если вы не видите солнца, вы трансформируетесь линейно.

person Giacomo Catenazzi    schedule 07.05.2019
comment
Спасибо за ответ. Я представлял, что мне нужно проделать всю свою работу в линейном пространстве, спасибо за подтверждение. Мои основные вопросы касались формата PNM и того, как его лучше интерпретировать. Например, похоже, что все используют вариант спецификации. Что наиболее распространено? Что делает Photoshop, что делает GIMP, что делает ImageMagick? Неужели они настолько разные, что следует полностью избегать ПНМ? Вы говорите, что гамма тоже может быть переменной. PNM не может это зафиксировать. Как мне интерпретировать эти изображения? - person Brandon Petty; 08.05.2019
comment
Все делают по-разному. Примечание: часто программы имеют другое рабочее пространство (например, PhotoRGB или большее пространство). Кстати, Darktables (и я думаю, что фотошоп) использует плавающую точку (половинная или одинарная точность). Конечно, они используют 16 или 32 бит на канал на пиксель. Но для некоторых эффектов вам нужно быть линейными (особенно добавление света и композиция), для некоторых других лучше использовать гамма-коррекцию. Photoshop и компании нужны хорошие алгоритмы, чтобы делать все быстро. Это основной выбор: алгоритмы. Затем цветовое пространство. - person Giacomo Catenazzi; 08.05.2019
comment
Привет @GiacomoCatenazzi - обратный OETF для Rec709 не является неправильным для целей манипуляции с изображениями, на самом деле он предпочтительнее для входа и выхода из пространства Rec709 в линейный. Верно только то, что обратное OETF неверно для display, поскольку предполагается, что дисплей имеет усиление гаммы 1,2. Спецификация дисплея определена в Rec1886 и включает предполагаемое гамма-усиление и, таким образом, не подходит для раскрутки в линейное пространство с целью манипулирования изображением. Rec1886 - это простая гамма 2,4 для дисплея, прил. пользователем. Для манипуляции с изображением мы обычно хотим обратиться к источнику. - person Myndex; 21.05.2019
comment
@Myndex: да, это горячая тема. Камеры и телестудии меняют настройки (черная точка, выделение), поэтому они также никогда не используют OETF. Теперь мы ведем журнал / неклассифицированные / необработанные сигналы + постобработку, OEFT является чисто теоретическим. Затем в потоке данных его можно было бы использовать как стандарт, но окончательная оценка все изменит. Поэтому нужно быть осторожным с тем, что вы используете (и нужно знать ожидания от / до других этапов обработки изображений). Просто в целом люди слишком много смотрят на OETF, а не на намерения. - person Giacomo Catenazzi; 21.05.2019
comment
@GiacomoCatenazzi - да, поэтому важно использовать точную математику при переходе к линейному рабочему пространству и при отмотке назад - это стандарт. Если вы используете монитор 2,4 (а вы должны это делать), это означает, что стандартный Rec709 TRC имеет усиление гаммы примерно 1,2. Если кто-то совершает ошибку, выходя из режима OUT (кодирование) с гаммой 1 / 2,4, то он по существу стирает намеченное усиление системы с непредсказуемыми результатами. Предполагая, что работа в линейной системе: линейная - ›применить гамму ~ 1 / 2.0 -› Отображение на мониторе 2.4. - person Myndex; 21.05.2019

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

Короче говоря ... похоже, никто на самом деле не беспокоится о перекодировании гаммы изображения при сохранении в формате PNM. Из-за этого, поскольку почти все - sRGB, он останется sRGB, в отличие от технически правильного BT.709, согласно спецификации.

Я обратился к Брайану Хендерсону из NetPBM. Он придерживался того же мнения и заявил, что метод гамма-сжатия не так важен, как знание того, применялся он или нет, и что мы всегда должны предполагать, что он применяется при работе с цветовыми форматами PNM.

Чтобы подтвердить влияние этого мнения в отношении обработки изображений, прочтите статью Канана и Коттрелла «От цвета к оттенкам серого: имеет ли значение метод распознавания изображений?», 2012 г.. Обычно, если вы вычисляете среднее значение RGB, вы попадете в одну из трех ситуаций: «Блеск», «Интенсивность» или «Интенсивность». После сравнения эффектов различных формул преобразования оттенков серого с учетом того, когда и как применялась гамма-коррекция, он обнаружил, что «Блеск» и «Интенсивность» являются лучшими. Они отличаются только тем, когда была добавлена ​​гамма-коррекция (Gleam имеет гамма-коррекцию для входных значений RGB, в то время как Intensity принимает линейную RGB и применяет гамма-послесловия). К сожалению, вы опускаетесь с 1-го и 2-го места на 8-е, когда не добавляется гамма-коррекция, известная как интенсивность. Интересно отметить, что лучше всего сработала простая формула среднего значения, а не одна из самых популярных формул шкалы серого, которую рекламирует большинство людей. Все это означает, что если вы используете формулу «Среднее» для преобразования цвета PNM в оттенки серого для приложений обработки изображений, вы обеспечите высокую производительность, поскольку мы можем предположить, что будет применено некоторое гамма-сжатие. Мой комментарий об ImageMagick и линейных значениях, похоже, применим только к их формату PGM.

Надеюсь, это поможет!

person Brandon Petty    schedule 10.06.2019