Вы смешиваете несколько вещей, которые затрудняют понимание, поскольку вы объединяете преобразование RGB в XYZ с хроматической адаптацией VonKries ,Хотя можно выполнить полное преобразование с помощью одной матрицы, то есть линейного преобразования, проще реализовать более детальные шаги.
Хроматическая адаптация VonKries требует, чтобы у вас были следующие данные:
- Образец цвета, который вы хотите хроматически адаптировать, т. Е. Ваш RGB цвет.
- Тестовый источник света, под которым просматривается ваш образец, т.е. XYZ_S тристимулусных значений.
- эталонный цвет источника света, к которому вы хотите хроматически адаптировать ваш образец, т.е. XYZ_D тристимулусных значений.
Я бы предложил сначала выполнитьпреобразование вашего образца из RGB в XYZ .Матрица, преобразующая из RGB в XYZ , M_NPM , задается вашим цветовым пространством RGB и называется нормализованной первичной матрицей (ее вычислениевыходит за рамки вопроса).
Затем можно вычислить хроматическую адаптацию матрицу M от XYZ_S до XYZ_D согласно Брюсу Линдблуму .
Затем возьмите точечное произведение между хроматической адаптацией матрицей M и вашим образцом XYZ тристимульных значений.
Наконец, преобразуйте обратно в RGB , используя M_NPM-1 или любую соответствующую обратную матрицу, подходящую для вашего варианта использования.