vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
SEPA-Dateien erstellen inkl. IBAN-, BLZ-/Kontonummernprüfung  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

Allgemeine Diskussionen
Linien bzw. Ecken in Bild erkennen 
Autor: Bazi
Datum: 12.11.14 09:23

Hallo,
ich wandle Baupläne von Gebäuden (Werkpläne) mit pdf2image in ein Bild um.
Das lade ich in einen PictureViewer zum anzeigen.
Im weiteren Verlauf meiner Arbeit zeichne ich darüber Linien um Strecken abzumessen.

Nun möchte ich gerne noch eine "Snap"-Funktion dazu bauen. Das stelle ich mir so vor, wenn aktiviert fahre ich mit dem Cursor über das Bild. Die Funktion soll erkennen wenn sich eine Ecke oder Kreuzung von Linien in der nähe befindet und mir die Koordinaten zurückgeben. Dort möchte ich dann einen kleinen Kreis darstellen.
In der Regel sind die Pläne in weiß und die Linien in schwarz, also ein recht guter Kontrast.

Habt Ihr eine Idee wie sowas umzusetzen ist?

Danke für die Hilfe

Gruß Christian

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Linien bzw. Ecken in Bild erkennen 
Autor: Manfred X
Datum: 12.11.14 10:31

Hallo!

Vielleicht so ... (Methode ohne weitere Voraussetzungen)

1. Graustufenschranken festlegen (ab denen ein Pixel dem
Vordergrund bzw. dem Hintergrund zugeordnet wird

2. Eine Routine schreiben, der eine Pixelposition als Mittelpunkt
und ein Radius übergeben wird. Diese Routine durchläuft einen
entsprechenden Kreis in einer Schleife (alle Kreispunkte).

3. Eine Kreuzungs-Identifizierungs-Routine schreiben, die
für eine gegebene Linienstärke prüft, ob ein bestimmter gegebener
Punkt im Zentrum einer Linien Kreuzung liegt (anhand der Pixelzuordnung zu
Vorder- bzw. Hintergrund gemäß 1.) = Absuchen des Umfeldes nach
Kreuzungsmuster - Vorgabe einer linienstärke-abhängigen Referenzmatrix
HHVHH
HHVHH
VVZVV
HHVHH
HHVHH

oder:
HHHHVVHHHH
HHHHVVHHHH
HHHHVVHHHH
HHHHVVHHHH
VVVVZZVVVV
VVVVZZVVVV
HHHHVVHHHH
HHHHVVHHHH
HHHHVVHHHH
HHHHVVHHHH

Die Routine unter 3. wird von 2. für jede Kreisposition gerufen.
Die Routine 2. wird mit wachsendem Radius so lange gerufen bis ein
Kreuzungspunkt gefunden oder der maximale Such-Radius erreicht ist.
Kreismittelpunkt für 2 ist die aktuelle Mausposition.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Linien bzw. Ecken in Bild erkennen 
Autor: Bazi
Datum: 12.11.14 17:10

wie meinst Du das mit der Graustufenschranke?
Mir ist schon klar, dass man irgendwie trennen muss, was ist Linie und was ist Hintergrund.
Da dachte ich das ginge über eine Farbdifferenz. Die Farben kann ich doch als Integer abfragen.
Vermutlich ist aber beim Übergang einer Linie auf den Hintergrund nicht einfach eine scharfe Trennung sondern ein Übergang? Also müsste ich irgendwie auch eine gewisse Toleranz zulassen.

Der Kernpunkt ist soweit ich das jetzt verstehe die Routine 3.
Wie kann ich eine von der Linienstärke abhängige Referenzmatrix erstellen? Die Linienstärke kenne ich nicht. Wie kann ich überhaupt erkennen ob es sich bei den Punkten um eine Linie handelt?

Danke für die Hilfe

Gruß Christian

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Linien bzw. Ecken in Bild erkennen 
Autor: Manfred X
Datum: 12.11.14 17:52

Du mußt das Bild zunächst in Graustufen umwandeln.

Sind die Linien dunkel gezeichnet, legst Du z.b.
den Farbwert < 50 als Vordergrund fest, alles andere
wird als Hintergrund eingestuft.

Wieso weißt Du nicht, wie dick Deine Linien sind?
Es ist doch am geladenen Bild erkennbar, wieviele Pixel minimal
bzw. maximal eine Linie breit sein kann.
Irgendwann wird aus einer Linie eine Fläche!

Linien sollten an der Farbe erkennbar sein.
Wenn andere Symbole im Bild in einer ähnlichen Farbe wie die
Linien gezeichnet sind, wären diese Symbole aus dem Analysebild
zunächst zu entfernen. Du mußt deren Eigenarten untersuchen und
sie dann als Hintergrund auffassen.

Wie Deine Mustermatrizen aufzubauen sind, hängt vom möglichen
Linienverlauf im Bild ab.
Laufen die Linien nur vertikal oder horiziontal? Gibt es nur
rechtwinklige Ecken?

Ohne genaue Kenntnis Deines Materials lassen keine näheren
Angaben zur geeigneten Vorgehensweise machen.
(Die Ermittlung/Abgrenzung von Bild-Elementen wird schnell
kompliziert.)


Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Linien bzw. Ecken in Bild erkennen 
Autor: Bazi
Datum: 12.11.14 20:09

ja, das wird kompliziert, je mehr ich darüber lese um so schlimmer.
Das Bild sind Werkpläne. Da laufen die Linien nicht immer rechtwinklig, und andere Elemente sind auch drin. Z.B. Textstempel, mit Farbe gefüllte Bereiche und Symbole.
Die kann ich auch nicht vorher definieren, da diese je nach Planersteller unterschiedlich sind.
Da wäre dann alles zu ignorieren was nicht ne gerade Linie ergibt.

Mit den Graustufen umwandeln, sollte ich da das ganze Bild in Graustufen umwandeln und ausblenden, oder jeweils den Bereich von sagen wir mal Radius 2cm um den Mauszeiger den ich prüfen möchte?

Die Linienbreite in Pixel ist die nicht auch abhängig vom Zoomfaktor in dem ich das Bild anzeige? Dann müsste man die also auch noch berechnen wenn erforderlich.

In den verschiedenen Beiträgen die ich nun noch gefunden habe ist von Kantenglättung, Sobel-Filter oder Laplace-Filter die Rede. Leider keine Beispiele wie man sowas macht (oder ich habs nicht gefunden).

Meine Überlegung geht nun in die Richtung Bereich in Graustufen wandeln, was dunkel ist in ein Array.
Und dann, wie kann ich dann analysieren ob Linien drin sind? 10 Punkte nebeneinander = Linie, 10 übereinander = Linie, aber was ist mit schräg? Oder bin ich total daneben?


Danke für die Hilfe

Gruß Christian

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Linien bzw. Ecken in Bild erkennen 
Autor: Manfred X
Datum: 12.11.14 20:17

Eine Möglichkeit besteht eventuell darin,
alle (bedeutsamen) Eck- und Schnitt-Punkte von Linien
zunächst mit der Maus anzuclicken und diese zum Bild zu speichern.
Eine Routine zu schreiben, die daraus ein Hilfsbild erstellt,
in das die Verbindungslinien (beliebige Winkel) eingezeichnet werden,
wäre dann keine so große Sache.

Den Zoomfaktor einer Darstellung in die Feststellung der
Position eines Punktes im Basisbild einzubeziehen, ist trivial.

Hier habe ich mal was gebastelt ...
http://www.vbarchiv.net/forum/id10_i71763t71762_umriss-um-unregelmaessige-formen-zeichnen.html

Beitrag wurde zuletzt am 12.11.14 um 20:32:55 editiert.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Linien bzw. Ecken in Bild erkennen 
Autor: Bazi
Datum: 12.11.14 21:32

Den Beitrag von Dir hatte ich beim suchen schon gefunden, konnte allerdings daraus nichts für mich umsezten.
Anscheinend läuft mein Vorhaben auf ein Vectorisieren des Bildes hinaus?

Danke für die Hilfe

Gruß Christian

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Sie sind nicht angemeldet!
Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2024 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel