AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Zwei übereinander liegende Bilddateien trennen !!!
Thema durchsuchen
Ansicht
Themen-Optionen

Zwei übereinander liegende Bilddateien trennen !!!

Offene Frage von "hanvas"
Ein Thema von 33Olli33 · begonnen am 26. Feb 2016 · letzter Beitrag vom 27. Feb 2016
Antwort Antwort
Seite 3 von 3     123   
Benutzerbild von Harry Stahl
Harry Stahl

Registriert seit: 2. Apr 2004
Ort: Bonn
2.538 Beiträge
 
Delphi 11 Alexandria
 
#21

AW: Zwei übereinander liegende Bilddateien trennen !!!

  Alt 26. Feb 2016, 21:02
App nennt sich einfach QR von tapmedia
  Mit Zitat antworten Zitat
33Olli33

Registriert seit: 26. Feb 2016
12 Beiträge
 
#22

AW: Zwei übereinander liegende Bilddateien trennen !!!

  Alt 26. Feb 2016, 21:11
Oder kannst Du mir einen Bildschirmdruck von der ausgelesenen Datei hier reinstellen bitte?
Das würde mir wirklich weiterhelfen.
  Mit Zitat antworten Zitat
33Olli33

Registriert seit: 26. Feb 2016
12 Beiträge
 
#23

AW: Zwei übereinander liegende Bilddateien trennen !!!

  Alt 26. Feb 2016, 21:55
Hatte jetzt nochmal beide Fotos in eine RAR-Datei gepackt.
Angehängte Dateien
Dateityp: rar Schlawynski sucht die Brilliant Twins GC409RV.rar (1,47 MB, 24x aufgerufen)
  Mit Zitat antworten Zitat
Benutzerbild von Harry Stahl
Harry Stahl

Registriert seit: 2. Apr 2004
Ort: Bonn
2.538 Beiträge
 
Delphi 11 Alexandria
 
#24

AW: Zwei übereinander liegende Bilddateien trennen !!!

  Alt 26. Feb 2016, 22:32
Oder kannst Du mir einen Bildschirmdruck von der ausgelesenen Datei hier reinstellen bitte?
Das würde mir wirklich weiterhelfen.
Klar, anliegend die Ergebnis-Datei (in Zip gepackt, damit nicht so groß).
Angehängte Dateien
Dateityp: zip Result.zip (10,3 KB, 28x aufgerufen)
  Mit Zitat antworten Zitat
hanvas

Registriert seit: 28. Okt 2010
168 Beiträge
 
Delphi 11 Alexandria
 
#25

AW: Zwei übereinander liegende Bilddateien trennen !!!

  Alt 26. Feb 2016, 22:36
Hallo alle zusammen,
Gleich mal meine erste Frage. Ich habe eine .jpg-datei, die aus zwei übereinander liegenden Bildern besteht.
Das erste Bild zeigt eine Landung von Eroberern in ein fremdes Land. Auf das Bild, oder darunter liegt ein nur zum Teil sichtbarer QR-Code, den es
zu entschlüsseln gilt.
Olli
Nachtrag : Da Harry Stahl schon eine Prozedur zum Vergleich geliefert hat (während ich den Artikel schrieb) gilt das nachfolgende natürlich nur noch für die Anpassung der beiden Bilder aneinander.

Den Hinweis das Du das Originalbild vom Bild mit QR-Code abziehen kannst haben dir ja schon mehrere gegeben. Prinzipiell ist das schon mal der richtige Ansatz.

Mit den unterschiedlichen Größen von Referenzbild und Abbildung kannst Du auf verschiedene Arten umgehen, um nicht mit der Bazooka loszumarschieren [1] kannst Du Dir eine einfache Form von Bildregistrierung selbst basteln :

Wenn die Bilder sich nur in der Größe unterscheiden dann kannst Du eines der Bilder natürlich einfach skalieren. Da die Seitenverhältnisse bei beiden Bildern gleich sein müssten dürfte eine Skalierung eine relativ gute Abbildung ergeben.

Alternativ dazu kannst Du natürlich auch ohne Skalierung auskommen und einfach die Koordinaten umrechnen um für jeden Punkt (X,Y) im Bild 1 einen Punkt(X,Y) im Bild 2 zu bekommen.

Ist das Bild darüber hinaus verzerrt dann musst Du Dir drei oder vier Stützpunkte suchen die in beiden Bildern an der gleichen Position vorkommen. Diese Stützpunkte kannst Du mittels Template-Matching in beiden Bildern suchen (dazu kannst Du beispielsweise OpenCV verwenden) und wendest anschließend eine bilineare Interpolation auf das zu transformierende Bild an. (https://en.wikipedia.org/wiki/Bilinear_interpolation)

1. Anschließend gehst Du den bereits vorgeschlagenen Weg und erstellst Die eine SW - Maske die die gleichen Ausmaße wie Deine Bilder hat. An der Stelle an der der sich das Abbild vom Original unterscheidet setzt Du einen schwaren Punkt. Die weißen Quadrate des QR-Codes kannst Du auf diese Art zunächst nicht finden, denn Dein Bild sieht so aus als ob Weiß den Farbwert der Abbildung nicht beeinflusst, aber das dürfte keine Rolle spielen.

Wenn Du Glück hast, dann war es das. Du müstest Dir nur noch die Bounding-Box Deiner Maske suchen (als das minimale Quadrat das alle schwarzen Pixel einschließt) um diesen Bereich zu kopieren und du hättest Deinen QR-Code gefunden.

Die meisten der hier genannten und notwendigen Verfahren, einschließlich bilinearer Interpolation und logischen oder arithmetischen Operationen auf Bildern (Bilder mit OR,UND,SUB usw. bearbeiten) sind übrigens in Leptonica (www.leptonica.org/) implementiert.

Ich habe mir erlaubt eine selbst compilierte DLL und eine unvollständig getestete Headerübersetzung anzuhängen. Möglicherweise kannst Du ja was damit anfangen. Wenn etwas nicht funktioniert ist anstelle eines var XXX eine pXXX als Parameter verlangt (oder umgekehrt).

Leptonica steht unter der BSD Lizenz.

In Anbetracht des Umfangs bitte ich zu verzeihen das ich nur die Funktionen getestet habe die ich selbst verwende.

[1] http://www.itk.org/
Numerical Methods for Image Registration, ISBN 978-0-19-852841-8
2-D and 3-D Image Registration, ISBN 978-0-471-64952-0
Angehängte Dateien
Dateityp: 7z leptsave.7z (1,15 MB, 20x aufgerufen)

Geändert von hanvas (26. Feb 2016 um 22:39 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.475 Beiträge
 
Delphi 12 Athens
 
#26

AW: Zwei übereinander liegende Bilddateien trennen !!!

  Alt 26. Feb 2016, 22:37
Geht auch mit geringfügig weniger Zeilen:
Delphi-Quellcode:
function GetNewPicFromDifferences (OrgPic, NewPic, BDif: TBitmap): Boolean;
begin
  BDif.Assign(OrgPic);
  result := BitBlt(BDif.Canvas.Handle, 0, 0, BDif.Width, BDif.Height, NewPic.Canvas.Handle, 0, 0, SRCINVERT);
  if result then begin
    BDif.Mask(clBlack);
  end;
end;
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von Harry Stahl
Harry Stahl

Registriert seit: 2. Apr 2004
Ort: Bonn
2.538 Beiträge
 
Delphi 11 Alexandria
 
#27

AW: Zwei übereinander liegende Bilddateien trennen !!!

  Alt 26. Feb 2016, 23:12
Hatte jetzt nochmal beide Fotos in eine RAR-Datei gepackt.
Jetzt sind die Bilder zwar gleich groß und das Bild ist von der Positionierung der Pixel auch gleich, allerdings weichen die Werte für die einzelnen Pixel auch da voneinander ab, wo kein QR-Code hinterlegt ist. Das kann z.B. durch eine JPG-Komprimierung entstanden sein.

Zum Beispiel hat das erste Pixel einmal 224,225,193 und im anderen Bild 231,231,180.

Selbst wenn man jetzt eine Toleranz-Option einbaut

Delphi-Quellcode:
  w1 := (Byte (LineOrg[x][0]) + Byte (LineOrg[x][1]) + Byte (LineOrg[x][2])) Div 3;
  w2 := (Byte (LineNew[x][0]) + Byte (LineNew[x][1]) + Byte (LineNew[x][2])) Div 3;
  dif := Abs (w2-w1);

  if (dif > Tolerance) then begin
kommt man leider nur zu unbefriedigenden Ergebnissen, siehe Screenshot (hier mit Wert "5").
Miniaturansicht angehängter Grafiken
result2.jpg  
  Mit Zitat antworten Zitat
Benutzerbild von Harry Stahl
Harry Stahl

Registriert seit: 2. Apr 2004
Ort: Bonn
2.538 Beiträge
 
Delphi 11 Alexandria
 
#28

AW: Zwei übereinander liegende Bilddateien trennen !!!

  Alt 26. Feb 2016, 23:16
Geht auch mit geringfügig weniger Zeilen:
Delphi-Quellcode:
function GetNewPicFromDifferences (OrgPic, NewPic, BDif: TBitmap): Boolean;
begin
  BDif.Assign(OrgPic);
  result := BitBlt(BDif.Canvas.Handle, 0, 0, BDif.Width, BDif.Height, NewPic.Canvas.Handle, 0, 0, SRCINVERT);
  if result then begin
    BDif.Mask(clBlack);
  end;
end;
Cool!
  Mit Zitat antworten Zitat
33Olli33

Registriert seit: 26. Feb 2016
12 Beiträge
 
#29

AW: Zwei übereinander liegende Bilddateien trennen !!!

  Alt 26. Feb 2016, 23:20
Leute, Ihr habt schon viel zu viel für mich getan. Ich werde den QR mal meinem Rätselsteller mitteilen und schauen, was der sagt.
Ich bin morgen wieder hier und gebe gerade Meldung, ob das gepasst hat.
Vielen Dank an Euch

Gruß Oliver
  Mit Zitat antworten Zitat
hanvas

Registriert seit: 28. Okt 2010
168 Beiträge
 
Delphi 11 Alexandria
 
#30

AW: Zwei übereinander liegende Bilddateien trennen !!!

  Alt 27. Feb 2016, 00:27
Hatte jetzt nochmal beide Fotos in eine RAR-Datei gepackt.
Jetzt sind die Bilder zwar gleich groß und das Bild ist von der Positionierung der Pixel auch gleich, allerdings weichen die Werte für die einzelnen Pixel auch da voneinander ab, wo kein QR-Code hinterlegt ist. Das kann z.B. durch eine JPG-Komprimierung entstanden sein.
Wenn man das Referenzbild um einen einige Pixel breiten Rahmen erweitert und anschließend beide Bilder in ein klein wenig verwackelt bzw. die Werte der Pixel über die Nachbarpixel interpoliert (https://processing.org/examples/blur.html), dann in Graustufen konvertiert und ein Template-Matching durchführt - also die Abbildung pixelweise über das Referenzbild verschiebt und so die Koordinaten für die maximale Übereinstimmung ermittelt, anschließend wieder das eine Bild vom anderen abzieht (mit der von Dir angegebenen Toleranz arbeitet), das Ergebnis in ein Schwarzweissbild verwandelt, und anschließend die nicht verbundenen Komponenten unterhalb einer bestimmten Schwelle (z.b. 120 Pixel) also als Pixelverbunde die weniger als 120 zusammenhängende Pixel aufweisen entfernt, eine Segmentierung durchführt in der das verbleibende Quadrat "außgestanzt" wird (YX-CUT), dann kommt man zu den folgenden Ergebnis.

Das ist eigentlich schon recht gut. Da dieser Code durch Quadrate gebildet wird, könnte man versuchen die Länge/Breite eines der Quadrate zu ermitteln, das Bild in entsprechende Quadrate/Zellen unterteilen, für jede Zelle prüfen ob mehr als 50 % Pixel gesetzt sind. Ist das der Fall dann wird das Quadrat ausgefüllt, ist das nicht der Fall dann wird das Quadrat nicht ausgefüllt.

Das dürfte dann noch nicht perfekt sein aber doch schon sehr gut.

cu Ha-Jö
Angehängte Grafiken
Dateityp: jpg cleaned.jpg (34,6 KB, 31x aufgerufen)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 3 von 3     123   


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 18:25 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