Понимание нелинейного цветового пространства RGB 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:
Каждое значение серого представляет собой число, пропорциональное интенсивности пикселя, которое регулируется функцией передачи гамма-излучения в Рекомендации МСЭ-R BT.709. (Эта передаточная функция задает гамма-число 2,2 и имеет линейное сечение для малых интенсивностей). Следовательно, нулевое значение является черным. Значение Maxval представляет CIE D65 белый и самое интенсивное значение в изображении и любом другом изображении, с которым изображение может быть сравнено.
Диапазон значений канала BT.709 (16-240) не имеет отношения к PGM.
Обратите внимание, что общее отличие от формата PGM состоит в том, что значение серого должно быть "линейным", то есть, как указано выше, за исключением регулировки гаммы. pnmgamma принимает такой вариант PGM в качестве входных данных и создает истинный PGM в качестве выходных данных.
Большинство источников предполагают, что они имеют дело с линейным RGB и просто применяют свои веса и сохраняют, возможно, не сохраняя яркость. Я предполагаю, что любой обработчик жалоб будет предполагать, что эти значения RGB гамма-сжатые... таким образом, технически отображая "цвета" градаций серого, чем я указал. Это правильно? Может быть, спросить это по-другому, имеет ли это значение? Я знаю, что это загруженный вопрос, но если я не могу точно сказать, является ли он линейным или нелинейным, или как он был сжат или ожидается, что он будет сжат, будут ли сильно затронуты алгоритмы обработки изображений (бинаризация), если я просто предположу, линейные значения RGB?
1 ответ
Возможно, в моем вопросе возникла некоторая путаница, поэтому я хотел бы ответить на него сейчас, когда я изучил ситуацию гораздо глубже.
Короче говоря... похоже, что никто на самом деле не беспокоится о перекодировании гаммы изображения при сохранении в формате PNM. Из-за этого, поскольку почти все - sRGB, он останется sRGB, в отличие от технически правильного BT.709, согласно спецификации.
Я обратился к Брайану Хендерсону из NetPBM. Он придерживался того же мнения и заявил, что метод гамма-сжатия не так важен, как знание того, применялся он или нет, и что мы всегда должны предполагать, что он применяется при работе с цветовыми форматами PNM.
Чтобы еще раз подтвердить влияние этого мнения в отношении обработки изображений, прочтите статью Канана и Коттрелла "От цвета к оттенкам серого: имеет ли значение метод распознавания изображений?", 2012 г.. В основном, если вы вычисляете среднее значение RGB-значений, вы попадете в одну из трех ситуаций: "Блеск", "Интенсивность" или "Интенсивность". После сравнения эффектов различных формул преобразования оттенков серого с учетом того, когда и как применялась гамма-коррекция, он обнаружил, что "Блеск" и "Интенсивность" являются лучшими. Они отличаются только тем, когда была добавлена гамма-коррекция (Gleam имеет гамма-коррекцию для входных значений RGB, в то время как Intensity принимает линейную RGB и применяет гамма-послесловия). К сожалению, вы опускаетесь с 1-го и 2-го места на 8-е, когда не добавляется гамма-коррекция, также известная как интенсивность. Интересно отметить, что лучше всего сработала простая формула среднего значения, а не одна из самых популярных формул шкалы серого, которую рекламирует большинство людей. Все это, чтобы сказать, чтоЕсли вы используете формулу "Среднее" для преобразования цвета PNM в оттенки серого для приложений обработки изображений, вы обеспечите высокую производительность, поскольку мы можем предположить, что будет применено некоторое гамма-сжатие. Мой комментарий об ImageMagick и линейных значениях, похоже, применим только к их формату PGM.
Надеюсь, это поможет!
Есть только один способ, чтобы преобразовать цветовой сигнал в оттенки серого: перейти в линейное пространство и добавить свет (и, следовательно, интенсивность цвета). Таким образом, у вас есть эффективный свет, и вы можете рассчитать яркость. Тогда вы можете "гамма" исправить значение. Это то, как ведет себя свет (линейное пространство), и как измеряется яркость с помощью 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'не равно). Если вы не видите солнца, вы трансформируетесь линейно.