Gibt es Algorithmen zur Berechnung der umgrenzenden Rekruten von Sprites, die auf einem monochromen Hintergrund gezeichnet sind?

8

Stellen Sie sich eine einfache rechteckige Bitmap mit beispielsweise 1024 x 768 Pixeln vor, die mit Weiß gefüllt sind. Es gibt einige (nicht überlappende) Sprites, die auf die Bitmap gezeichnet werden: Kreise, Quadrate und Dreiecke.

Gibt es einen Algorithmus (möglicherweise sogar eine C ++ - Implementierung), der angesichts der Bitmap und der Farbe, die die Hintergrundfarbe ist (weiß im obigen Beispiel), eine Liste mit den kleinsten umschreibenden Rechtecken für jeden der Sprites liefert?

Hier ist ein Beispiel: Auf der linken Seite sehen Sie eine Beispiel-Bitmap, die meinen Code enthält (zusammen mit der Information, dass der 'Hintergrund' weiß ist). Auf der rechten Seite sehen Sie das gleiche Bild zusammen mit den Begrenzungsrechtecken der vier Formen (in rot); Der Algorithmus, den ich suche, berechnet die Geometrie dieser Rechtecke.

Bild eingeben http://s1.directupload.net/images/111215/ruycwlgl.png Ausgabebild http://s1.directupload.net/images/111215/encr84ps.png

Einige Malprogramme haben eine ähnliche Funktion zur Auswahl von Formen: Sie können sogar scheinbar willkürliche Polygone berechnen. Anstatt ein Auswahlrechteck manuell zu ziehen, können Sie auf den "Hintergrund" klicken (was ist der Hintergrund und was nicht, wird durch einen Schwellenwert bestimmt) und dann berechnet das Werkzeug automatisch die Form des Objekts, das auf den Hintergrund gezeichnet wird. Ich brauche so etwas, außer dass es mir vollkommen gut geht, wenn ich nur die rechteckigen Begrenzungsflächen für Objekte habe.

Ich wurde auf OpenCV aufmerksam; es scheint relevant zu sein (es scheint eine Bibliothek zu sein, die jeden Grafikalgorithmus enthält, den ich mir vorstellen kann - und dann einige), aber in der schnellen Menge an Informationen konnte ich den Weg zu dem Algorithmus, an den ich denke, nicht finden. Ich wäre überrascht, wenn OpenCV dies nicht tun könnte, aber ich befürchte, dass Sie einen Doktor haben müssen, um es zu benutzen. : -)

    
Frerich Raabe 14.12.2011, 22:33
quelle

2 Antworten

2

Hier ist der großartige Artikel zum Thema:

Ссылка

Ich denke, dass PhD hier nicht erforderlich ist:)

    
Daniel Mošmondor 15.12.2011, 04:10
quelle
2

Das sind meine ersten Gedanken, keine komplizierten, außer der Kantenerkennung

%Vor%

Ich habe gerade festgestellt, dass dies weiße "Löcher" (wie in Ihrem linken Kreis in Ihrer Probe) als eigene Form annehmen wird. Wenn die erste "Schleife" eine Flutfüllung ist, hat sie dieses Problem nicht, wird aber viel langsamer / viel mehr Speicher benötigen.

Die grundlegende Kantenerkennung, an die ich dachte, war einfach:

%Vor%

Ссылка

Es gibt einige Randfälle, die hier nicht berücksichtigt werden: Was wäre, wenn ein einzelner Punkt beginnt, was ist, wenn er bis zum Rand des Bildes reicht, was ist, wenn der Startpunkt nur 1 px breit ist, aber Blobs zu zwei Seiten hat, wahrscheinlich andere ... Aber der grundlegende Algorithmus ist nicht so kompliziert.

    
Mooing Duck 14.12.2011 23:26
quelle

Tags und Links