Есть некоторый цвет, заданный координатами RGB в пространстве sRGB. Как пересчитать эти координаты в пространство LAB и обратно? Кто-нибудь встречал методику пересчета? Здесь есть некоторый материал, но судя по всему, там ошибка - полученные значения не сходятся с фотошопом.
Этой проблемой конвертации озабочены многие. Часто применяется двойное преобразование RGB-->XYZ-->Lab. Вот несколько ссылок - может быть что-то окажется полезным: http://www.brucelindbloom.com/index.html?E...?Equations.html http://www.easyrgb.com/index.php?X=MATH http://www.mouserunner.com/Feat_RGBLabCell.html http://www.cyberforum.ru/cpp/thread7300.html Публикация на тему сравнения цветовых моделей: http://portal.acm.org/citation.cfm?id=31338
(В меру возможных и вероятных собственных заблуждений.) по ссылке от black_daw, пересчитываются координаты XYZ в Lab. Координаты RGB в XYZ позволяет пересчитать профиль, если WinXP - он обычно находится windows\system32\spool\drivers\color\sRGB.icm. Формат файла icc и как с ним работать - есть доки на www.color.org, на вражьем языке, но не заумно. В тех доках есть формула пересчета RGB->XYZ, но сопроводительный текст говорит, что это - для RGB в NTSC (вроде), и для RGB в sRGB оно не подходит, как и приведенное выше. Координаты RGB - они везде разные, и именно icc профили есть механизм, хоть и недоделанный, приведения разных систем к единому мнению. Координаты XYZ, Lab - уже не зависят от конкретного пространства (sRGB, AdobeRGB итд). Заметим, для sRGB пересчет не только имеет другие коэффициенты, но и вообще нелинеен - в sRGB гамма не единица. Поскольку прямой пересчет XYZ->Lab содержал нормирование на координаты точки белого, то для обратного пересчета надо изобрести точку белого. На сию тему можно почитать - rudtp.ru и посоветоваться с народом на resetters.ru в темах про профилирование (на rudtp, пока чел не ориентируется хотя б в первоисточниках на несколько тысяч страниц, разговаривать не будут, там профи).
Спасибо всем отписавшимся. В методике конвертации XYZ в LAB и обратно все приведенные вами источники сходятся. Точка белого у меня известна - D65. Наверное, можно считать эту часть вопроса решенным. kkk, отдельное спасибо за напоминание о нелинейности sRGB. Я совсем упустил это из виду. А если перед конвертацией RGB -> XYZ привести sRGB к линейному RGB, применив к нему кривую, обратную гамме 2.2? Предварительная проверка на скорую руку на калькуляторе показала, вроде, приемлемую точность.
Позаблуждаюсь еще. 1. А вот возможно для обратного преобразования точка белого должна быть не D65, а XYZ, полученное профилем из RGB 255,255,255. Чтобы потом результат уложить в 8битный RGB. А вот уже свечение моника, на который подано такое RGB, должно быть 6500. 2. "Приемлемая точность" если устраивает - оно конечно можно, но не перфектно. Пользуясь случайно найденными коэффициентами, практически мы данному изображению ассигнуем другое, отличное от sRGB пространство. Полагаю, если размотать sRGB.icc, можно сбекинженирить правильную формулу. Не исключено, что она совпадет с имеющейся, но тогда будет уверенность. Насколько я понял, в этом деле понимает очень мало людей, и не факт, что автор одной из упомянутых статей - в их числе. А спекам icc верю. Где-то на rudtp есть ссылка на софтинку на экселе от Шадрина, которая в том числе читает файл icc и раскладывает его в таблички с цифирьками.
kkk Про точку белого я и сам сегодня допер. RGB(255,255,255) преобразуется в XYZ(95.047,100,108.883) - именно эту точку использую в качестве белого. Независимо от исходного пространства. При этом мне по барабану, какая температура будет на устройстве отображения - моей задачей является внести относительные коррекции в каналах А и B в LAB и сконвертировать полученный результат в исходное пространство. А со спеками ICC - сижу, разбираюсь. Есть русский перевод спецификации от Шадрина. Спасибо, что сориентировали на его сайт .
http://www.fotoproekt.ru/port/msk/ru/schoo...rticles/cms/#03 большая и хорошая статья о цветовых координатах. Даже на русском)