Delphi-PRAXiS
Seite 5 von 5   « Erste     345   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Bilder schnell miteinander vergleichen (https://www.delphipraxis.net/80639-bilder-schnell-miteinander-vergleichen.html)

himitsu 23. Jul 2009 08:56

Re: Bilder schnell miteinander vergleichen
 
Zitat:

Zitat von stiftmaster
Delphi-Quellcode:
 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.

Phantom1 23. Jul 2009 09:10

Re: Bilder schnell miteinander vergleichen
 
Genau, "SetLength" kann man viel optimieren und auch den aufruf

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

Delphi-Quellcode:
changes[Length(changes) - 1].Color := RGB(P2^.rgbtRed, P2^.rgbtGreen, P2^.rgbtBlue);

Deviloper 17. Aug 2009 05:01

Re: Bilder schnell miteinander vergleichen
 
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. :wink:

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 :wink:

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-

himitsu 17. Aug 2009 07:04

Re: Bilder schnell miteinander vergleichen
 
Zitat:

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:

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:

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):
Delphi-Quellcode:
BildDiff.Pixel[x,y].Kanal[z] := Abs(Bild1.Pixel[x,y].Kanal[z] - Bild2.Pixel[x,y].Kanal[z]);
Zitat:

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:

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.

Deviloper 17. Aug 2009 13:20

Re: Bilder schnell miteinander vergleichen
 
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


:zwinker: -Deviloper-


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:30 Uhr.
Seite 5 von 5   « Erste     345   

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