Преобразование RGB в L*a*b*. Фотошоп врет. Почему?

Статус
Закрыто для дальнейших ответов.

Fedor_Fedor

Участник
Топикстартер
Сообщения
32
Реакции
0
Добрый день!
Очень рад, что нашел такой полезный форум.
Будьте добры, помогите разобраться.
По работе пришлось писать программу для измерения цвета. Написал процедуры преобразования RGB в XYZ, далее - в L*a*b*. (Уточню, преобразование RGB-->XYZ выполнял в предположении, что базовые цвета R,G,B определяют цветовой охват sRGB, а исходные RGB требуют гамма-коррекции. При переводе в L*a*b* в качестве нормирующего использовался белый D65).
Все получилось. Любые координаты RGB трансформируются в L*a*b* также, как и в разных калькуляторах и в CorelDraw, (естественно, при условии, что в настройках цветового профиля указано, что исходный охват - sRGB). Единственная программа, которая отказывается показывать "правильные" значения - это Фотошоп.
Пример: RGB (56,87,159) преобразуется в CIELAB как (38;12.76;-42.79). В Кореле - аналогично: (38,13,-43). И только Фотошоп упорно выдает (38,7,-43).
Что я только не делал - и профили исходнику назначал разные, и в 16/32 бита конвертировал - все бесполезно.

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

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

polbol

15 лет на форуме
Сообщения
1 410
Реакции
402
conversion options в PS побаловаться. Упс. не так вопрос понял ))
 

Вложения

  • corelX6.jpg
    corelX6.jpg
    105.8 КБ · Просм.: 1 195

TRANTOR

Son of a Gun
R.I.P.
Сообщения
4 566
Реакции
2 956
При переводе в L*a*b* в качестве нормирующего использовался белый D65
Почему? Lab PCS D50.
А я думаю, что это не так...
Напрасно так думаете. Ошибка у Вас. Хромадаптациию забыли сделать.

Вот, пользуйтесь для проверок.
 

Fedor_Fedor

Участник
Топикстартер
Сообщения
32
Реакции
0
Почему? Lab PCS D50.
Напрасно так думаете. Ошибка у Вас. Хромадаптациию забыли сделать.

Вот, пользуйтесь для проверок.
Почему? Lab PCS D50.
Напрасно так думаете. Ошибка у Вас. Хромадаптациию забыли сделать.

Вот, пользуйтесь для проверок.

Trantor, спасибо за веру в мои способности :)
Повторюсь. При переводе из RGB в XYZ я сначала выполняю делаю гамма-коррекцию с Гамма = 0,5 (примерно). Ссылка: sRGB - Wikipedia, the free encyclopedia. Затем, выполняю преобразование координат, считая, что базовые цвета R, G,B - это вершины треугольника sRGB:
R = Xr, Yr, Zr;
G = Xg, Yg, Zg;
B = Xb, Yb, Zb;

C = (Xr+Xg+Xb; Yr+Yg+Yb; Zr+Zg+Zb) = координаты цвета белого D65. Можете проверить. sRGB - это треугольник, в центре масс которого лежит белый D65 (0,313;0.329 - в координатах цветности).

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

Вложения

  • RGB to LAB Transform_2.png
    RGB to LAB Transform_2.png
    43.3 КБ · Просм.: 1 124
  • RGB to LAB Transform_1.png
    RGB to LAB Transform_1.png
    38.4 КБ · Просм.: 1 109
  • RGB to LAB Transform.png
    RGB to LAB Transform.png
    77.8 КБ · Просм.: 1 082

Fedor_Fedor

Участник
Топикстартер
Сообщения
32
Реакции
0
conversion options в PS побаловаться. Упс. не так вопрос понял ))
Спасибо. С этого и начал. PolBol, у вас корел показывает то же, что у меня фотошоп. Значит это не случайная ошибка. Где-то заметил в русском фотошопе нашел, что используется "линейное sRGB", тогда как, если верить английской Вике, при преобразовании sRGB в XYZ нужно предварительно выполнять предыскажения линейных RGB (sRGB - Wikipedia, the free encyclopedia). Может тут собака зарылась...
 

TRANTOR

Son of a Gun
R.I.P.
Сообщения
4 566
Реакции
2 956
другие калькуляторы показывают такой же результат, как у меня...
Пользуйтесь нормальным калькулятором. Ссылку я привел выше.
гамма-коррекцию с Гамма = 0,5 (примерно)
О чем вообще речь? Что такое "примерно 0.5" и зачем? У sRGB своя гамма (не 0.5) и к вопросу о хромадаптации отношения не имеет. Вы знаете, что такое хромадаптация и для чего она нужна?

Изучите сайт, там все формулы есть: Welcome to Bruce Lindbloom's Web Site Работают они так, как и должны. Фотошоп тоже разумеется работает корректно.
 

Fedor_Fedor

Участник
Топикстартер
Сообщения
32
Реакции
0
Пользуйтесь нормальным калькулятором.
Ни при каких настройках ваш калькулятор не выдает тех же значений, что и фотошоп, в котором преобразование, с ваших слов, выполняется верно.
О чем вообще речь? Что такое "примерно 0.5" и зачем?
Повторюсь:
sRGB - Wikipedia, the free encyclopedia
Начинать читать со слов: "...following formula transforms the linear values into sRGB".


Вы знаете, что такое хромадаптация и для чего она нужна?
Изучите сайт, там все формулы есть: Welcome to Bruce Lindbloom's Web Site Работают они так, как и должны. Фотошоп тоже разумеется работает корректно.

Да, это коррекция коэффициентов при смене опорного белого. Не мой случай.
 

TRANTOR

Son of a Gun
R.I.P.
Сообщения
4 566
Реакции
2 956
Ваш. У sRGB white point D65, которую надо адаптировать в D50. Почитайте сайт, все же, прежде чем искать ошибки в Фотошопе.
Начинать читать со слов: "...following formula transforms the linear values into sRGB".
И где там 0.5, если это составная формула из линейной и степенной функций?
не выдает тех же значений, что и фотошоп
Выдает аналогично Фотошопу. И аналогично Корелу в том числе:

corel_ok.png
 

Fedor_Fedor

Участник
Топикстартер
Сообщения
32
Реакции
0
У sRGB white point D65, которую надо адаптировать в D50. Почитайте сайт, все же, прежде чем искать ошибки в Фотошопе.
Я знаю координаты вектора С в системе А. Знаю направляющие косинусы осей системы А в системе В. Мне нужно найти координаты вектора С в системе B. Простая задача. Преобразование координат. Из неортогонального базиса RGB в ортогональный XYZ. А вы предлагаете применить преобразование, которое позволит найти координаты вектора С, если предположить, что система А - это не sRGB с опорным D65, а что-то другое с опорным D50. Если Фотошоп считает, что в sRGB опорный белый - D50, значит в фотошопе ошибка...
И где там 0.5, если это составная формула из линейной и степенной функций?
Итак, смотрим: Csrgb = (1+а)*C^(1/2.4)-а. Показатель степени = 1/2.4 = 0.417, т.е примерно 0,5. Я же написал
"примерно 0,5".
Пояснямба: совсем недавно 99% отображающих устройств было на основе ЭЛТ (кинескопа), у которого "гамма" в пределах 2.4. Устроена так вакуумная трубка, что у нее зависимость тока катода от напряжения на сетке - почти парабола. Поэтому на передающей стороне (в камерах) делали обратное преобразование. И в стандарте sRGB это отразилось. Я занимаюсь разработкой камер, поверьте, это так. Долго объяснять. Но если интересно - напишу...

Выдает аналогично Фотошопу. И аналогично Корелу в том числе:
Я вам пишу, что "Ваш" калькулятор выдает странные числа, (хотя сайт хороший), а вы мне в подтверждение правильности "вашего" калькулятора приводите изображение расчетов в Корел Дроу...
 

Fedor_Fedor

Участник
Топикстартер
Сообщения
32
Реакции
0
Тогда обращаться к Адоби не стоит. Во всех остальных случаях – очень даже стоит.
Дмитрий, я имел ввиду, что вопрос не простой, а в службе поддержки, как правило, сидят ребята, которые поясняют где купить, да как установить. Я думал, что меня направили на форум специалистов-колоритмистов и одновременно знатоков Фотошопа. Вчера обзванивал типографии, искал каталоги Pantone Extended Gamut. Параллельно выяснилось, что 99% техников-полиграфистов понятия не имеют о системе Lab. Профиль -> ICC-> ICM-> CMYK - вот и все знания.... И это типографисты... Но... попробую. Напишу.
 

TRANTOR

Son of a Gun
R.I.P.
Сообщения
4 566
Реакции
2 956
Если Фотошоп считает, что в sRGB опорный белый - D50, значит в фотошопе ошибка...
Repeat в 3-й раз: у CIE Lab "точка белого" D50. Это стандарт CIE. Вам надо преобразовать D65, который в sRGB, в D50, который в Lab. Что из этого не понятно?

Значения с хромадаптацией:

adapt.png

Ваши результаты без адаптации:

No_adapt.png
 

mihas

15 лет на форуме
Сообщения
4 860
Реакции
2 872
Если Фотошоп считает, что в sRGB опорный белый - D50, значит в фотошопе ошибка...
Нет, фотошоп так не считает.
Фотошоп все верно считает в логике PCS D50. У фотошопа Lab D50. У sRGB D65. Чтобы перейти от одного света к другому должна быть задействована хромадаптация. У Линдблума в калькуляторе по ссылке Трантора хромадаптация имеется. Хотите посчитать Lab D65 - ради бога! Просто в фотошопе Lab D50 и все это знают. Да и в фотошопе хромадаптация именно по Брэдфорду. Посчитать и как фотошоп и как не фотошоп с визуализацией результатов можно здесь: R U D T P . P P . R U • Бинирование светодиодов с визуализацией
 
  • Спасибо
Реакции: Dmitrij M и dih

TRANTOR

Son of a Gun
R.I.P.
Сообщения
4 566
Реакции
2 956
  • Спасибо
Реакции: ch_alex и Dmitrij M

Fedor_Fedor

Участник
Топикстартер
Сообщения
32
Реакции
0
Repeat в 3-й раз: у CIE Lab "точка белого" D50. Это стандарт CIE. Вам надо преобразовать D65, который в sRGB, в D50, который в Lab. Что из этого не понятно?
Tantor, поясняю, что непонятно: CIELAB (оно же L*a*b) - это цветовое пространство, в котором описываются любые цвета. К нему не может быть "прикреплен" какой-то определенный белый - D65 или D50 или любой другой. Посмотрите формулы преобразования XYZ в Lab. Если в знаменателях указать опорный белый D65, то при воспроизведении цвета D65 координата L будет равна 1, а координаты a* и b* будут равны нулю. В стандарте же написано - "нормирование". Если преобразование RGB-->XYZ и XYZ-->LAB производится при одном и том же белом, то для белому R=255, G=255, B= 255 будет соответствовать белый L=100, a=0, b=0.

Если я правильно понял, ситуация в фотошопе следующая: преобразование XYZ-->LAB всегда осуществляется при нормирующем белом D50, причем неважно, какой опорный белый используется при преобразовании RGB-->XYZ. В связи с этим мы производим преобразование RGB-->XYZ для опорного белого D65, а потом корректируем цвета так, чтобы они не изменились при опорном белом D50, так как в Фотошопе нормирующий белый (в преобразовании XYZ-->LAB) - всегда один: D50.

Еще раз повторюсь: цветовая колориметрическая система, будь то МКО1931RGB или усовершенствованная МКО1931XYZ, или МКО L*a*b* не может быть как-то связана с каким-то определенным белым. Белый для нее - такой же цвет, как и все другие. Кстати, в Вике в качестве примера нормирующего белого в системе CIELAB указан белый D65! Проверяем: "...Here, Xn, Yn and Zn are the CIE XYZ tristimulus values of the reference white point (the subscript n suggests "normalized"). Under Illuminant D65, the values are" (Lab color space - Wikipedia, the free encyclopedia).
 

Fedor_Fedor

Участник
Топикстартер
Сообщения
32
Реакции
0
Да у ICC. А почему и у CIE? - у CIE для разных целей разные лабы. CIE Whiteness к примеру - это D65.
Mihas, спасибо за пояснения. "у CIE для разных целей разные лабы". LAB - это колориметрическая система представления цвета. Она одна на всех для любых задач. В стандарте же четко прописано однозначное соответствие цвета в системе XYZ и цвета в Lab. Как может быть несколько систем Lab для разных задач?
Я понимаю, что серый на черном и серый на белом наш глаз видит разным. Для глаза - это разные серые. Но математически алгоритм пересчета XYZ-->LAB не допускает каких-либо неоднозначностей: зависимости от цвета фона, яркости, адаптации глаза и т.д...
 

mihas

15 лет на форуме
Сообщения
4 860
Реакции
2 872
Есть много лабов хороших и разных, не только D50. То что CIE Lab и D50 Lab синонимы - для меня новость, @TRANTOR, CIE вообще всю историю на D65 "сидело". @Fedor_Fedor , Алгоритм пересчета XYZ-->LAB как раз использует условие, какой опорный белый ему применить в зависимости от наличия или отсутствия хромадаптации. Если изучите вопрос внимательно то увидите, что на этом спотыкаются некоторые программы и считают в некоторых случаях с ошибкой, начиная от Argyll и кончая ColorLab. Если вы программируете - здесь открытый код с логикой и даже специально с имитацией распространенных ошибок в спойлере хромадаптации: R U D T P . P P . R U • Спектральный калькулятор на JavaScript
Базовый скрипт http://rudtp.pp.ru/spectralcalc.js а в нем все написано в начале где чего в каких еще скриптах.
 
Последнее редактирование:

mihas

15 лет на форуме
Сообщения
4 860
Реакции
2 872
Это у CIE Lab D50. Фотошоп придерживается данного стандарта.
Поиск в гугле выдает 220 тысяч словосочетаний CIELab D65 и только 89 тысяч сочетаний CIELab D50, так что предполагаю, что у CIE Lab не только D50 все же. ICC построил логику на PCS D50, но мне кажется CIE Lab не стал от этого исключительно D50 Lab.
И да, фотошоп мог бы явно указывать, что у него за Lab, потому что много разных CIE Lab и они не обязаны быть все D50.
 

TRANTOR

Son of a Gun
R.I.P.
Сообщения
4 566
Реакции
2 956
ICC взяло CIE 1976 (L*,a*,b*) и постановило, что white point для Lab считать относительно D50. Назвало это Lab PCS, стало оно стандартом и никто не возражал.

фотошоп мог бы явно указывать
Фотошопу, как и другим приложениям использующим ICC, это не требуется, т.к. стандарт ICC. Можно изобрести свой, иной стандарт, основать альтернативный комитет по цвету и освещению, но интересно ли такое обсуждать?
 
Статус
Закрыто для дальнейших ответов.