Delphi-PRAXiS
Seite 3 von 5     123 45      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Bilder vergleichen -> optimiertes verfahren gesucht! (https://www.delphipraxis.net/49829-bilder-vergleichen-optimiertes-verfahren-gesucht.html)

scp 17. Jul 2005 16:44

Re: Bilder vergleichen -> optimiertes verfahren gesucht!
 
Bei Bitmap32 gehts ohne PixelFormat (oder vergleichbares). Kann dein Problem allerdings nicht nachvollziehen, wenn man reine Bitmaps verwendet.
Ist die ursprüngliche Quelle allerdings ein JPEG z.B., dann musst du den Vergleich etwas Fehlertoleranter gestalten, da hier die Farben von der Kompression verfälscht werden.

Statt bild.Canvas.pixels[x,y]<>bild2.Canvas.pixels[x,y] solltest du eine Vergleichs-Funktion basteln, z.B.:
Delphi-Quellcode:
// Liefert true zurück, wenn Pixel unterschiedlich.
function PixelCompare(A, B: DWORD): boolean;
begin
  result := (Abs(RGBQuad(A).rgbBlue - RGBQuad(B).rgbBlue ) +
             Abs(RGBQuad(A).rgbGreen - RGBQuad(B).rgbGreen) +
             Abs(RGBQuad(A).rgbRed  - RGBQuad(B).rgbRed ) ) > 64;
end;
Angewendet wird sie dann so:
Delphi-Quellcode:
        if PixelCompare(bild.Canvas.pixels[x,y], bild2.Canvas.pixels[x,y]) then
Diese Funktion lieferte nach ersten Tests gute Resultate, ist aber nicht "wissenschaftlich untermauert". :-)

alleinherrscher 17. Jul 2005 16:58

Re: Bilder vergleichen -> optimiertes verfahren gesucht!
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hi Scp!

Ich weiß auch, dass jpgs ne ungenauigkeit beim komprimieren bekommen. Hier hab ich ALLES (inkl. meiner Testbilder) mal gezippt...probierts mal aus. Es liefert oft das richtige ergebnis (genau den ausschnitt, der fehlerhaft ist) aber auch ab und zu einen zu großen oder falschen ausschnitt...

Danke für den Tipp mit dem JPG, aber könntest du dir das trotzdem mal anschauen, Scp? Das wäre lieb!

By the way: habe gerade deine Fehlertoleranz getestet, bei mir tritt trotzdem der selbe fehler auf, werde mir jetzt mal die farbwerte von dem als unterschiedlich erkannten pixeln ansehen...

scp 17. Jul 2005 17:08

Re: Bilder vergleichen -> optimiertes verfahren gesucht!
 
Sieht doch gut aus eigentlich nur
Delphi-Quellcode:
    r2:= rect(x_min,y_min,x_max+1,y_max+1);

    //bild3.PixelFormat := bild.PixelFormat;

    bild3.SetSize(x_max-x_min+1, y_max-y_min+1);
//    bild3.Width:=x_max-x_min+1;
//    bild3.height:=y_max-y_min+1;
bei r2 jeweils +1 (frag mich nicht warum) und nur der Form halber bei g32 SetSize() statt Width und Height verwenden. Außerdem fehlt immer noch try finally.

alleinherrscher 17. Jul 2005 17:24

Re: Bilder vergleichen -> optimiertes verfahren gesucht!
 
Ja, danke, aber das löst ja das Problem nicht...ich habe jetzt mal nachgeschaut:

Wenn das Programm den Fehler bei mir macht, also an der stelle [x,y] zwei unterschiedliche Pixel auf bild1 und bild2 erkennt, obwohl diese gleich sind und man für die stelle[x,y] die rgb werte ausgibt, geschieht folgendes:

Bild1: r:232g:219b:210(oder sonst was)
Bild2: r:232g:0 b:0

Allerseits an der Stelle x=664, y=21

Es gibt auch noch andere Fälle.
Da in diesem speziellen Fehlerfall der y wert der unteren grenze kleiner ist, als der der oberen Grenze, führt das ganze zu einem Fehler, da das bild3 theoretisch eine negative höhe hätte...

Erklär mir mal einer, warum die pixel funktion da z.B. an der stelle 664,21 mal unterschiede erkennt, aber mal wieder nicht?! Das kann eigentlich nicht an meinem Programm liegen...vielleicht liegts an D6 in kombination mit g32, was weiß ich...

Es scheint so, als ob in dem einen bild jeweils zwei farbwerte fehlen würden, tun sie aber nicht....*arg*

scp 17. Jul 2005 17:28

Re: Bilder vergleichen -> optimiertes verfahren gesucht!
 
Geschieht das denn bei den beigelegten Bildern? Also, under D2005 Personal gehts immer bis jetzt.

alleinherrscher 17. Jul 2005 17:36

Re: Bilder vergleichen -> optimiertes verfahren gesucht!
 
Liste der Anhänge anzeigen (Anzahl: 1)
Ja, genau bei denen! Ich kanns lad nochmal 2 beispiele hoch, wie bei mir bild3 aussieht...vielleicht sollte ich versuchen g32 neu zu installieren oder so was...

Benutze immoment folgende Version von g32:
Graphics32 v1.7.1 - Build on 25-Februar-2005

Jan 17. Jul 2005 18:41

Re: Bilder vergleichen -> optimiertes verfahren gesucht!
 
Vielen Dank @ scp fürs verteidigen meiner Routine!
Wenns wichtig ist das ganze würd ich mir einfach schnell den code zusammenbasteln zum auslesen eines Bitmaps und dem Auslesen der Farbwerte auf eigene Faust, ohne Kompo.
Gruß
Jan

scp 17. Jul 2005 20:55

Re: Bilder vergleichen -> optimiertes verfahren gesucht!
 
Liste der Anhänge anzeigen (Anzahl: 1)
Anbei das geänderte und unter D2005 kompilierte Projekt. Probier erst mal nur die .exe aus, brauchst nur die 2 bmps zurück in den Ordner kopieren.
Ich verwende auch die g32 1.71

@Jan
Namensvettern steht man eben zur Seite :-)

alleinherrscher 17. Jul 2005 21:53

Re: Bilder vergleichen -> optimiertes verfahren gesucht!
 
Danke für die ganze Mühe Scp! Es ist in der Tat wie ich vermutet habe...Deine Kompilation läuft ohne Probleme, 100 Prozentig inordnung (THX!!!), aber wenn ich das Projekt kompiliere, treten wieder die selben fehler auf. Scheinbar kann D6 nicht so gut mit gr32... i don't know...schade...mal schauen, was ich jetzt mache! :(

Danke erstmal! :hello:

scp 17. Jul 2005 22:49

Re: Bilder vergleichen -> optimiertes verfahren gesucht!
 
Naja, in dem Fall ist TBitmap bei mir genauso schnell, kannst ja erstmal das wieder nehmen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:16 Uhr.
Seite 3 von 5     123 45      

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