AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi Bilder schnell miteinander vergleichen

Bilder schnell miteinander vergleichen

Offene Frage von "FriFra"
Ein Thema von Flips · begonnen am 12. Nov 2006 · letzter Beitrag vom 17. Aug 2009
Antwort Antwort
Seite 5 von 5   « Erste     345
Benutzerbild von himitsu
himitsu

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

Re: Bilder schnell miteinander vergleichen

  Alt 23. Jul 2009, 09:56
Zitat von stiftmaster:
 SetLength(changes, Length(changes) + 1);
diese Zeile ist aber nicht so optimal, da bei vielen Unterschieden das Array sehr oft in seiner Größe geändert wird.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Phantom1

Registriert seit: 20. Jun 2003
282 Beiträge
 
Delphi 10.4 Sydney
 
#42

Re: Bilder schnell miteinander vergleichen

  Alt 23. Jul 2009, 10:10
Genau, "SetLength" kann man viel optimieren und auch den aufruf

changes[Length(changes) - 1].Color := Bitmap2.Canvas.Pixels[x, y]; kann man wie folgt optimieren:

changes[Length(changes) - 1].Color := RGB(P2^.rgbtRed, P2^.rgbtGreen, P2^.rgbtBlue);
  Mit Zitat antworten Zitat
Benutzerbild von Deviloper
Deviloper

Registriert seit: 7. Feb 2009
2 Beiträge
 
#43

Re: Bilder schnell miteinander vergleichen

  Alt 17. Aug 2009, 06:01
Hallo miteinander,

Dieser Thread ist beachtlich alt, aber wie ich sehe bin ich nicht der einzigste mit Fragen die auch bei ausgiebiger Recherche nicht leicht zu beantworten sind.

Gleich ist eben doch nicht gleich oder dasselbe

Also es ist klar wenn ich wissen möchte ob Dateien von der Struktur und gesamten Inhalt her gleich sind, dann verwende ich Hashes (Checksummen) um ihre eindueitge Übereinstimmung festzustellen.

Folgendes Szenario :

In xyz existiert eine Datenbank mit Bildern (evtl mehrere pro Person) vermeidlicher Verbrecher

Angenommen in der Datenbank liegt eine Portraitaufnahme des 'Gangsters' als JPG Datei vor und
ich bekam per Email dasselbe Bild, jedoch als BMP Datei. Dateistruktur Unterschiede sind demnach
klar, prüfsummencheck somit sinnlos. Heißt Also pixelweise Bild abgleichen ?

Lassen sich beide Bilder wie Klarsichtfolien übereinander legen so das Unterschiede direkt ersichtlich wären ?

Existieren Komponenten/Schnipsel die Bildähnlichkeiten feststellen können, unabhängig vom Dateiformat, Bittiefe,etc. ?

Ist es möglich festzustellen ob EXIF Informationen geändert wurden oder original sind?

Ich stelle diese Fragen da ich an einem wichtigen Projekt arbeite (Freeware) was in naher
Zukunft hoffentlich ne Menge Leute ihr Geld in den Taschen behalten lässt

Fragen hierzu bitte privat,wäre seeehr dankbar für weiterführnede Informationen oder gegebenenfalls einem Schnippsel, der 1 vom user ausgewähltes Bild mit einer Bilddatenbank abgleicht und Ähnlichkeitswahrscheinlichkeiten in % ausgibt (sofern Ähnlichkeiten vorhanden).

Hoffe das ersichtlich ist, worum es im Groben geht, sonst wie gesagt ==> PN

Danke -Deviloper-
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

Re: Bilder schnell miteinander vergleichen

  Alt 17. Aug 2009, 08:04
Zitat von Deviloper:
Also es ist klar wenn ich wissen möchte ob Dateien von der Struktur und gesamten Inhalt her gleich sind, dann verwende ich Hashes (Checksummen) um ihre eindueitge Übereinstimmung festzustellen.
Hashs sind nicht eindeutig!
Man kann damit nur prüfen, ob es vermutlich eindeutig ist, da ja nach Hashgröße dennoch mehrere Dateien die selben Hashs haben.
z.B. CRC32 und 6 Byte große Dateien, da haben dennoch durchschnittlich je 65.000 Dateien den selben Hash, auch wenn es in freier Wildbahn nicht so drastisch dein wird, da es dort nicht jede Bytekombination geben wird.

Zitat von Deviloper:
Heißt Also pixelweise Bild abgleichen ?
Pixelweise und dann auch nur auf Ähnlichkeit, da JPEG je formatbebingte Verluste hat und sich somit schon, Aufgrund der Komprimierung, Unterschiede eingeschlichen haben.

Zitat von Deviloper:
Lassen sich beide Bilder wie Klarsichtfolien übereinander legen so das Unterschiede direkt ersichtlich wären ?
Ja, einfach die Differenz aller Pixel in ein neues Bild übertragen.
Also praktisch je Pixel und Farbkanal (RGB):
BildDiff.Pixel[x,y].Kanal[z] := Abs(Bild1.Pixel[x,y].Kanal[z] - Bild2.Pixel[x,y].Kanal[z]);
Zitat von Deviloper:
Existieren Komponenten/Schnipsel die Bildähnlichkeiten feststellen können, unabhängig vom Dateiformat, Bittiefe,etc. ?
bestimmt.
aber du kannst ja erstmal alles sozusagen in ein Bitmap, mit gleichen Ausmaßen übertragen
- vergiß nicht, das vorallem bei den Fotos auch mal die Auslösung, das Format und die Komprimierungsstärke unterschiedlich sein können.
- ok, es kann sich auch der Bildausschnitt, Blickwinkel, Belichtung (Helligkeit, Kontrast usw.) unterscheiden und schlimm wird es, wenn sich die selbe Person in unterschiedlichen Umgebungen befindet

Zitat von Deviloper:
Ist es möglich festzustellen ob EXIF Informationen geändert wurden oder original sind?
ich glaub nicht und selbst wenn, dann kann man dieses fälschen


ja, dann erstmal willkommen
und wie du letztenlich am Besten vergleichen könntest, das entscheidet sich erstmal grundsätzlich darin, welche Unterschiede zu erwarten wären.

- Also wenn sich nur Bildformat bzw. Komprimierungsstärke unterscheiden, dann sollte es reichen, wenn du die Pixel vergleichst und die Abweichungen berechnest.
- bei Unterschieden in der Auflösung, solltest du vorher diese angleichen
- bei Unterschieden in den Farben (Helligkeit, Kontrast, Weißabgleich usw.) müßte man vorher die Bilder analysieren und auch diese Werte angleichen
- bei anderem Bildausschnitt, wo man also auf den Bildern unterschieliche Aus-/Abschnitte sieht, wird es schwer, da du dann ja erstmal irgendwie ähnliche Bildausschnitte finden müßtest
- usw.

Das Problem ist also erstmal zu entscheiden welche Informationen uninteressant sind und diese rauszufiltern, bzw. zu ignorieren und dann nur den Rest zu vergleichen.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von Deviloper
Deviloper

Registriert seit: 7. Feb 2009
2 Beiträge
 
#45

Re: Bilder schnell miteinander vergleichen

  Alt 17. Aug 2009, 14:20
Ich danke Dir für die recht fixe Antwort,

werde dir eine private Nachricht dalassen damit Du etwas mehr über den Hintergrund weißt
und hoffe dann kannst Du mein Vorhaben noch besser verstehen.Normaler Datei Vergleich, differenzen erkennen usw ist alles kein Problem für mich, das Problem ist sozusagen der 'optische Vergleich'.

Die Routine sollte die Bilddatei (egal welches Format) intern umwandeln/kopieren zum abgleichen. Das Bild abtasten und erkennen können ob Bildausschnitte identisch mit dem Original sind (Welches in der Datenbank gespeichert ist)

Ps, gilt vielleicht noch zu wissen, arbeite derzeit mit Delphi 6 Enterprise


-Deviloper-
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 15:59 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