1. ВНИМАНИЕ! Все административные вопросы решаются через обратную связь или через личное сообщение пользователю с ником Micro43Club

Как пересчитать RGB в LAB

Тема в разделе "Цифровое изображение", создана пользователем kkn, 9 сен 2009.

  1. kkn

    kkn Куратор клуба

    Регистрация:
    05.08.2008
    Сообщения:
    8.543
    Симпатии:
    35
    Пол:
    Мужской
    Адрес:
    Москва
    Есть некоторый цвет, заданный координатами RGB в пространстве sRGB. Как пересчитать эти координаты в пространство LAB и обратно?

    Кто-нибудь встречал методику пересчета? Здесь есть некоторый материал, но судя по всему, там ошибка - полученные значения не сходятся с фотошопом.
     
  2. black_daw

    black_daw Пользователь

    Регистрация:
    06.08.2008
    Сообщения:
    331
    Симпатии:
    1
    Пол:
    Мужской
    Род занятий:
    .
    Адрес:
    .
  3. SerMihKo

    SerMihKo Пользователь

    Регистрация:
    18.07.2009
    Сообщения:
    13
    Симпатии:
    0
    Этой проблемой конвертации озабочены многие. Часто применяется двойное преобразование 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
     
  4. Laryx

    Laryx Пользователь

    Регистрация:
    23.04.2006
    Сообщения:
    1.012
    Симпатии:
    1
    Адрес:
    Ростовская область
    Сайт:
    Вот здесь, на мой взгляд, формулы лучше.
     
  5. kkk

    kkk Пользователь

    Регистрация:
    20.01.2006
    Сообщения:
    107
    Симпатии:
    0
    (В меру возможных и вероятных собственных заблуждений.)

    по ссылке от 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, пока чел не ориентируется хотя б в первоисточниках на несколько тысяч страниц, разговаривать не будут, там профи).
     
  6. kkn

    kkn Куратор клуба

    Регистрация:
    05.08.2008
    Сообщения:
    8.543
    Симпатии:
    35
    Пол:
    Мужской
    Адрес:
    Москва
    Спасибо всем отписавшимся.

    В методике конвертации XYZ в LAB и обратно все приведенные вами источники сходятся. Точка белого у меня известна - D65. Наверное, можно считать эту часть вопроса решенным.

    kkk, отдельное спасибо за напоминание о нелинейности sRGB. Я совсем упустил это из виду. А если перед конвертацией RGB -> XYZ привести sRGB к линейному RGB, применив к нему кривую, обратную гамме 2.2? Предварительная проверка на скорую руку на калькуляторе показала, вроде, приемлемую точность.
     
  7. kkk

    kkk Пользователь

    Регистрация:
    20.01.2006
    Сообщения:
    107
    Симпатии:
    0
    Позаблуждаюсь еще.

    1. А вот возможно для обратного преобразования точка белого должна быть не D65, а XYZ, полученное профилем из RGB 255,255,255. Чтобы потом результат уложить в 8битный RGB. А вот уже свечение моника, на который подано такое RGB, должно быть 6500.

    2. "Приемлемая точность" если устраивает - оно конечно можно, но не перфектно.
    Пользуясь случайно найденными коэффициентами, практически мы данному изображению ассигнуем другое, отличное от sRGB пространство.
    Полагаю, если размотать sRGB.icc, можно сбекинженирить правильную формулу.
    Не исключено, что она совпадет с имеющейся, но тогда будет уверенность.
    Насколько я понял, в этом деле понимает очень мало людей, и не факт, что автор одной из упомянутых статей - в их числе.
    А спекам icc верю.
    Где-то на rudtp есть ссылка на софтинку на экселе от Шадрина, которая в том числе читает файл icc и раскладывает его в таблички с цифирьками.
     
  8. kkn

    kkn Куратор клуба

    Регистрация:
    05.08.2008
    Сообщения:
    8.543
    Симпатии:
    35
    Пол:
    Мужской
    Адрес:
    Москва
    kkk
    Про точку белого я и сам сегодня допер. RGB(255,255,255) преобразуется в XYZ(95.047,100,108.883) - именно эту точку использую в качестве белого. Независимо от исходного пространства. При этом мне по барабану, какая температура будет на устройстве отображения - моей задачей является внести относительные коррекции в каналах А и B в LAB и сконвертировать полученный результат в исходное пространство.

    А со спеками ICC - сижу, разбираюсь. Есть русский перевод спецификации от Шадрина. Спасибо, что сориентировали на его сайт .
     
  9. dgv

    dgv Guest

Поделиться этой страницей