2016-09-25 3 views
0

Ich habe ein Array aller [x, y] Werte für jedes weiße Pixel in einem Bild. Ich möchte diese Pixel grundsätzlich in separate Arrays gruppieren, wenn einige der weißen Pixel getrennt sind und Teil einer anderen Gruppe als die anderen sind. Stellen Sie sich ein rotes Bild mit einem weißen Fleck auf der linken Seite und einem weiteren weißen Fleck auf der rechten Seite vor (getrennt durch eine Entfernung und nicht durch irgendwelche weißen Pixel verbunden).JS - Gruppe Blobs der gleichen Farbe basierend auf Entfernung

Ich möchte die ursprüngliche Anordnung aller weißen Pixel in zwei Arrays aufteilen, wobei eine die weißen Pixel für den ersten und die anderen weißen Pixel für die zweite darstellt. Dies ist nur ein Beispiel, es könnte einen großen weißen Blob oder viele kleinere weiße Blobs geben - es muss in der Lage sein, mit allen Fall-Szenarien zu arbeiten.

Mein erster Gedanke war, DBSCAN als Teil von https://github.com/uhho/density-clustering zu verwenden, um separate "Blobs" oder "Cluster" zu identifizieren, aber leider funktioniert das nicht, da mein Bild groß sein kann und es mehr als 100.000 Pixel geben könnte, die Clustering benötigen (Ich brauche diese Operation in wenigen ms).

Gibt es eine andere Möglichkeit, dies zu erreichen oder einen schnelleren Clustering-Algorithmus zu verwenden?

Antwort

0

Clustering ist hier das falsche Werkzeug - es ist zu komplex (und damit teuer).

Was Sie suchen, ist bekannt als verbundenen Komponenten. DBSCAN basiert auf verbundenen Komponenten, bietet aber mehr als Sie benötigen.

+0

Ok - kennen Sie irgendwelche Implementierungen von verbundenen Komponenten in Javascript? Außerdem versuche ich nicht nur zu sehen, ob die Blobs verbunden sind - ich versuche zu sehen, ob sie an allen Punkten mindestens um einen Abstand von mindestens "n" getrennt sind. Mit anderen Worten, wenn der Blob konkav ist und zu einem bestimmten Zeitpunkt dem anderen Blob sehr nahe kommt (wie durch "n" bestimmt), dann sollten sie nicht als zwei Blobs betrachtet werden, sondern eher als einer. – abagshaw

+0

Bibliothek Empfehlungen sind off-topic Fragen hier. Außerdem würde ich nie eine Bibliothek dafür verwenden, sondern sie direkt auf das Problem anwenden, so dass es schnell und anpassbar ist. Es ist nicht schwer, wofür man eine Bibliothek braucht. In der Tat bedeutet eine Bibliothek wahrscheinlich, dass Sie mehr Aufwand betreiben müssen, um Daten von Modell A zu Modell B und zurück zu konvertieren, als wenn Sie nur den Algorithmus selbst implementieren würden. –

+0

Ok, das macht Sinn. Wie auch immer, ist das Klassifizieren der "Blobs" oder "Komponenten" als einzigartig basierend auf der Entfernung ein separates Problem? Ich kann nur daran denken, alle äußeren Randpunkte mit allen anderen äußeren Randpunkten durch euklidische Distanz zu vergleichen, sobald die Blobs getrennt sind, aber ich würde mir vorstellen, dass dies sehr ineffizient ist. – abagshaw

Verwandte Themen