![]() |
Bilderkennung
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo Zusammen:),
ich versuche mich gerade an der Bilderkennung. Das Ziel ist es, Kreise in einem Bild zu zählen. Dabei muss man noch von anderen Formen unterscheiden, welche im Bild sind (siehe Bsp Bild). Jedoch hakt es bereits wie ich in einem Bild überhaupt mal einen Kreis erkenne. Ich habe leider im Internet keinen anstoß gefunden, welcher mich weiter bringt oder wo ich mich einlesen kann. Schonmal vor ab, vielen Dank für jede Hilfe!:) Edit: Das ist eine Übungsaufgabe aus dem Internet. ![]() |
AW: Bilderkennung
Eigentlich nicht schwer, da kann man von der Zeilenzahl einstellig bleiben.
Code:
FUNKTION Kreiserkennung(VARIABLE Ergebnis: Integer);
GEHE Bild VON oben NACH unten DURCH GEHE Bild VON links NACH rechts DURCH WENN Farbe NICHT weiß DANN WENN Farbe ein Pixel links unten NICHT weiß DANN // ggf. Abfrage für ganz links bzw. oben ERHÖHE Ergebnis; FÜLLE BEREICH an aktueller Position MIT weiß; ![]()
Code:
Irgendwas := 0;
Kreiserkennung(Irgendwas); |
AW: Bilderkennung
@Redeemer: Damit zählst du auch die Rechtecke, obwohl er nur die Kreise haben will.
* Außenkannte des gefundenen Bereichs suchen und schauen welche Form er hat Da fehlt dann noch die ![]() |
AW: Bilderkennung
Ein kurzer vllt etwas naiver Denkanstoß, wie ich an die Sache rangehen würde:
Ich würde alle Pixel von Links oben der Reihe nach durchgehen. Wenn ich farbiges Pixel finde, dann würde ich zunächst die Höhe des Objektes herausfinden, indem ich Pixel nach unten gehe, bis kein farbiges Pixel mehr auftaucht. Dann würde nach folgendem "Konstrukt" suchen: Reihe X: Anzahl der farbigen Pixel in aktueller Reihe Reihe X+1: Anzahl der farbigen Pixel in vorheriger Reihe + Bestimmten Faktor Reihe X+2: Anzahl der farbigen Pixel in vorheriger Reihe + Bestimmten Faktor ... Reihe X+y: Maximale Anzahl farbiger Pixel ... Reihe X+n-2: Anzahl der farbigen Pixel in dritter Reihe Reihe X+n-1: Anzahl der farbigen Pixel in zweiter Reihe Reihe X+n: Anzahl der farbigen Pixel in erster Reihe Da man einen Kreis leicht unterschiedlich zeichen kann, sollte die Auswertung der Pixelbreite etwas flexibel bleiben. Gerade flexibel genug, um einen Kreis von einer Ellipse zu unterschieden :-) Wie gesagt - nur mein erster Gedanke. Vllt bringt dich das auf neue Gedanken. Grüße Headbucket |
AW: Bilderkennung
Zitat:
cu Ha-Joe |
AW: Bilderkennung
Wenn nur Kreis oder Rechteckt, dann "einfach" auf Rechteck prüfen, also wenn überall gleich hoch und/oder breit, dann ist es ein Rechteck.
Oder auf "ich bin kein Kreis" und das Pixel bei (x-1, y+1) ist weiß. (der gefundene Anfangspunkt ist eine Ecke) Oder auf "ich bin eventuell ein Kreis" und das Pixel bei (x-1, y+1) ist nicht weiß. (der gefundene Anfangspunkt ist rechteckig) > Bei
Delphi-Quellcode:
... wenn Schleifen/Suchmuster andersrum, dann bei (x+1, y+1).
for y :=0 to ... do for x := 0 to ...
|
AW: Bilderkennung
Ich hab mich noch nie damit beschäftigt, aber könnte man nicht ein paar benachbarte Pixel auswerten (ala Kreissegment) und den Mittelpunkt zu dem Stück finden?
Je unendlicher es entfernt ist, desto mehr ist es eine Gerade statt eines Kreises. Sind Kreise größer als das Bild (oder unvollständige) überhaupt gefragt? Aber vielleicht ist das schon viel zu aufwändig. |
AW: Bilderkennung
Zitat:
|
AW: Bilderkennung
Wenn es von dem Ablauf her Erlaubt wäre eine "Hintergrund" Farbe zu bestimmen um die Objekte rauszufiltern (oder basierend darauf ein Raster erstellen?) würde das Vorhaben die übriggebliebenen Objekte einer Form zuzuorden weitaus einfacher machen.
Vielleicht könntest Du auch ![]() |
AW: Bilderkennung
Zitat:
Delphi-Quellcode:
Antwort: Zu viele
// Wie viele Kreise sind (laut deinem Algorithmus) in diesem Bild?
# # # # # # # # # # # # # # # # # # # # # |
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:57 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz