Алгоритм иерархического окрашивания узлов

У меня есть сеть, в которой узлы определены иерархически (через кодировку UN SITC). ). В моем приложении каждый узел имеет четыре идентификационные цифры возрастающей иерархической специфичности (например, см. продукт 7431), но сеть, которую я определил, представляет собой не просто очевидную иерархическую структуру. Что я пытаюсь сделать, так это раскрасить узлы иерархически, но расположить их в соответствии с моим сетевым расчетом и посмотреть, в какой степени они совпадают.

Вообще говоря, я ищу способ генерировать N цветовых палитр, максимально визуально отличающихся от одного и другого (очевидно, что с ростом N это становится все менее и менее эффективным), а затем делить их на подпалитры, пока не достигну желаемого иерархическая глубина.

В частности, это означало бы выбор 10 базовых цветов для первой цифры и создание палитр из K‹=10 цветов для каждой из них, где K — количество возможных значений, которые может принимать вторая цифра, и снова для третьей и четвертой цифр до тех пор, пока Я получаю все узлы, окрашенные в соответствии с их иерархической информацией. Зеленые — это один тип, и в них определенные оттенки зеленого определяют определенные семейства узлов, соответствующие визуальному подобию.

Похоже, что «Analagous» — это свойство цвета, которое я хочу реализовать. Будет ли простое регулярное разделение параметра оттенка в схеме HSV/HSL или есть лучший способ?

Я буду реализовывать его на Python, но любой алгоритм должен быть независимым от языка.


person mmdanziger    schedule 12.01.2012    source источник
comment
Можете ли вы опубликовать меньший наглядный пример, показывающий, для чего вы снимаете?   -  person Richard    schedule 08.12.2012


Ответы (1)


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

После многих недель возни с кубом цветов RGB я сдался и перешел на HSV — и никогда не оглядывался назад. Я бы определил те оттенки, которые определяют цвета, а затем переставил бы их на основе этого, чтобы у вас не было двух желтых цветов - скорее, вы бы начали с x, а затем добавили бы кратные k, чтобы у вас было что-то вроде этого:

x is red
x+k is yellow
x+2k is green
... so forth

В рамках этого я бы разделил и, возможно, переставил «значение» и «насыщенность» небольшими количествами, чтобы увеличить количество доступных вам цветов.

Если вы в конечном итоге конвертируете между системами, я без проблем использовал colorsys.

person jimf    schedule 01.01.2013