AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Algorithmen, Datenstrukturen und Klassendesign Bildregistrierung: Bild ausrichten an zwei! Markierungen
Thema durchsuchen
Ansicht
Themen-Optionen

Bildregistrierung: Bild ausrichten an zwei! Markierungen

Ein Thema von hanvas · begonnen am 9. Jun 2015 · letzter Beitrag vom 9. Jun 2015
Antwort Antwort
hanvas

Registriert seit: 28. Okt 2010
157 Beiträge
 
Delphi 11 Alexandria
 
#1

Bildregistrierung: Bild ausrichten an zwei! Markierungen

  Alt 9. Jun 2015, 16:56
Hallo,

ich möchte gescannte (Schwarzweiss o. Graustufen) Bilder an Registriermarken ausrichten und mit einer Vorlage in Übereinstimmung bringen. Meine genaue Vorgehensweise zum Ermitteln der Marken ist unten beschrieben*. Zum Zeitpunkt des nachfolgend beschriebenen Problems sind die Bilder bereits gerade und richtig skaliert oder sollten dies zumindest sein.

Dabei habe ich drei Fälle zu unterscheiden, das Ausrichten an einer Marke, das Ausrichten an zwei Marken und das Ausrichten an drei und mehr Marken.

Eine Marke und 3 oder mehr Marken stellen kein Problem dar. Bei einer Marke handelt es sich um eine reine Translatation, bei 3 und mehr Bezugspunkten kann es sich um eine Translation oder um eine affine bzw. perspektische Abbildung handeln für die ich eine entsprechende Abbildung erstellen kann, aber der Fall mit lediglich zwei Bezugspunkten stellt mich dann vor ernste Problem wenn es sich nicht um eine einfache Translatation handelt, da ich einfach zu wenig Bezugspunkte habe um eine vernünftige Abbildung zu erstellen und nicht weiß wie ich damit umgehen soll.

Hat dazu jemand eine Idee ?


cu Ha-Jö

* Wie die Marken ermittelt werden :

Aus der Vorlage werden eine, zwei oder mehrere Marken extrahiert. Sofern zu erwarten ist das das zu bearbeitende Bild in der Skalierung von der Vorlage abweicht (was beispielsweise bei empfangenen Faxen der Fall sein kann), kann eine bzw. die zuerst untersuchte Marke aus einem Kreis bestehen (Kreis ist rotationsinvariant). Das Programm baut in diesem Fall eine Lookup-Tabelle bestehend aus unterschiedlich skalierten (Kreis) Marken auf und sucht anschließend im zu bearbeitenden Bild nach der besten Entsprechung mit dem Marken in der Lookup-Tabelle. (Hough Transformation und/oder Template Matching). Wird eine Übereinstimmung gefunden so kann (entsprechend der Auflösung der Lookup-Tabelle) die Skalierung bestimmt werden. Gleichzeitig ist der erste (oder eine Reihe von) Bezugspunkt gefunden.

Ist zu erwarten das das Bild gedreht ist, und lässt sich ein anderes Verfahren zum Geraderichten nicht zuverlässig anwenden, so kann mit Hilfe einer rechteckigen Marke die rotation bestimmt werden. Im Grunde ist das Verfahren analog zum zuvor genannten nur das anstelle der Tabelle mit skalieren Bildern eine Tabelle mit rotierten Marken verwendet wird. Wurde auf diese Art eine Marke gefunden, so ist die Rotation des Bildes bekannt und kann ausgeglichen werden, außerdem ist dadurch ein weiterer Bezugspunkt gegeben. Diese Marken sind dem einen oder anderen sicher bekannt - auf vorgedruckten Formularen findet sich oft ein "Passer f. EDV" oder so ähnlich.

Natürlich können analog auch Marken gesucht und gefunden werden ohne Rotation und Skalierung zu ermitteln.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.142 Beiträge
 
Delphi 12 Athens
 
#2

AW: Bildregistrierung: Bild ausrichten an zwei! Markierungen

  Alt 9. Jun 2015, 17:32
Du hast zwei Punkte, kennst somit die Entfernung und Ausrichtung.
Wenn du jetzt noch ein Seitenverhältnis kennst und in welche Richtung (Seite) es geht, dann kannst du dir doch weitere Punkte berechnen?

z.B. für ein schönes Rechteck
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
hanvas

Registriert seit: 28. Okt 2010
157 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: Bildregistrierung: Bild ausrichten an zwei! Markierungen

  Alt 9. Jun 2015, 18:15
Du hast zwei Punkte, kennst somit die Entfernung und Ausrichtung.
Wenn du jetzt noch ein Seitenverhältnis kennst und in welche Richtung (Seite) es geht, dann kannst du dir doch weitere Punkte berechnen?
Ganz so einfach ist es leider nicht.

Ich habe ja vorrausgeschickt das Skalierung und Rotation bekannt sind. Eigentlich müsste man das (in Rotation und Skalierung korrgierte) Bild nur über die Vorlage schieben. Die Beträge um die ich verschieben muss (x und y) sollten sich über einen Vergleich zwischen Vorlage und auszurichtenden Bild bzw. den jeweils korrospondierenden Punkten ermitteln lassen.

Eigentlich müsste X und Y für Punkt 1 und Punkt 1' das Gleiche ergeben wie für Punkt 2 und Punkt 2'. Wenn das so ist, dann ist alles gut und ich brauche keinen weiteren Punkt, wenn das aber nicht so ist, dann muss zwingend eine Verzerrung des gescannten Bildes vorliegen (beispielsweise wenn ein Lieferschein vom Fahrer als Brotzeitpapier missbraucht wurde), da die Skalierung ja bereits korrigiert wurde. Wenn ich einfach irgendeinen Punkt nehme, nur weil er auf einer gedachten Figur liegt, kann ich nicht sicherstellen das der Punkt in beiden Bildern! das Gleiche beschreibt, da ich die Verzerrung nicht kenne.

Je mehr Bezugspunkte (in beiden Bildern ich habe) umso besser kann man das Ausgleichen, aber mit zwei Punkten bin ich aufgeschmissen. Mir ist klar das ich keine mathematisch saubere Lösung für dieses Problem hinbekomme, aber ich habe die naive Annahme das möglicherweise dem Einen oder anderen irgendein Trick einfällt.

Mir selbst fallen nur 4 Lösungen ein :

1. Abbildungen mit nur 2 Punkten verbieten
2. Auf der gedachten Achse zwischen den Punkten zu interpolieren und hoffen das das die Achse der Verzerrung ist
3. Den Mittelwert den Translationsbeträgen für die Verschiebung verwenden und so ein in beide Richtungen nicht ganz korrektes Ergebnis zu erzielen.

cu Ha-Jö
  Mit Zitat antworten Zitat
hanvas

Registriert seit: 28. Okt 2010
157 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: Bildregistrierung: Bild ausrichten an zwei! Markierungen

  Alt 9. Jun 2015, 18:30
Du hast zwei Punkte, kennst somit die Entfernung und Ausrichtung.
Wenn du jetzt noch ein Seitenverhältnis kennst und in welche Richtung (Seite) es geht, dann kannst du dir doch weitere Punkte berechnen?
Aber Du hast mich dennoch auf eine Idee gebracht

Ich könnte ja bei meiner Vorlage Bereiche suchen die sich leicht finden lassen (beispielsweise Stellen an denen sich horizontale und vertikale Linien kreuzen, Hough-Transformation) und die einigermaßen markant sind. Diese Bereiche suche ich auch im zu bearbeitenden Bild.

Da sich kreuzende Linien (oder andere automatisch ausgewählte Muster) unter Umständen häufiger vorkommen und deshalb keine eindeute Zuordnung zwischen den gefundenen Marken möglich ist, müsste ich dann versuchen einen Punkt in der Nähe der bekannten Punkte zuzuordnen. Wenn ich dabei verschiedene Parameter wie beispielsweise die Steigung auf einer gedachten Linie, die Entfernung, ober oder unterhalb der gefundenen Punkte usw. heranziehe kann ich die Auswahl relativ einfach treffen.

Es ist schon erstaunlich wie einen manchmal ein kleiner Anstoß nach Stunden des Grübelns weiterbringt.

Danke

cu Ha-Jö
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:03 Uhr.
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