Третий не лишний или EDID→XYZ (xy→XYZ)

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

Samsonov

Участник
Топикстартер
Сообщения
886
Реакции
89
Дано: набор координат цветности xy для базовых стимулов RGB и точки белого; например, такой набор хранится в блоке аппаратных данных монитора (EDID). Надо: получить набор полных координат Yxy/XYZ.

Сначала мне показалось, что задача имеет единственное решение — благодаря ограничению на то, что исходные данные являются не просто абстрактными величинами, а представляют набор базовых стимулов, где R+G+B=W (по всем трём координатам XYZ), причём абсолютная яркость нам не важна (Yw:=1 или Yw:=100). Итого имеем 3 неизвестных и 3 уравнения, так что исключаются все степени свободы в смешении базовых стимулов для получения белого. Но в том-то и дело, что несмотря на кажущую однозначность формул и удовлетворение всем требованиям, результаты не совпадают с известными данными, например, для Adobe RGB или sRGB. Может, кто сообразит, где у меня ошибка в логике?

Итак, суть алгоритма.
  • Исходные данные обозначаем (xW,yW), (xR,yR), (xG,yG), (xB,yB).
  • Фиксируем Yw на любом значении; ну, кроме нуля.
  • Промежуточные величины:
    • X'w = xW/yW, ……………, X'b = xB/yB
    • Z'w = (1 – xW – yW)/yW, ……………, Z'b = (1 – xB – yB)/yB
    то бишь как бы обратное преобразование из xy в XYZ, только без умножения на Y.
  • Вспомогательные величины:
    • a = (X'w – X'b) / (X'r – X'b)
    • b = (X'g – X'b) / (X'r – X'b)
  • Длинные выкладки, как я дошёл до жизни такой, опущены.
  • Конечный результат:
    • Yg = Yw * (Z'w – a*Z'r – (1–a)*Z'b) / (Z'g – b*Z'r – (1–b)*Z'b)
    • Yr = a*Yw – b*Yg
    • Yb = Yw – Yr – Yg
  • Всё, телемаркет.
И хотя в формулах прослеживаются некоторые закономерности, выглядят они довольно монструозно. Я хотел даже попросить, кто может, постараться их упростить — говорят, в Маткаде есть подобные функции. Но так как результат отнюдь не соответствует эталону, надо ещё сначала разобраться, где тут принципиальная ошибка.

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

Вложения

  • EDID2XYZ.rar
    4.2 КБ · Просм.: 288
Статус
Закрыто для дальнейших ответов.