![]() |
Re: Bilder schnell miteinander vergleichen
Zitat:
|
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 |
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
Dieses Thema wurde von "Daniel" von "Neuen Beitrag zur Code-Library hinzufügen" nach "Multimedia" verschoben.
|
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 |
Re: Bilder schnell miteinander vergleichen
am einfachsten du erstellst dir erstmal ein Differenzielles Bild
für jedes Pixel :
Delphi-Quellcode:
dann suchst du dieses Bild nach Farben <> Schwarz ab (eventell mit mindestens einer gewissen Distanz zu Schwarz, damit kleinese unterschiede ignoriert werden)
DiffImage.PixelX.Red := Abs(Image1.PixelX.Red - Image2.PixelX.Red);
DiffImage.PixelX.Green := Abs(Image1.PixelX.Green - Image2.PixelX.Green); ... 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) |
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 |
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? |
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...
|
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:
Dabei sieht changes wie folgt aus:
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;
Delphi-Quellcode:
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?
TDifference = record
x: Integer; y: Integer; color: TColor; end; TDifferences = array of TDifference; var changes: TDifferences; 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. |
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