Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Rechteck finden in Bild (https://www.delphipraxis.net/98416-rechteck-finden-bild.html)

matashen 27. Aug 2007 08:21


Rechteck finden in Bild
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo zusammen,

ich hab bei einem Bild beschriftete Rechtecke.

Ich soll jetzt in einem Programm Auswerten wo die Rechtecke liegen mit entsprechenden eckpunkten.

Was ich als Startpunkt habe ist der x/y Mittelpunkt des Rechteckes.

Nachdem aber im Rechteck auch eine Beschriftung ist kann ich nicht einfach "suchen bis schwarzer Punkt in +- x/y von Mittelpunkt" da dann meine Routine dann bei der Schrift stoppt.
Was mir das Ganze noch schwerer macht das zum Teil die Rechtecke dicht an dicht liegen.

Ich komm hier absolut nicht weiter wie ich die Rechtecke effizient und sicher erkennen könnte.

Zur veranschaulichung hab ich einen Bildausschnitt angehängt

Bin für jeden Tip dankbar.

Gruß Matthias

kolbaschedder 27. Aug 2007 09:09

Re: Rechteck finden in Bild
 
Hallo,

wenn du für deine Rechtecke eine Minimale Kantenlänge angeben kannst, bsw. 11 Pixel, dann könntest du solange nach oben (unten, links, rechts) gehen, bis du auf ein schwarzes Pixel mit mindestens links und rechts davon 5 schwarzen Pixeln findest.

MfG
Kolbaschedder

matashen 27. Aug 2007 09:31

Re: Rechteck finden in Bild
 
Liste der Anhänge anzeigen (Anzahl: 1)
Leider kann ich keine minimale Kantenlänge angeben, da auch größere Bereiche mit größerer Beschriftung auftauchen können.

Ich kann aber einen maximale Größe von 1/2 Bitmap.width/heigth annehmen was aber leider nur als abbruchbedingung nutzbar ist um bei Fehler/Ausnahmen einen Endloslauf zu verhindern.

Für eine mögliche Ausnahme habe ich ein Bild angehängt.

Wie ich diese dann behandel weis ich noch nicht, aber vorerst reicht mir die erkennung von Rechtecken.
Also rein als Info mit dabei.

Danke aber schon mal für den Lösungsansatz. Leider ists ein bischen komplizierter.

Gruß Matthias

marabu 27. Aug 2007 09:43

Re: Rechteck finden in Bild
 
Hallo,

wenn die Kanten der Rechtecke so schön exakt waagerecht und senkrecht verlaufen wie in deinem Bild, dann würde ich so vorgehen:

Per ScanLine():

(1) Alle senkrechten und waagerechten Kanten als Punktepaare in dynamischen Arrays VertEdges[] und HorzEdges[] feststellen.

(2) Alle Rechtecke über gleiche Eckpunkte der Kanten identifizieren.

Zusatzaufwand entsteht, wenn die Kantendicke variabel ist.

Grüße vom marabu

Nachtrag: Nimm statt der dynamischen Arrays besser eine TList, die ist effektiver beim Redimensionieren.

matashen 27. Aug 2007 10:00

Re: Rechteck finden in Bild
 
Danke Marabu, der Gedanke ist Klasse :thumb: aber :!:

Zitat:

Per ScanLine():

(1) Alle senkrechten und waagerechten Kanten als Punktepaare in dynmischen Arrays VertEdges[] und HorzEdges[] feststellen.
Da hab ich nix Ahnung wie ich das machen soll :gruebel: , da ich bisher den Umgang mit Scanline gescheut habe :oops: (Variable Farbtiefe der zu bearbeiteten Bitmaps) und ich keinen Peil hab wie ich das dann in den Arrays anlegen soll :gruebel:

Zitat:

(2) Alle Rechtecke über gleiche Eckpunkte der Kanten identifizieren.
Da seh ich kein Problem das bekomm ich hin :???:

Zitat:

Zusatzaufwand entsteht, wenn die Kantendicke variabel ist.
Müßte ich da nicht einfach gucken welche Linien also Punktpaare gleich sind.

Was ich am ende haben möchte(muss) ist eine Liste die ungefähr so aussieht

[ RECHTECK ]
Bezeichner: X-Offs. Y-Offs. obenlinks untenrechts
C803 723 428 ??? ???

Die mit ??? angegebenen Werte muss ich eben ermitteln.

Gruß Matthias

mschaefer 27. Aug 2007 10:07

Re: Rechteck finden in Bild
 
Moin, moin,

Du jagst also Bauelementbeschriftungen. Zerlegen wir das mal in Teilaufgaben:

1. Positionieren im umrahmten Bereich
2. finden der maximalen Top, Bottom, Left und Rigth Positionen
3. Erkennen der Ecken (falls Ecken da)


Sind wir also bei 2. Hier gibt es natürlich viele Varianten. Allgemein ist das jetzt eine Pfadsuche zu einem Extema wo Deine Schildkröte (noch ohne Namen) nur auf weissen Punkten laufen kann.

Das hier könnte weiterhelfen
A* Pfadfindung


Grüße // Martin

matashen 27. Aug 2007 10:14

Re: Rechteck finden in Bild
 
Tach auch mschaefer,

schön das du erkennst das es sich um Bauteile handelt, aber ich jage nicht die Beschriftungen, und ich weis auchnicht was mir der A_Stern bringen sollte. ich suche ja Rechtecke und keinen kürzesten Weg.

Die Beschriftungen sind mir auch egal, da ich ja bereits als Daten den Bezeichner und x,y Offset habe, aber wie ich an die Eckpunkte des rechtecks kommen soll ist mir schleierhaft.

Gruß Matthias



PS: Das zerlegen in Teilaufgabe kannst knicken
1. Ich nicht positionieren muß da ich den xy-Offset weis, das heit ich spring von Teil1 zu Teil2
2.nicht der max sonder DER :!: Positionen des Rechtecks interessieren mich
3.Bei einem Rechteck sollten Rechtecke sein, andernfalls würd ich ja nach Rechtrunden oder sowas fragen :mrgreen:

marabu 27. Aug 2007 10:54

Re: Rechteck finden in Bild
 
Hallo Matthias,

wenn du die Rechtecke nach der von mir vorgestellten Methode identifiziert hast, dann kannst du deine Mittelpunkt-Koordinaten mit PtInRect() gegen die Liste der Rechtecke prüfen und so deine Komponentenliste aufbauen.

Freundliche Grüße

matashen 27. Aug 2007 11:09

Re: Rechteck finden in Bild
 
Ist PtInRect ein Win-API

benutze Delphi, da ist mir der Befehl unbekannt ?

Gruß Matthias

Muetze1 27. Aug 2007 11:12

Re: Rechteck finden in Bild
 
Ja, eine Funktion der WinAPI. Einfach die Unit Windows einbinden und er ist bekannt.


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:42 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz