Delphi-PRAXiS
Seite 4 von 5   « Erste     234 5      

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)

Phantom1 17. Nov 2006 13:52

Re: Bilder schnell miteinander vergleichen
 
Zitat:

Zitat von Hawkeye219
and bindet stärker als xor, man sollte also hier Klammern setzen:

Delphi-Quellcode:
(PInteger(P1)^ xor PInteger(P2)^) and $00FFFFFF <> 0
Gruß Hawkeye

Oh ja stimmt, ich habe es oben korrigiert.

Relicted 26. Nov 2006 12:55

Re: Bilder schnell miteinander vergleichen
 
mahlzeit!

jemand ne idee wie ich 2 bilder ( grundstruktur gleich, also gleiches bild ) miteinander vergleiche die aber total unterschiedliche farbwerte haben? also das eine bild hat z.b. nen grünstich das andere nen blaustich...
als basis sind es aber die selben bilder...


ich habe schon überlegt ob man vielleicht alle farbinformationen rausnimmt und dann ein S/W bild benutzt ( geht das überhaupt in delphi ? ) und dann vergleicht - es sollten ja die selben werte dann rauskommen oder vertue ich mich da ?

gruß
reli

PS: ich mach denk ich mal nen neuen thread auf zu dem thema :o)
danke luke schonmal für den hinweis

DGL-luke 26. Nov 2006 15:06

Re: Bilder schnell miteinander vergleichen
 
Du kannst es natürlich in Graustufen umrechnen.

Evtl. kannst du auch mit "farbstich-durchschnittswerten" rechnen, wenn also das eine bild "grüner" als das andere ist, das entsprechend in die toleranz mit hineinrechnen.

aber das gehört eigentlich nicht hierher...

DP-Maintenance 26. Nov 2006 17:55

DP-Maintenance
 
Dieses Thema wurde von "Daniel" von "Neuen Beitrag zur Code-Library hinzufügen" nach "Multimedia" verschoben.

KleinAmann 5. Mär 2009 23:39

Bilder miteinander vergleichen / ungleiche Pixel makieren
 
Hi,

sry dass ich so einen alten Thread aufwühl :D aber ich
kam auf eine Idee für ein neues Programm.

Nun hab ich die Frage ob es sich auch irgendwie machen lässt,
Bereiche wo sich was geändert hat mit einem Kreis zu makieren.

Ich kann die einzelnen Pixel wo unterschiedlich sind färben aber ich
weiß nicht wie ich einen zusammenhängenden bereich umkreisen kann um ihn praktisch zu makieren.

Dann hätte ich noch eine weitere Frage, nehmen wir an man hat 1 Objekt (ein Fingerabdruck) nun ist auf dem Bild mit dem
man es vergleichen will auch dieser Fingerabdruck nur ist dieser nicht auf der selben position und nicht ganz vollständig.
Kann man jetzt irgendwie herausfinden ob sie übereinstimmen? Man siehts oft bei Crime Serien, wo sie die Fingerabdrücke aus ihrer Datenbank vergleichen.

Ich wäre dankbar um vorschläge bzw tipps.

Mfg "Klein"Amann

himitsu 6. Mär 2009 08:49

Re: Bilder schnell miteinander vergleichen
 
am einfachsten du erstellst dir erstmal ein Differenzielles Bild

für jedes Pixel :
Delphi-Quellcode:
DiffImage.PixelX.Red  := Abs(Image1.PixelX.Red  - Image2.PixelX.Red);
DiffImage.PixelX.Green := Abs(Image1.PixelX.Green - Image2.PixelX.Green);
...
dann suchst du dieses Bild nach Farben <> Schwarz ab (eventell mit mindestens einer gewissen Distanz zu Schwarz, damit kleinese unterschiede ignoriert werden)

von einem gefundenen Pixel schaust du dir die umgebenden Pixel an
und bekommst so einen Bereich zusammen ... anhand der Größe und Position dieses Bereiches zeichnest du dann den Kreis
(in etwa Kreisdurchmesser etwas größer als Max(Breite, Höhe) des Bereiches und Kreismittelpunkt = Bereichmittelpunkt)

und dann suchst du nach weiteren Bereichen (die gefundenen Bereiche irgendwo in einer Liste speichern und mit dem neugefundenen Bereich vergleichen, damit nichts mehrfach behandelt wird)

KleinAmann 6. Mär 2009 11:10

Re: Bilder schnell miteinander vergleichen
 
hi vielen Dank erstmals aber
leider gibts es bei mir in Delphi 2009 bei TImage werder Image1.pixel noch Image1.pixelX
was soll ich tun?
mfg DA

FriFra 27. Apr 2009 08:13

Re: Bilder schnell miteinander vergleichen
 
Ich hab die Funktion getestet, wobei die von Phantom mit meinen Testdaten ca. 3x schneller läuft, als die ursprüngliche Version.

Die Sache hat jedoch einen Schönheitsfehler, sie funktioniert nicht zuverlässig. Wenn ich eine 256 Farb Grafik scanne ist die Funktion sehr genau, bei JPGs mit den üblichen Artefakten tendiert die Trefferquote bei mir gegen 0. Ich habe einfache Grafiken und scanne diese nach ähnlichen Bereichen, dabei sind augenscheinlich nahezu identische Bereiche nach dem Ergebnis dieser Funktionen deutlich weniger ähnlich als vollkommen unterschiedliche Bereiche.

Kennt jemand noch eine andere Methode 2 Bilder auf Ähnlichkeit zu prüfen?

FriFra 6. Mai 2009 23:24

Re: Bilder schnell miteinander vergleichen
 
Ich wollte den Threat nochmal pushen... kennt wirklich niemand eine Möglichkeit 2 Bilder schnell auf Ähnlichkeit zu prüfen? Wie gesagt ist diese Methode für mich zu ungenau...

stiftmaster 23. Jul 2009 08:07

Re: Bilder schnell miteinander vergleichen
 
Hallo,

habe mir den "letzten finalen" Quelltext von Phantom1 genauer angeschaut und bin begeistert, wie schnell das ganze klappt - dickes Lob an dieser Stelle!

Dieser Code gibt ja als Int zurück, wie viele Pixel in der Grafik unterschiedlich sind. Nun möchte ich halt nicht nur die Anzahl wissen, sondern a) welche Position und b) wie der neue Wert aussieht. Habe daher den if-Teil wie folgt angepasst:

Delphi-Quellcode:
if (P1^.rgbtRed<>P2^.rgbtRed) or (PWord(P1)^<>PWord(P2)^) then
begin
  SetLength(changes, Length(changes) + 1);
  y := xy div Bitmap1.Width;
  x := xy - (y * Bitmap1.Width);
  changes[Length(changes) - 1].x := x;
  changes[Length(changes) - 1].y := y;
  changes[Length(changes) - 1].Color := Bitmap2.Canvas.Pixels[x, y];
end;
Dabei sieht changes wie folgt aus:
Delphi-Quellcode:
TDifference = record
  x: Integer;
  y: Integer;
  color: TColor;
end;

TDifferences = array of TDifference;

var
  changes: TDifferences;
Zu den Messungen: wenn ich Phantom1 Code nehme, dann braucht mein Rechner mit meinen Bildern bei 500 Durchläufen 4.500 TickCounts. Wenn ich meine Anpassungen integriere, dann sind es 11.391. Das ist natürlich prozentual gesehen ein enormer Verlust an Geschwindigkeit. Daher meine Frage an euch Fachmänner - geht das auch schneller?

Ziel ist grob wie folgt kurz beschreibbar:
Programm1: hat Bild1 und Bild2 => Berechnet Differenz
Programm2: hat Bild1 und bekommt Differenz => berechnet draus Bild2

Vielen Dank für eure Mühen

Stefan


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:00 Uhr.
Seite 4 von 5   « Erste     234 5      

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz