LINUX.ORG.RU

Цветовая дистанция - как посчитать быстро?

 , , , ,


0

1

Есть набор из N цветов. И есть цвет K. Необходимо в наборе N найти цвет K' максимально близкий K. Однако таких операций много и это дело надо как-то ускорить. При этом для набора N, не всегда есть представление цвета в Lab, а для цвета K, представление в Lab почти никогда нет - он с вероятностью 60-70% в RGB. Поэтому, и так не быстрая операция вычисления дистанции CIE2000 становится еще затратнее, так как нужно перегнать K в Lab и возможно (хотя и маловероятно) перегнать в Lab какието цвета из N.

Однако есть простой способ - довольствоваться растоянием в RGB пространстве. Это не точно, зато очень быстро. А учитывая, что в N почти всегда есть цвет очень близкий к К - это почти всегда даст хороший результат. Но почти - не подходит. И тут встает вопрос - посчитав RGB растояние, и выбрав K' можно ли как-то быстро определить, можен ли пересчет в CIE2000 изменить выбор K'?

Т.е. на каких отношениях дистанций RGB для разных компонент, начинает сильно изменятся дистанция CIE2000? Можно это как-то найти?

★★★★★

А почему нельзя все цвета заранее перевести в Lab?

для цвета K, представление в Lab почти никогда нет - он с вероятностью 60-70% в RGB

В каком именно RGB? Начнём с этого.

anonymous
()
Ответ на: комментарий от anonymous

В каком именно RGB? Начнём с этого.

А не пофиг ли, побольшому счету?

А почему нельзя все цвета заранее перевести в Lab?

Потому, что источник выдает RGB. И когда я говорю что часть цветов в палитре Lab это потому что их уже туда перегнали в процесе и значение закэшировано.

P.S. Что-то мне подсказывает что я занялся преждевременной оптимизацией - я сейчас набросал - оно достаточно шустро считает, но вопрос остается. Уже интересно просто.

Suntechnic ★★★★★
() автор топика
Ответ на: комментарий от anonymous

И чем это лучше - считать-то все равно придется.

Suntechnic ★★★★★
() автор топика
Ответ на: комментарий от anonymous

А почему нельзя все цвета заранее перевести в Lab?

Потому что, чтобы перевести RGB в Lab надо знать наблюдателя ( CIE1931 или CIE1964 ) и тип источника света, например.

Если учесть, что ТС пишет что

При этом для набора N, не всегда есть представление цвета в Lab, а для цвета K, представление в Lab почти никогда нет - он с вероятностью 60-70% в RGB.

то почти наверняка эти данные ( какой наблюдатель и источник использовался при вычислении/измерении имеющихся Lab ) утеряны/неизвестны, что делает задачу крайне затруднительной.

Stanson ★★★★★
()

Т.е. на каких отношениях дистанций RGB для разных компонент, начинает сильно изменятся дистанция CIE2000?

DL2000 как и DLcmc сильнее будет отличается от RGB (на самом деле лучше про расстояние XYZ говорить, ибо RGB бывают разные) расстояния для малонасыщенных цветов, например.

Ну а вообще - формулу DL2000глянь, там вроде всё и так понятно.

Stanson ★★★★★
()
Ответ на: комментарий от Suntechnic

А не пофиг ли, побольшому счету?

Раз уж вы заморочились с CIEDE2000, это должно подразумевать, что вы как минимум правильно преобразуете цвета из device-dependent RGB в device-independent LAB. Иначе смысл не совсем ясен. Это должно было навести на мысли о CMS, ICC-профилях и т. д. Какую CMS вы используете? Потому что у скорость конвертации RGB -> LAB у них на уровне десятков мегапикселей в секунду, что достаточно для всего, кроме потокового видео. А судя по тому, что ваш источник отдаёт RGB, речь явно не о видео. Так в чём тогда проблема?

anonymous
()
Ответ на: комментарий от Stanson

Мне Lab нужен исколючительно для нахождения дистанции между цветами. Источник обычное изображений, причем еще и jpg. Задача выделить на изображении несколько доминирующих цветов и собрать палитру из 6-8 цветов, для оформления блока с изображением. Т.е. ничего серьезного вобщем-то и это не настоящая работа с цветом.

Suntechnic ★★★★★
() автор топика
Ответ на: комментарий от anonymous

Выше описал проблему. Т.е. правильный перевод не особенно и нужен. Искажения меня не интересуют. Задача сводится только к нахождению дистанции для группировки встретившихся пикселей.

Suntechnic ★★★★★
() автор топика
Ответ на: комментарий от Suntechnic

Задача сводится только к нахождению дистанции для группировки встретившихся пикселей.

Считай тогда дистанцию по rgb и не парься, для выделения классов более чем достаточно.

anonymous
()
Ответ на: комментарий от anonymous

Да, я в курсе и видел решения. Но я хотел бы улучшить результат, потому решил считать в Lab, и в Lab же проводить усреднение внутри класса. Считаешь это излишним? Возможно ли улучшить результа если при вычеслении растояния использовать коофициенты для разных уветов? Дистанция в XYZ способно дать более точный результат?

Suntechnic ★★★★★
() автор топика
Ответ на: комментарий от Suntechnic

ИМХО, достаточно выделить классы по RGB, а усреднить по LAB. AFAIK дистанция по XYZ даст странные результаты.

anonymous
()
Ответ на: комментарий от anonymous

дистанция по XYZ -> дистанция только по XYZ. То есть для усреднения нужно из XYZ добить до LAB. Я вообще брал тупой CIE76 для дистанций и вполне норм выходило.

anonymous
()
Ответ на: комментарий от Suntechnic

Тогда не используй Lab вообще. Ты не сможешь правильно отконвертировать RGB(XYZ) <-> Lab потому что не знаешь наблюдателя и источник освещения. Если у тебя имеющиеся Lab веера получены при одной комбинации источник/наблюдатель, скажем, D65/10, а ты для перевода RGB->Lab пользуешься другой, например А/2 - то в результате получишь полную лажу.

Ну и такое ещё дело - если у тебя что-то светящееся (монитор, светодиодная лента и пр.) - то пользовать RGB вполне можно (хотя, конечно, красивше будет XYZ, но это, в общем-то по барабану). А вот если это отражённый свет - то могу тебя поздравить, у тебя проблемы. Ибо всяческая краска для сколь-нибудь нормального сравнения требует исключительно Lab, ибо влияние источника освещения при котором эти Lab получены - может быть весьма значительно. Это я ещё про метамеризм молчу и прочие геморрои типа люминисценции, которые в общем-то решаются переходом к работе со спектрами, но это уже совсем другая история.

Stanson ★★★★★
()
Ответ на: комментарий от Stanson

По идеи для расчета дистанции это не важно. Именно поэтому я не усредняю по Lab, а считаю только дистанцию. Хотя наверное и усреднять можно бы было. Пусть я перейду в неккоректный Lab, но и наза в RGB я вернусь с точно такими же параметрами. Для отображения Lab же в итоге нигде не используется.

Suntechnic ★★★★★
() автор топика
Ответ на: комментарий от Suntechnic

Пусть я перейду в неккоректный Lab, но и наза в RGB я вернусь с точно такими же параметрами

Ну если у тебя часть веера (или что там) в Lab - то знаешь ли ты с какими параметрами были эти Lab посчитаны? Если не знаешь - то ошибка может быть весьма приличной.

Stanson ★★★★★
()
Ответ на: комментарий от Stanson

Слушай, а какая максимальная дистанция в cie2000. Что-то я запутался в алгоритме, а найти ни где не могу. Не там ищу?

Suntechnic ★★★★★
() автор топика
Ответ на: комментарий от Suntechnic

Ну вообще - обычно L,a,b больше 140 не бывает, так что максимальную дистанцию из этого можно посчитать.

А вообще, всякие dEcmc, dE2000 выбраны исходя из следующего соображения: Если дельта больше 1 - то цветовое различие заметно глазу, если меньше - то незаметно. Именно поэтому у dEcmc, например, такие долбанутые формулы, чтобы типа для разных участков цветового пространства учесть нелинейность глаза, чего нет в простой dE, которая просто расстояние. Оранжевые цвета, например, глаз различает лучше, чем зелёные, а насыщенные хуже чем блёклые, поэтому эллипсоид dEcmc в оранжевой области уже, чем в зелёной, а в насыщенной области больше чем в блёклой. Термин, используемый для описания такой хрени - рerceptual uniformity.

DE2000 - примерно такая же фигня, только придуманная организацией CIE, а не CMC.

На самом деле, народ в основном пользует dEcmc для сравнения и quality control. Т.к. штука более древняя, чем DE2000, то искаропки давно поддерживается приборами и всякой софтверной тряхомудией. А DE2000 никаких сколь-нибудь заметных преимуществ не даёт. В общем, разницы никакой, на самом деле.

Сырец на пистоне для вычисления DE2000 и прочих dExx - https://github.com/gtaylor/python-colormath/blob/master/colormath/color_diff_... Там путаться-то негде, в общем-то.

Stanson ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.