Алгоритм раскраски узлов иерархически - PullRequest
3 голосов
/ 12 января 2012

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

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

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

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

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

1 Ответ

0 голосов
/ 01 января 2013

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

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

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

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

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

...