Distribuire gli oggetti in un cubo in modo che abbiano la massima distanza tra loro


11

Sto cercando di utilizzare una telecamera a colori per tracciare più oggetti nello spazio. Ogni oggetto avrà un colore diverso e per essere in grado di distinguere bene tra ogni oggetto, sto cercando di assicurarmi che ogni colore assegnato a un oggetto sia il più diverso da qualsiasi colore su qualsiasi altro oggetto possibile.

Nello spazio RGB, abbiamo tre piani, tutti con valori compresi tra 0 e 255. In questo cubo , vorrei distribuire gli colori in modo che ci sia la stessa distanza tra loro e altri possibili. Un'ulteriore limitazione è che e (o il più vicino possibile a loro) dovrebbero essere inclusi negli colori, perché voglio assicurarmi che nessuno dei miei oggetti prendono entrambi i colori perché lo sfondo sarà probabilmente uno di questi colori.(0,0,0)/(255,255,255)n(0,0,0)(255,255,255)n(n2)

Probabilmente (compreso il nero e mentre) non sarà più di circa 14.n

Grazie in anticipo per eventuali suggerimenti su come ottenere questi colori.


2
Penso che dovresti considerare solo uno spazio bidimensionale, perché la tua fotocamera probabilmente non sarà in grado di distinguere oggetti che hanno lo stesso colore ma intensità diverse. Il problema è interessante però.
Stéphane Gimenez,

Le tre dimensioni provengono dai tre piani di colore: rosso, verde e blu, dove ciascuno può assumere indipendentemente valori da 0 a 255. Nello spazio RGB, non penso che ci sia intensità. Ci sono altri spazi colore che potrebbero essere più adatti per questo dato che potrebbero essere solo 2D, anche se non ne so molto.
Matt,

Se riesci a controllare con precisione la quantità di luce proiettata sugli oggetti, allora OK. Nello spazio RGB (100, 100, 100) e (200, 200, 200) sono quello che ho chiamato lo stesso colore (grigio) con intensità diverse.
Stéphane Gimenez,

@Matt, Stephane sembra suggerire di utilizzare un cubo HSL o HSV anziché un cubo RGB. I colori sono mappati, più o meno, ma puoi ignorare il componente S per una mappa 2D. Vorrei andare oltre a suggerire una scala 1D su H da sola in una SV o SL scelta che manterrebbe i tuoi colori con un "tono" estetico simile. Anche l'algoritmo di distribuzione uguale su 1D è più semplice!
Jason Kleban,

1
Sì, la distanza massima a coppie. @ uosɐſ HSV sembrava effettivamente restituire risultati migliori rispetto a RGB. Anche usando tutti e tre i piani HSV avrei potuto selezionare meglio i singoli colori in base alla distanza di ciascun colore ideale.
Matt,

Risposte:


4

Tutti i colori saranno sulla superficie del cubo RGB, a meno che non mi sbagli, per lo stesso motivo per cui tutta la carica elettrica appare sulla superficie dei conduttori elettrici. Questo suggerisce il seguente metodo per determinare i colori:

  • interpretare lo spazio colore RGB come uno spazio cartesiano XYZ;
  • interpretare i colori candidati come particelle cariche, ad esempio elettroni;
  • trovare lo stato a bassa energia del sistema attraverso, ad esempio, ricottura simulata;

Per , una simulazione altamente accurata dovrebbe essere abbastanza rapida; potresti usare una tecnica di Runge Kutta, o anche il metodo di Euler con un piccolo passo potrebbe probabilmente farlo (molto più facile da implementare / capire). Potrei suggerire la serie "Ricette numeriche" per l'integrazione numerica / tecniche di quadratura di interesse.n15

Una volta che le particelle convergono, hai la disposizione dei colori interpretando i punti come colori. Inizialmente, le particelle possono essere disposte in modo casuale sulla superficie del cubo, con una piccola spaziatura (aiuta i problemi di convergenza e stabilità). Mettere piccoli gruppi sulle facce del cubo dovrebbe funzionare.

Per evitare di rimanere bloccati in un minimo locale (piuttosto che globale), è possibile "pulsare" un piccolo campo elettrico casuale dopo la convergenza e vedere se il sistema torna alla stessa configurazione o in uno diverso. È alquanto improbabile che particelle posizionate casualmente lo facciano in questo scenario, ma possibile.

MODIFICARE:

Come sottolineato nei commenti, il presupposto che le soluzioni ottimali dovrebbero trovarsi solo sulla superficie probabilmente non vale per tutte le geometrie nel caso discreto.

Fortunatamente, questo ha poco a che fare con il resto della tecnica sopra descritta. Le particelle possono essere inizialmente posizionate ovunque; basta lasciare un po 'di spazio tra le coppie di particelle per stabilità e coprenza, quindi iterare il sistema alla convergenza, quindi pulsare alcune volte (possibilmente con intensità crescente) per vedere se riesci a far convergere il sistema in una configurazione diversa (forse migliore) .

Inoltre, credo che questo metodo massimizzerà qualcosa come "(armonica?) Distanza media tra coppie di particelle". Se vuoi massimizzare la distanza minima tra le coppie di particelle, o qualche altra media (geometrica?) Tra le coppie di particelle, questo potrebbe non darti la soluzione migliore.

In ogni caso, credo che questa tecnica ti fornirà un modo semplice per trovare buoni set di colori approssimativamente ottimali ... Ottenere soluzioni "ottimali" reali non è probabilmente necessario per il tuo caso d'uso. Naturalmente, se si desidera una soluzione esatta e decisamente ottimale, la simulazione numerica non è probabilmente il modo migliore di procedere.


3
Per migliore soluzione è mettere uno dei nodi al centro del cubo e mettere gli altri negli angoli del cubo, quindi i tuoi presupposti non sono veri. n=9

@SaeedAmiri Osservazione interessante ... il problema potrebbe benissimo essere con la natura discreta di questo problema, rispetto alla normale discussione fisica delle densità di carica. Vale la pena notare, tuttavia, che non c'è motivo per cui la simulazione numerica con ricottura fisica non trovi ancora la soluzione che descrivi; modifica della risposta per ri-selezionare il tuo commento e questa intuizione.
Patrick87,

Vedrò se riesco a capire come farlo in matlab (con simulannealbnd). La difficoltà che immagino sarà nel tradurre il problema in una funzione matematica che Matlab può cercare di minimizzare.
Matt,

ps il mio pensiero iniziale era di usare i vertici di un poliedro (icosaedro), poiché pensavo anche che la soluzione li avrebbe probabilmente in superficie, ma poi non ero sicuro che fosse vero.
Matt,

In matlab ho scritto una funzione, che dato un insieme di punti (x, y, z), calcola la somma delle distanze euclidee a coppie tra ogni coppia di punti nell'insieme. Quindi divido uno per il risultato e si suppone che matlab trovi il minimo di questa funzione. Ma matlab non funziona nel modo giusto, ad esempio, per 4 punti 3D restituisce i seguenti punti x1, x2, x3, x4; y1, y2 .... (intervallo 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. Tuttavia, penso che sia un problema matlab, quindi accetterò questo.
Matt,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.