Java Bildanalyse - vertikale Linien zählen

9

Ich brauche ein bisschen Hilfe zu einem Bildanalysealgorithmus in Java. Ich habe im Grunde Bilder wie folgt:

Also, wie Sie vielleicht erraten haben, muss ich die Zeilen zählen.

Welchen Ansatz halten Sie für den besten?

Danke, Smaug

    
Smaug 14.10.2010, 11:28
quelle

4 Antworten

2

Ein einfacher Segmentierungsalgorithmus kann Ihnen helfen. Heres, wie der Algorithmus funktioniert:

  • scannt Pixel von links nach rechts und notieren Sie die Position des ersten schwarz (egal welche Farbe du hast) Linie ist) Pixel.
  • mach diesen Prozess weiter es sei denn, Sie finden einen ganzen Scan Du findest das schwarze Pixel nicht. Notieren Sie diese Position ebenfalls.
  • Wir sind nur an den Y-Positionen interessiert Hier. Jetzt verwenden Sie diese Y-Position segmentieren Sie das Bild horizontal.
  • Jetzt wir werden den gleichen Prozess machen aber diesmal werden wir scannen von oben nach unten (eine Spalte bei a Zeit) in dem Segment, das wir gerade erstellt haben.
  • Dieses Mal sind wir an X interessiert Positionen.
  • Am Ende bekommen wir jeden Zeilen Extents oder Sie können ein sagen Bounding Box für jede Zeile.
  • Der Gesamtanzahl dieser Begrenzungsrahmen ist die Anzahl der Zeilen.

Sie können viele Optimierungen im Algorithmus nach Ihren Bedürfnissen durchführen.

    
Faisal Feroz 14.10.2010 12:14
quelle
1

Ich habe eine einfache Lösung implementiert (muss verbessert werden) mit Marvin Framework , die die vertikalen Linien Anfang und Ende Punkte findet und druckt Gesamtzahl der gefundenen Zeilen.

Ansatz:

  1. Binarisieren Sie das Bild mit einem bestimmten Schwellenwert.
  2. Versuchen Sie für jedes Pixel, wenn es schwarz (einfarbig) ist, eine vertikale Linie
  3. zu finden
  4. Speichern Sie die x, y der Start- und Endpunkte
  5. Die Linie hat eine Mindestlänge? Es ist eine akzeptable Linie!
  6. Drucken Sie den Startpunkt rot und den Endpunkt grün.

Das Ausgabebild wird unten angezeigt:

Die Programme geben aus:

%Vor%

Schließlich der Quellcode:

%Vor%     
quelle
1
%Vor%

Quelle: Ссылка

    
Symaptax 14.10.2010 12:12
quelle
0

Es hängt davon ab, wie sie so aussehen.

  1. Bringe das Bild auf 1-Bit (schwarz und weiß), so dass die Linien erhalten bleiben und der Hintergrund reinweiß wird
  2. Vielleicht machen Sie eine einfache Säuberung wie die Fleckentfernung (entfernen Sie kleine schwarze Komponenten).

Dann,

  1. Finde ein schwarzes Pixel
  2. Verwenden Sie Flood-Fill-Algorithmen, um den Umfang zu finden
  3. Sehen Sie, ob die Form die Kriterien für eine Linie erfüllt (lineCount ++ falls ja)
  4. entferne es
  5. Wiederholen Sie dies, bis keine schwarzen Pixel mehr vorhanden sind

Viel hängt davon ab, wie gut du # 3, einige Ideen

tust
  1. Verwenden Sie Hough nur in diesem Abschnitt, um zu überprüfen, ob Sie eine Linie haben und dass sie vertikal ist (ish)
  2. (nach # 1) drehen Sie es zur Vertikalen und überprüfen Sie sein Verhältnis Breite / Höhe
Lou Franco 14.10.2010 12:25
quelle

Tags und Links