Verteilen Sie Objekte in einem Würfel so, dass sie einen maximalen Abstand zueinander haben

11

Ich versuche, mit einer Farbkamera mehrere Objekte im Raum zu verfolgen. Jedes Objekt hat eine andere Farbe und um gut zwischen den einzelnen Objekten unterscheiden zu können, versuche ich sicherzustellen, dass sich jede einem Objekt zugewiesene Farbe von jeder Farbe eines anderen Objekts so stark wie möglich unterscheidet.

Im RGB-Raum haben wir drei Ebenen, alle mit Werten zwischen 0 und 255. In diesem Würfel möchte ich die n Farben so verteilen , dass es so viel gibt Abstand zwischen sich und anderen wie möglich. Eine zusätzliche Einschränkung besteht darin, dass ( 0 , 0 , 0 ) und ( 255 , 255 , 255 ) (oder so nah wie möglich an ihnen) in das n aufgenommen werden sollten(0,0,0)/(255,255,255)n(0,0,0)(255,255,255)nFarben, weil ich sicherstellen möchte, dass keines meiner Objekte eine der beiden Farben annimmt, da der Hintergrund wahrscheinlich eine dieser Farben sein wird.(n2)

Wahrscheinlich wird (einschließlich schwarz und while) nicht mehr als ungefähr 14 sein.n

Vielen Dank im Voraus für Hinweise, wie Sie diese Farben erhalten.

Matt
quelle
2
Ich denke, Sie sollten nur einen zweidimensionalen Raum betrachten, da Ihre Kamera wahrscheinlich nicht in der Lage sein wird, Objekte mit derselben Farbe, aber unterschiedlicher Intensität zu unterscheiden. Das Problem ist jedoch interessant.
Stéphane Gimenez
Die drei Dimensionen stammen aus den drei Farbebenen: Rot, Grün und Blau, wo sie unabhängig voneinander Werte von 0 bis 255 annehmen können. Im RGB-Bereich gibt es meiner Meinung nach keine Intensität. Es gibt andere Farbräume, die dafür besser geeignet sind, da sie möglicherweise nur 2D sind, obwohl ich nicht viel über sie weiß.
Matt
Wenn Sie die Lichtmenge, die auf Objekte fällt, genau steuern können, klicken Sie auf OK. Im RGB-Raum (100, 100, 100) und (200, 200, 200) habe ich die gleiche Farbe (grau) mit unterschiedlichen Intensitäten genannt.
Stéphane Gimenez
@Matt, Stephane scheint vorzuschlagen, dass Sie einen HSL- oder HSV-Würfel anstelle eines RGB-Würfels verwenden. Die Farben werden mehr oder weniger zugeordnet, aber dann können Sie die S-Komponente für eine 2D-Karte ignorieren. Ich würde noch weiter gehen und eine 1D-Skala für H allein bei einem ausgewählten SV oder SL vorschlagen, die Ihre Farben in einem ähnlichen ästhetischen "Ton" hält. Der Gleichverteilungsalgorithmus über 1D ist auch einfacher!
Jason Kleban
1
Ja, der maximale paarweise Abstand. @ uosɐſ HSV schien tatsächlich bessere Ergebnisse zu liefern als RGB. Selbst wenn ich alle drei HSV-Ebenen verwenden würde, könnte ich die einzelnen Farben besser anhand des Abstands zu jeder idealen Farbe auswählen.
Matt

Antworten:

4

Alle Farben befinden sich auf der Oberfläche des RGB-Würfels, sofern ich mich nicht irre, aus demselben Grund, aus dem die gesamte elektrische Ladung auf der Oberfläche der elektrischen Leiter erscheint. Dies schlägt die folgende Methode zur Bestimmung der Farben vor:

  • den RGB-Farbraum als kartesischen XYZ-Raum interpretieren;
  • Kandidatenfarben als geladene Teilchen interpretieren, z. B. Elektronen;
  • Finden Sie den Niedrigenergiezustand des Systems durch z. B. simuliertes Tempern.

n15

Sobald Partikel konvergieren, können Sie Farben anordnen, indem Sie Punkte als Farben interpretieren. Anfänglich können Partikel mit geringem Abstand zufällig auf der Würfeloberfläche angeordnet werden (hilft bei Konvergenz- und Stabilitätsproblemen). Das Platzieren kleiner Gruppen auf den Flächen des Würfels sollte funktionieren.

Um zu vermeiden, dass Sie in einem lokalen (und nicht in einem globalen) Minimum stecken bleiben, können Sie nach der Konvergenz ein kleines zufälliges elektrisches Feld "pulsieren" und prüfen, ob das System zur gleichen oder zu einer anderen Konfiguration zurückkehrt. Es ist etwas unwahrscheinlich, dass zufällig platzierte Partikel dies in diesem Szenario tun, aber möglich.

BEARBEITEN:

Wie in den Kommentaren ausgeführt, gilt die Annahme, dass optimale Lösungen nur auf der Oberfläche liegen sollten, wahrscheinlich nicht für alle Geometrien im diskreten Fall.

Glücklicherweise hat dies wenig Einfluss auf den Rest der oben beschriebenen Technik. Partikel können anfänglich überall platziert werden; Lassen Sie einfach etwas Platz zwischen den Partikelpaaren, um Stabilität und Bedeckung zu gewährleisten, und iterieren Sie das System dann zur Konvergenz. Pulsieren Sie dann einige Male (möglicherweise mit zunehmender Intensität), um festzustellen, ob das System zu einer anderen (möglicherweise besseren) Konfiguration konvergieren kann .

Beachten Sie auch, dass ich glaube, dass diese Methode so etwas wie "(harmonische?) Durchschnittliche Entfernung zwischen Teilchenpaaren" maximiert. Wenn Sie den Mindestabstand zwischen Partikelpaaren oder einen anderen Durchschnitt (geometrisch?) Zwischen Partikelpaaren maximieren möchten, ist dies möglicherweise nicht die beste Lösung.

Ich bin auf jeden Fall der Meinung, dass diese Technik Ihnen eine einfache Möglichkeit bietet, gute, ungefähr optimale Farbsätze zu finden. Für Ihren Anwendungsfall ist es wahrscheinlich nicht erforderlich, tatsächliche "optimale" Lösungen zu erhalten. Wenn eine genaue und nachweislich optimale Lösung gewünscht wird, ist die numerische Simulation wahrscheinlich nicht der beste Weg.

Patrick87
quelle
3
n=9
@SaeedAmiri Interessante Beobachtung ... das Problem kann sehr wohl die diskrete Natur dieses Problems sein, verglichen mit der üblichen physikalischen Diskussion der Ladungsdichten. Es ist jedoch erwähnenswert, dass es keinen Grund gibt, warum die numerische Simulation mit physikalischem Tempern die von Ihnen beschriebene Lösung nicht finden würde. Bearbeiten der Antwort, um Ihren Kommentar und diese Einsicht erneut auszuwählen.
Patrick87
Ich werde sehen, ob ich herausfinden kann, wie das in matlab (mit simulannealbnd) geht. Die Schwierigkeit, die ich mir vorstelle, wird darin bestehen, das Problem in eine mathematische Funktion zu übersetzen, die matlab zu minimieren versuchen kann.
Matt
ps Mein erster Gedanke war, die Eckpunkte eines Polyeders (Ikosaeder) zu verwenden, da ich auch dachte, dass die Lösung sie wahrscheinlich an der Oberfläche haben würde, aber dann war ich mir nicht sicher, ob das wahr sein würde.
Matt
In matlab habe ich eine Funktion geschrieben, die bei einer Menge von (x, y, z) Punkten die Summe der paarweisen euklidischen Abstände zwischen jedem Punktpaar in der Menge berechnet. Dann dividiere ich eins durch das Ergebnis und matlab soll das Minimum dieser Funktion finden. Aber matlab macht es nicht richtig, zum Beispiel gibt es für 4 3D-Punkte die folgenden x1, x2, x3, x4; y1, y2 .... Punkte (0-1 Bereich) zurück: 0,0001, 0,0031, 0,9993, 0,9920 ;; 0,9970 0,0004 0,9919 0,0030; 0,0030 0,0003 0,9973 0,5756. Trotzdem denke ich, dass es ein Matlab-Problem ist, also werde ich das akzeptieren.
Matt