2013-07-17 6 views
5

Ich bin gerade dabei, eine ordentliche Möglichkeit zu finden, getrennte "Zweige" in einem Binärbild zu speichern. Diese kleine Animation erklärt es:OpenCV: Suche nach Pixeln entlang einzelner Pixelzweige

searching for branches

Als ich entlang der Zweige gehen Ich brauche die Pixelindizes zu sammeln, die ein einzelnes Pixel breiten Zweig bildet. Wenn ich einen Kreuzungspunkt treffe, sollte er sich aufteilen und die neuen Zweige speichern.

Eine Möglichkeit, dies zu tun, ist vielleicht, eine 3x3 Subregion zu erstellen, herauszufinden, ob darin weiße Pixel sind, sie entsprechend zu verschieben, einen Verbindungspunkt zu erstellen, wenn es mehr als zwei gibt. Speichern Sie die vorherige Unterregion immer so, dass Sie sie verwenden können, um sicherzustellen, dass wir nicht in Regionen gehen, die bereits gescannt wurden. Es ist ein bisschen schwierig, herauszufinden, wie ich es tun würde.

Ich muss im Grunde die Pixel basierend auf einer "Linie/Kurve" Hierarchie neu anordnen. Ein anderer Teil der Anwendung wird dann die Figuren neu zeichnen, was intern funktioniert, indem Linien zwischen Punkten erzeugt werden, daher die Notwendigkeit, sie "geordnet" zu haben.

+0

Dies sieht aus wie ein [Graph Traversal Problem] (http://en.wikipedia.org/wiki/Graph_traversal), wobei Verbindungspunkte sind Knoten und einzelnes Pixel breite Zweige sind die Kanten des Graphen. Ausgehend von einem beliebigen Anfangspunkt können Sie alle Verzweigungen und Verzweigungen durch Anwendung von Graph-Traversal-Algorithmen wie [Breitensuche] (http://en.wikipedia.org/wiki/Breadth-first_search) oder [Tiefensuche zuerst] ermitteln ] (http://en.wikipedia.org/wiki/Depth-first_search) – Alexey

+0

Sie können auch in [Connected Components Labeling] (http://en.wikipedia.org/wiki/Connected-component_labeling) – Alexey

+0

@pray schauen Müssen Sie hier suchen? Ist es eine Einschränkung, von einem Zweig auszugehen und sich dort zu bewegen? Wenn Sie das gesamte Bild "sehen" können, ist es einfacher, die Zweige zu gruppieren und zu beschriften. Wenn dies nicht möglich ist, müssen Sie zunächst eine Tiefensuche durchführen und zur Kreuzung zurückkehren, um nach einer anderen Suche zu suchen. Speichern Sie die Daten jedes Mal - wie Alexey gerade vorgeschlagen hat. – baci

Antwort

1

Ich weiß nicht, ob Sie es in Ihrem Fall anwenden könnten, aber Sie sollten sich cv :: findContour ansehen. erhalten Sie einen Vektor der bestellten Punkte.

http://docs.opencv.org/doc/tutorials/imgproc/shapedescriptors/find_contours/find_contours.html

+0

Ah, versuchte das. findContours spielt nicht gut mit Single-Pixel-Linien. Es ist auch nicht wirklich geeignet für das, was ich später mit den Daten machen möchte. – prayforbacon

+0

Vielleicht könnten Sie mit ROI spielen, aber um Ihre Punkte zu bestellen kann ich nicht besser ... – Poko

+0

Ich bin ein Idiot. Diese Methode funktioniert, speziell mit der vorher angewandten Verdünnung. – prayforbacon