от
Это то, что я псевдо-решена много раз и не нашел решения. Проблема в том, чтобы придумать способ для создания
N
цветов, которые так различимы, как это возможно, где
N
является параметром.

Ваш ответ

Отображаемое имя (по желанию):
Конфиденциальность: Ваш электронный адрес будет использоваться только для отправки уведомлений.

9 Ответы

0 голосов
от
Это то, что я псевдо-решена много раз и не нашел решения. Проблема в том, чтобы придумать способ для создания
N
цветов, которые так различимы, как это возможно, где
N
является параметром.
0 голосов
от
Моя первая мысль на это "как генерировать N векторов в пространстве, что максимально увеличить расстояние друг от друга". Вы можете увидеть, что RGB (или любые другие данные вы используете, что является основой в цветовом пространстве) являются просто векторами. Взгляните на случайную точку сбора. Если у вас есть набор векторов, которые являются максимально друг от друга, вы можете сохранить их в хэш-таблицу или что-то на потом, и просто проанализировать случайных поворотов на них, чтобы получить все цвета, которые вы желаете, максимально друг от друга! Думая об этой проблеме больше, было бы лучше, чтобы сопоставить цвета в линейном режиме, возможно (0,0,0) → (255,255,255) лексикографически, а затем распределить их равномерно. Я действительно не знаю, насколько хорошо это будет работать, но он должен, так, скажем:
n = 10
мы знаем, что у нас есть 16777216 цветов (256^3). Мы можем использовать пряжки алгоритм 515, чтобы найти лексикографически индексированные цвета.. вам, вероятно, придется изменить алгоритм, чтобы избежать переполнения и, вероятно, добавить некоторые незначительные улучшения скорости.
0 голосов
от
Было бы лучше, чтобы найти цвет, максимально далекие по "единой перцептивно" цветового пространства, например, CIELAB (используя Евклидово расстояние между Л*, А*, B* координаты вашего метрика расстояния) и затем преобразование в цветовую модель на ваш выбор. Единообразие восприятия достигается путем настройки цветового аппроксимации нелинейностей в зрительной системе человека.
0 голосов
от
Некоторые связанные ресурсы: ColorBrewer - наборы цветов разработано, чтобы быть максимально различимы для использования на картах. Спасаясь RGBland: выбор цветов для статистические графики - технический отчет, описывающий набор алгоритмов для генерации хороших (т. е. максимально различимы) цвет наборы в цветовое пространство нсl.
0 голосов
от
Вот некоторый код, чтобы выделить цвета RGB равномерно вокруг ВСЛ цветовое колесо заданной светимости.
class cColorPicker
{
public:
    void Pick( vector
0 голосов
от
Да и фактор того, что вы настраиваете цвета? Как если вы используете Dillie-ОС идее нужно как можно смешивать цвета. 0 64 128 256 от одного к другому. но 0 256 64 128 в колесе будет более "отдельно" Есть ли в этом смысл?
0 голосов
от
Я где-то читал, что глаз человека может различать не менее 4 значений врозь. так это что-то, чтобы держать в уме. Следующий алгоритм не компенсирует этого. Я не уверен, что это именно то, что вы хотите, но это один из способов, чтобы случайным образом генерировать неповторяющиеся цветовые значения: (осторожно, непоследовательно псевдо-код впереди)
//colors entered as 0

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

for item in color{
   itemSq = (item[0]^2   item[1]^2   item[2]^2])^(.5);
   tempSq = (temp[0]^2   temp[1]^2   temp[2]^2])^(.5);
   dist = itemSq 

Но такой подход позволил бы значительно замедлить ваш алгоритм.

Другим способом было бы отказаться от случайности и систематически пройти все 4 значения и добавить в массив в приведенном выше примере цвета.
0 голосов
от
Я знаю, это старый пост, но я нашел это, когда искал решение на PHP к теме и, наконец, пришел с простого решения:
function random_color($i = null, $n = 10, $sat = .5, $br = .7) {
    $i = is_null($i) ? mt_rand(0,$n) : $i;
    $rgb = hsv2rgb(array($i*(360/$n), $sat, $br));
    for ($i=0 ; $i
0 голосов
от
Для достижения "выделяющихся" мы должны использовать перцептивного цветового пространства, как лабораторных (или любой другой перцептивно линейное цветовое пространство), а не RGB. Кроме того, мы можем квантовать это пространство, чтобы уменьшить размер пространства. Создать полный 3D-пространстве с всех возможных квантованных записи и выполнения алгоритма k-средних с
k=N
. В результате центры/ "означает" должно быть примерно большинство distinguishabl друг от друга.
...