Розподіліть об’єкти в кубі так, щоб вони мали максимальну відстань між собою


11

Я намагаюся використовувати кольорову камеру для відстеження кількох об’єктів у просторі. Кожен об'єкт матиме різний колір, і щоб можна було добре розрізняти кожен об'єкт, я намагаюся переконатися, що кожен колір, присвоєний об'єкту, максимально відрізняється від будь-якого кольору на будь-якому іншому об’єкті.

У просторі RGB у нас є три площини, всі зі значеннями від 0 до 255. У цьому кубі я хотів би розподілити кольорів так, щоб було якомога більше відстані між собою та інші можливі. Додатковим обмеженням є те, що та (або максимально наближені до них) повинні бути включені до кольорів, тому що я хочу переконатися, що жоден із моїх об'єкти мають будь-який колір, тому що фон, ймовірно, буде одним із цих кольорів.n ( 0 , 0 , 0 ) ( 255 , 255 , 255 ) n ( n - 2 )(0,0,0)/(255,255,255)н(0,0,0)(255,255,255)н(н-2)

Ймовірно, (включаючи чорний і в той час) буде не більше 14.н

Заздалегідь дякую за будь-які вказівки щодо отримання цих кольорів.


2
Я думаю, вам слід розглянути лише двовимірний простір, тому що ваша камера, ймовірно, не зможе розрізнити об'єкти, які мають однаковий колір, але різної інтенсивності. Однак проблема цікава.
Стефан Гіменес

Три виміри походять з трьох кольорових площин: червоної, зеленої та синьої, де кожен може незалежно приймати значення від 0-255. У просторі RGB я не думаю, що є інтенсивність. Є й інші кольорові простори, які можуть бути більш підходящими для цього, оскільки вони можуть бути лише двовимірними, хоча я не знаю багато про них.
Метт

Якщо ви можете точно контролювати кількість світла, що відкидається на об'єкти, тоді добре. У просторі RGB (100, 100, 100) і (200, 200, 200) - це те, що я назвав одним кольором (сірим) з різною інтенсивністю.
Стефан Гіменез

@Matt, здається, Стефан пропонує вам використовувати кубик HSL або HSV, а не куб RGB. Кольори відображені в більшій чи меншій мірі, але тоді ви можете ігнорувати S-компонент для двовимірної карти. Я б пішов далі, щоб запропонувати 1D шкалу тільки для Н на вибраному SV або SL, який би підтримував ваші кольори в подібному естетичному "тоні". Алгоритм рівного розподілу над 1D теж простіший!
Джейсон Клебан

1
Так, максимальна попарна відстань. @ uosɐſ HSV насправді здавався кращими результатами, ніж RGB. Навіть використовуючи всі три площини HSV, я міг краще вибирати окремі кольори залежно від відстані до кожного ідеального кольору.
Метт

Відповіді:


4

Усі кольори будуть на поверхні куба RGB, якщо я не помиляюся, з тієї ж причини, що весь електричний заряд з’являється на поверхні електричних провідників. Це пропонує наступний метод визначення кольорів:

  • інтерпретувати RGB кольоровий простір як декартовий простір XYZ;
  • інтерпретувати кольори-кандидати як заряджені частинки, наприклад, електрони;
  • знайти низько енергетичний стан системи, наприклад, через імітований відпал;

н15

Після того як частинки сходяться, ви маєте розташування кольорів, інтерпретуючи точки як кольори. Спочатку частинки можуть розташовуватися випадковим чином на поверхні куба, з невеликим інтервалом (допомагає зближенню та стабільності). Нанесення невеликих груп на грані куба повинно працювати.

Щоб уникнути зациклювання на локальному (а не глобальному) мінімумі, ви можете «імпульсувати» якесь невелике випадкове електричне поле після конвергенції і побачити, чи повертається система до тієї ж конфігурації чи іншої. Дещо малоймовірно, що випадково розміщені частинки зроблять це в цьому сценарії, але можливо.

Редагувати:

Як зазначалося в коментарях, припущення, що оптимальні рішення повинні лежати лише на поверхні, ймовірно, не відповідає всім геометріям у дискретному випадку.

На щастя, це мало стосується решти описаної вище техніки. Частинки можна спочатку розмістити де завгодно; просто залиште деякий простір між парами частинок для стабільності та покриття, а потім повторіть систему до конвергенції, потім кілька разів пульсуйте (можливо, із збільшенням інтенсивності), щоб побачити, чи зможете ви змусити систему конвергуватися до якоїсь іншої (можливо кращої) конфігурації .

Також зауважте, що я вважаю, що цей метод максимізує щось на зразок "(гармонічного?) Середнього відстані між парами частинок". Якщо ви хочете максимально збільшити мінімальну відстань між парами частинок або якусь іншу середню (геометричну?) Між парами частинок, це може не дати вам найкращого рішення.

У будь-якому випадку, я відчуваю, що ця методика дасть вам простий спосіб придумати хороші приблизно оптимальні набори кольорів ... отримання фактичних "оптимальних" рішень, ймовірно, не потрібно для вашого використання. Звичайно, якщо потрібне точне і напевно оптимальне рішення, чисельне моделювання, мабуть, не найкращий шлях.


3
н=9

@SaeedAmiri Цікаве спостереження ... питання може бути цілком дискретним у цій проблемі порівняно зі звичайним фізичним обговоренням щільності заряду. Однак варто зазначити, що немає причин, що чисельне моделювання з фізичним відпалом все ще не знайде описане вами рішення; редагування відповіді, щоб відповісти на ваш коментар і це розуміння.
Patrick87

Я побачу, чи зможу я зрозуміти, як це зробити в matlab (за допомогою simulannealbnd). Я уявляю, що складність буде в перекладі задачі на математичну функцію, яку matlab може спробувати мінімізувати.
Метт

ps моєю початковою думкою було використання вершин багатогранника (icosahedron), оскільки я також думав, що рішення, ймовірно, матиме їх на поверхні, але тоді я не був впевнений, що це буде правдою.
Метт

У matlab я написав функцію, яка задала набір (x, y, z) точок, вона обчислює суму попарно евклідових відстаней між кожною парою точок у множині. Потім я поділяю одне на результат, і в matlab повинен знаходити мінімум цієї функції. Але matlab не справляється, наприклад, для 4-х 3D-точок він повертає такі x1, x2, x3, x4; y1, y2 .... бали (діапазон 0-1): 0,0001, 0,0031, 0,9993, 0,9920 ; 0,9970 0,0004 0,9919 0,0030; 0,0030 0,0003 0,9973 0,5756. Тим не менш, я думаю, що це питання з matlab, тому я прийму це.
Метт
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.