SRGB без потерь ‹-› Лабораторное преобразование?

Когда я конвертирую черный (rgb(0,0,0)) в LAB и обратно как 19, 0, 10.

Есть ли модифицированная формула, которая расширяет цветовое пространство Lab для преобразования 1: 1? А если нет, то есть ли какие-нибудь другие цветовые пространства, которые сохраняют свойство «одинаковая величина числового изменения в этих значениях соответствует примерно такой же величине визуально воспринимаемого изменения»?

Я хочу запустить кластеризацию k-средних на некоторых изображениях, и она лучше работает в лабораторном пространстве.


person mpen    schedule 04.12.2019    source источник
comment
Если вы добавите свой код, мы можем проверить. В общем: используйте числа с плавающей запятой (они теряют точность, но меньше, чем целые числа. Вы можете использовать YCC (не сильно отличается от CIELAB по совпадению / человеческому зрению), но триплет сделан для байтов.   -  person Giacomo Catenazzi    schedule 11.12.2019
comment
@GiacomoCatenazzi Я не думаю, что проблема в точности с плавающей запятой; Цветовые пространства AFAIK LAB и sRGB просто не перекрываются полностью. Если вы хотите увидеть код, я думаю, что эта библиотека сначала выполняет lab-› xyz, а затем xyz- ›rgb. YCC тоже выглядит немного ограниченным.   -  person mpen    schedule 12.12.2019
comment
CIELAB имеет все цвета sRGB, и если вы удалите ограничение на диапазон sRGB (что позволяет отрицательные числа и переполнение), вы можете описать все цвета. CIEXYZ - это просто линейное преобразование RGB, но для того, чтобы всегда иметь положительные числа [выполнение ручных вычислений в 1931 году ...]   -  person Giacomo Catenazzi    schedule 12.12.2019
comment
@GiacomoCatenazzi Почему мой sRGB должен быть отрицательным? Мое исходное изображение находится в RGB. Не нужно зажимать ЛАБОРАТОРИЮ. Обратное преобразование действительно ограничено, но это не объясняет, почему я получил 19,0,10, потому что эти числа явно находятся в пределах диапазона (ну, может быть, не 0, но это спорный вопрос).   -  person mpen    schedule 12.12.2019
comment
Не зная вашего кода, мы не можем вам сказать. CIELAB в CIEXYZ обратимо. CIEXYZ в sRGB - это просто умножение матриц, поэтому обратимое. Гамма может быть сложной: RGB использует собственную интерпретацию (ее легко вычислить), а некоторые гаммы необратимы (по практическим причинам и только для черного / очень темных цветов). Проверить формулу: en.wikipedia.org/wiki/ и en.wikipedia.org/wiki/SRGB#Specification_of_the_transformation.   -  person Giacomo Catenazzi    schedule 12.12.2019
comment
Черный - (0,0,0) в sRGB, CIEXYZ, CIELAB. проверьте, на каком этапе у вас есть ошибка   -  person Giacomo Catenazzi    schedule 12.12.2019


Ответы (1)


Короткий ответ - в используемой вами библиотеке кода есть ошибки.

И вроде бы не поддерживается активно.

FWIW, когда вы смотрите на ценности, помните, что:

#000

sRGB 0,0,0 = linearRGB 0,0,0.0,0.0 = XYZ 0,0,0 = Lab 0,0,0
(Все пробелы 0,0,0)

#FFF

sRGB 255,255,255 = linearRGB 1.0,1.0,1.0 = XYZ 0.9505,1.0,1.0888 = Lab 100,0,0
(sRGB - D65, это предполагает наблюдатель D65 2 °)

#777

sRGB 119,119,119 = linearRGB 0,1845,0,1845,0,1845 = XYZ 0,1753,0,1845,0.2009 = Lab 50,03,0,0
(с использованием матрицы BruceLindbloom)

Псевдокод

Более правильный код можно найти здесь:

https://www.easyrgb.com/en/math.php

Однако этот код НЕ является javascript - код на этом сайте является псевдокодом, поэтому его необходимо изменить (т.е. вам нужно использовать Math.pow, а не ^)

Python

Здесь есть хорошая библиотека на основе Python, и она активно поддерживается:

https://github.com/colour-science/colour

МАТЕМАТИКА

Фактические расчеты и обсуждение можно найти на сайте Брюса Линдблума:

http://www.brucelindbloom.com/index.html?Math.html

У него также есть несколько цветных калькуляторов на языке JS, которые могут быть вам полезны.

Рад ответить на другие вопросы, дай мне знать ...

person Myndex    schedule 28.12.2019
comment
Математика выглядит достаточно простой. Я попробую повторно реализовать это на JS, когда у меня будет минутка. Спасибо! - person mpen; 29.12.2019
comment
@mpen без проблем ... вам также может понравиться этот репозиторий: github.com/pex-gl/ pex-color - person Myndex; 29.12.2019
comment
Понятно! gist.github.com/mnpenner/19840a89f3989b389cc2f3f721ff6511 - person mpen; 29.12.2019
comment
@mpen nice ... чего-то не хватает, я думаю, вы можете захотеть - обратите внимание на ваши значения LAB для sRGB 128,128,128. LAB должен быть 53.59,0.0,0.0 - чего не хватает, так это осветителя. sRGB - D65. Строки 43 и 45 должны быть X / = 95,047; Z / = 108,883; и строка 67 должна быть: return [X * 95.047, Y * 100, Z * 108.883]; Если я понимаю, что вы хотите выполнять операции в пространстве LAB, я думаю, вы захотите изменить эти строки, как показано. - person Myndex; 30.12.2019
comment
Фиксированный. Теперь выходит как 128,128,128 -> 53.6,-0.0000100,0.00000400 -> 128,128,128. Спасибо за проверку моего кода! - person mpen; 31.12.2019