Suche Möglichkeit Felder in Bitmap zu finden

Fragen zu Grafik- & Soundproblemen und zur Spieleprogrammierung haben hier ihren Platz.
Benutzeravatar
Kukulkan
Beiträge: 1066
Registriert: 09.09.2004 07:07
Wohnort: Süddeutschland
Kontaktdaten:

Suche Möglichkeit Felder in Bitmap zu finden

Beitrag von Kukulkan »

Hallo,

Ich habe solche eine Grafik im Speicher (als Image und ohne die Kommentare und Pfeile):
Bild

Ich möchte automatisch und schnell die roten Rahmen um die schwarzen 'Haufen' ziehen. Zu jedem Rahmen benötige ich x1/y1 und x2/y2 (also die Ecken).

Wie würdet Ihr vorgehen um alle solchen (fast immer waagerechten) 'Haufen' zuverlässig einzukreisen?

Meine erste Idee:
- Pixelweise (oben nach unten und links nach rechts) durchgehen.
- Erster Schwarzer Pixel: Konturfindung
- Konturfindung sucht nach unten und nach rechts nach einem Ende
- Konturfindung hat am Ende höchsten und tiefsten Punkt und ebenso für ganz Links und ganz Rechts
- Jetzt ist die Frage offen, wo die Suche weitermachen soll.

Hat jemand eine bessere Idee dafür?

Volker
Benutzeravatar
Ypser
XMas-Contest-Gewinner '03
Beiträge: 128
Registriert: 29.08.2004 14:35
Computerausstattung: Win7
Wohnort: Ingelheim
Kontaktdaten:

Beitrag von Ypser »

Ich würds so machen (setzt voraus, dass immer nur ein schwarzes Feld in einer Zeile ist).
Erst suchst du die Grafik ab nach den Pixel-Zeilen, in denen kein Schwarz vorkommt.
So kannst du schonmal grob die einzelnen Textzeilen ermitteln (obere und untere Kanten)
Und dann ermittelst für jeden dieser Blöcke noch, wo die letzte Spalte ist, in der es keine schwarzen Pixel
gibt (Anfang des schwarzen Bereiches), und wo die erste Spalte ist, in der danach wieder keine schwarzen sind (Ende des Bereiches).
Dann hättest du die vier Ecken.

Du brauchst also ne prozedur, die Zeilenweise die Grafik durchgeht und nach (schwarz) unterbrochenen
Zeilen sucht. Dadurch hast du die Grob-Bereiche. Die schreibst in eine Linked List (Anfangs- und Endzeile).
Danach einfach noch eine Prozedur, die dasselbe für einen bestimmten Bereich (von Abfangszeile bis Endzeile)
vertikal nochmal macht, so grenzt du die Breite der einzelnen Blöcke ein.
Das kommt wieder zur den Elementen der LL.
So kriegst du die Koordinaten.
Bild
Benutzeravatar
Kukulkan
Beiträge: 1066
Registriert: 09.09.2004 07:07
Wohnort: Süddeutschland
Kontaktdaten:

Beitrag von Kukulkan »

Hui Ypser,
Ich würds so machen (setzt voraus, dass immer nur ein schwarzes Feld in einer Zeile ist).
Leider ist das nicht so. Die Grafik ist nur ein Ausschnitt. Es können weiter rechts auch mehrere schmalere Streifen sein. Es muss nicht sein, dass alle Streifen oder 'Haufen' auf einer Linie liegen oder gleich Hoch sind.

Volker
Benutzeravatar
Batze
Beiträge: 1492
Registriert: 03.06.2005 21:58
Wohnort: Berlin
Kontaktdaten:

Beitrag von Batze »

Krieg ermal Zusammenhängende schwarze Bereiche raus.
Also bei was ist jeweils auch ein schwarzer Pixel daneben.
Dann Kästelst du jeden zusammenhängenden Bereich ein. :allright:
Hier sind meine Codes (aber die Seite geht gerade nicht):
http://www.basicpure.de.vu
Antworten