как определить наиболее похожий цвет? - PullRequest
0 голосов
/ 12 апреля 2020

У меня более 2000 наименований цветов, и я хочу, чтобы с заданным цветом (например, # 0087b4) в моем списке был найден цвет, который визуально наиболее соответствует c этому цвету. Есть ли какой-нибудь алгоритм, который может помочь мне сделать это?

Ответы [ 2 ]

1 голос
/ 12 апреля 2020

Я не знаю, насколько это вам поможет! У меня была похожая проблема. Когда мы говорим о человеческой видимости, все зависит от перспектив, от одного человека к другому. Красный, который для меня красный, может быть или не быть красным для меня. Поэтому очень сложно создать модуль, который будет работать для всех. Я обнаружил, что формат изображения HSV будет хорошо работать здесь.

As

H ---> Представляет изменение цвета от полосы к другой, такой как красный, зеленый, синий, голубой, пурпурный, желтый

S ---> Когда мы изменим S, цвет будет перемещен в той же цветовой полосе, которая была выбрана в H

V ----> Когда мы изменим V, мы увидим изменение яркости.

Согласно многим исследованиям контрастность The human visual system is more sensitive to contrast than absolute luminance

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

1 голос
/ 12 апреля 2020

Если у вас есть сопоставление имен цветов с их значениями цветового пространства, вы можете использовать любые методы ближайшего соседа, такие как KNN или любые варианты быстрого ближайшего соседа. Если вам нужен только один ближайший цвет, используйте KNN с k = 1.

Еще одна вещь, которую вы можете попробовать, это собрать все ваши цвета в матрицу в виде строк и построить матрицу цветов C, скажем, если вы Использует цветовое пространство RGB, C будет матрицей 2000x3, ее n-ая строка содержит компоненты R, G и B вашего n-го цвета. Затем, чтобы найти цвет, наиболее близкий к цвету x, который является вектором 3x1, имеющим компоненты R, G и B, вычислите произведение C .x, это должно дать вам вектор 2000x1, найти индекс его наибольшего элемента. Цвет, соответствующий этой строке, является самым близким цветом к x. Для большей точности вы можете нормализовать цвета как C, так и x. Найдите средние значения и отклонения компонентов R, G и B ваших цветов в C и используйте эти значения для нормализации цветов в C и цвете x.

...