AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Bilder vergleichen -> optimiertes verfahren gesucht!
Thema durchsuchen
Ansicht
Themen-Optionen

Bilder vergleichen -> optimiertes verfahren gesucht!

Ein Thema von alleinherrscher · begonnen am 16. Jul 2005 · letzter Beitrag vom 18. Jul 2005
Antwort Antwort
Seite 2 von 5     12 34     Letzte »    
Benutzerbild von Jan
Jan

Registriert seit: 24. Sep 2002
Ort: Magdeburg
491 Beiträge
 
Delphi 7 Enterprise
 
#11

Re: Bilder vergleichen -> optimiertes verfahren gesucht!

  Alt 17. Jul 2005, 00:12
Zitat von alleinherrscher:
Hi@all!
@Jan: Ich verstehe nicht, warum deine Routine schneller gehen soll...du geht doch per pixels anweisung das ganzen Bild 2 mal durch, dadurch müsste es doch auch im endeffekt doppeltsolange dauern.
Das ist so nicht richtig. das ganze ist aus 2 Gründen theoretisch schneller.
1. Du checkst für JEDEN Pixel im bild ob er kleiner als das bisherige minimum ist und ob er größer ist als das bisherige maximum.
Das ganze habe ich verkürz, indem ich einfach nur den vergleich auf unterschied mache.
undzwar einmal von unten, und den ersten Wert der unterschiedlich ist auf Minimum setze. Danach wird die Schleife abgebrochen. Schlimmstenfalls geht er das ganze Bild durch, aber bestenfalls findet er den Unterschied schon beim ersten Pixel und spart sich jede Menge Laufzeit, außerdem habe ich die ganzen Vergleiche rausgeschmissen weil man die nicht braucht.
Das ganze mache ich dann noch fürs maximum, allerdings dann von oben, weil ich mal denke, dass es wahrscheinlicher ist, dass der Punkt im unteren Bildbereich ist. Somit spart man sich im mittel jede Menge Laufzeit.
Wenn du das ausprobierst kannste ja mal vergleichen.
Gruß
Jan
Jan
Wenn die Sonne der Kultur tief steht, werfen auch kleine Gestalten lange Schatten.
  Mit Zitat antworten Zitat
Benutzerbild von alleinherrscher
alleinherrscher

Registriert seit: 8. Jul 2004
Ort: Aachen
797 Beiträge
 
Delphi XE2 Professional
 
#12

Re: Bilder vergleichen -> optimiertes verfahren gesucht!

  Alt 17. Jul 2005, 12:37
@Jan: Ok, das sehe ich ein. Aber mein Problem ist ja, dass das ganze durch die canvas.pixels[x,y] routine verlangsamt wird, weil die - delphiintern nunmal eine sehr lange zugriffszeit auf das einzelne Pixel hat. Die Pixels[x,y] Funktion ist also der Flaschenhals. Und korrigiere mich, wenn ich falsch liege, du gehst mit der Pixels Funktion ALLE Pixel exakt 2 mal durch, meine Routine aber nur einmal. Sie wird mit sicherheit durch die umständliche if abfrage verlangamt, keine Frage. Aber müsste im Vergleich zu deiner Funktion immernoch schneller sein, weil die nur einmal jedes Pixel abfragt.

@all: Das alle löst leider immernoch nicht mein Problem...Kann es sein, dass die g32 Library da einen Fehler hat? (siehe meine vorherigen Einträge)...ich bekomme exakt das selbe Programm nicht mehr richtig zum laufen, wenn ich canvas.pixels[x,y] durch image32[x,y] ersetzte. Es geht zwar ca. 5 mal schneller, aber arbeit unkorrekt (siehe oben)

Edit: Mir ist gerade aufgefallen, dass es mit g32 "ab und zu" richtig arbeitet. D.h. wenn ich z.B. das erste mal vergleiche, wird das weiße Rechteck richtig erkannt, wenn ich nochmal Klicke, wird zu viel erkannt, wenn ich nochmal klicke wirds wieder richtig erkannt...aber völlig unsystematisch...dh. ich weiß beim nächsten klick nicht, ob es richtig oder falsch erkannt wird....

Hat da jemand einen Rat? Ich bin nämlich ziemlich Ratlos...

Gruß, Alleinherrscher
„Software wird schneller langsamer als Hardware schneller wird. “ (Niklaus Wirth, 1995)

Mein Netzwerktool: Lan.FS
  Mit Zitat antworten Zitat
Benutzerbild von alleinherrscher
alleinherrscher

Registriert seit: 8. Jul 2004
Ort: Aachen
797 Beiträge
 
Delphi XE2 Professional
 
#13

Re: Bilder vergleichen -> optimiertes verfahren gesucht!

  Alt 17. Jul 2005, 13:09
Hier, hab das Programm mal angehängt. Probiers mal aus. Also wie gesagt, habe bei mir 2 Screenshots mit "PrintScreen"-Taste gemacht, dann in Paint als 24Bit BMP abgespeichert, dann ein weißes Feld gemacht und erneut als anderes 24bit bmp abgespeichert. Manchmal erkennt das Programm das weiße Feld korrekt, manchmal werden aber unterschiede erkannt, obwohl es keine unterschiede gibt...tritt das bei euch auch auf? ruhig 10-20mal testen bitte!

Gruß, Alleinherrscher
Angehängte Dateien
Dateityp: zip vergleich_160.zip (5,3 KB, 26x aufgerufen)
„Software wird schneller langsamer als Hardware schneller wird. “ (Niklaus Wirth, 1995)

Mein Netzwerktool: Lan.FS
  Mit Zitat antworten Zitat
Benutzerbild von Ultimator
Ultimator

Registriert seit: 17. Feb 2004
Ort: Coburg
1.860 Beiträge
 
FreePascal / Lazarus
 
#14

Re: Bilder vergleichen -> optimiertes verfahren gesucht!

  Alt 17. Jul 2005, 13:18
Zitat von alleinherrscher:
Kann es sein, dass die g32 Library da einen Fehler hat? (siehe meine vorherigen Einträge)...ich bekomme exakt das selbe Programm nicht mehr richtig zum laufen, wenn ich canvas.pixels[x,y] durch image32[x,y] ersetzte. Es geht zwar ca. 5 mal schneller, aber arbeit unkorrekt (siehe oben)
Und wenn du image321.Bitmap.PixelS[x,y] versuchst?
Julian J. Pracht
  Mit Zitat antworten Zitat
scp

Registriert seit: 31. Okt 2003
1.120 Beiträge
 
Delphi 7 Personal
 
#15

Re: Bilder vergleichen -> optimiertes verfahren gesucht!

  Alt 17. Jul 2005, 13:19
Zitat von alleinherrscher:
@Jan: Ok, das sehe ich ein. Aber mein Problem ist ja, dass das ganze durch die canvas.pixels[x,y] routine verlangsamt wird, weil die - delphiintern nunmal eine sehr lange zugriffszeit auf das einzelne Pixel hat. Die Pixels[x,y] Funktion ist also der Flaschenhals. Und korrigiere mich, wenn ich falsch liege, du gehst mit der Pixels Funktion ALLE Pixel exakt 2 mal durch, meine Routine aber nur einmal. Sie wird mit sicherheit durch die umständliche if abfrage verlangamt, keine Frage. Aber müsste im Vergleich zu deiner Funktion immernoch schneller sein, weil die nur einmal jedes Pixel abfragt.
Nein, er geht das ganze Bild nicht zweimal durch, es wird ja direkt unterbrochen, sobald das erste unterschiedliche Pixel gefunden ist. Probiers doch einfach aus.
Du kannst das ganze von Jan auch auf g32 übertragen, dann ist es min. 3-4x so schnell.
  Mit Zitat antworten Zitat
Benutzerbild von Khabarakh
Khabarakh

Registriert seit: 18. Aug 2004
Ort: Brackenheim VS08 Pro
2.876 Beiträge
 
#16

Re: Bilder vergleichen -> optimiertes verfahren gesucht!

  Alt 17. Jul 2005, 13:34
Zitat von Ultimator:
Zitat von alleinherrscher:
Kann es sein, dass die g32 Library da einen Fehler hat? (siehe meine vorherigen Einträge)...ich bekomme exakt das selbe Programm nicht mehr richtig zum laufen, wenn ich canvas.pixels[x,y] durch image32[x,y] ersetzte. Es geht zwar ca. 5 mal schneller, aber arbeit unkorrekt (siehe oben)
Und wenn du image321.Bitmap.PixelS[x,y] versuchst?
Es würde mich wundern, wenn man mit
Delphi-Quellcode:
for x:=0 to bild.width-1 do
    for y:=0 to bild.height-1 do
     begin
       if bild[x,y] <> bild2[x,y] then
außerhalb des Bitmaps kommt .
Sebastian
Moderator in der EE
  Mit Zitat antworten Zitat
bigg
(Gast)

n/a Beiträge
 
#17

Re: Bilder vergleichen -> optimiertes verfahren gesucht!

  Alt 17. Jul 2005, 13:56
Zitat:
Aber doch nicht bei einem Bitmap im Speicher.
Wenn es angezeigt wird, schon,
aber das ist in diesem Fall nicht der springende Punkt.
  Mit Zitat antworten Zitat
Benutzerbild von alleinherrscher
alleinherrscher

Registriert seit: 8. Jul 2004
Ort: Aachen
797 Beiträge
 
Delphi XE2 Professional
 
#18

Re: Bilder vergleichen -> optimiertes verfahren gesucht!

  Alt 17. Jul 2005, 14:03
Ok, ich hatte das Break überlesen, Jan hat recht, sorry! Ich werde natürlich die Routine benutzten, die ist dann echt klasse.. tut mir leid...
„Software wird schneller langsamer als Hardware schneller wird. “ (Niklaus Wirth, 1995)

Mein Netzwerktool: Lan.FS
  Mit Zitat antworten Zitat
scp

Registriert seit: 31. Okt 2003
1.120 Beiträge
 
Delphi 7 Personal
 
#19

Re: Bilder vergleichen -> optimiertes verfahren gesucht!

  Alt 17. Jul 2005, 14:11
Ich habs grad mal getestet:
- Bei Jans Variante fehlt nur noch das zweite Break, für die zweite Schleife
- Der Ziel-Rect (r) ist nicht definiert, ein Wunder das es bis jetzt geklappt hat, deswegen dürfteauch g32 ins schleudern gekommen sein.
- Bei bild3 sollte PixelFormat definiert werden, bei mir kam sonst EOutOfResources und die Höhe/Breite mit +1
Delphi-Quellcode:
      bild3.PixelFormat := bild.PixelFormat;
      bild3.Width := x_max-x_min+1;
      bild3.height := y_max-y_min+1;
      r := rect(0, 0, bild3.Width, bild3.height);
- Und zum Schluss: try .. finally nicht vergessen.

PS: Jans Variante hat bei mir mit dem einfachen Rechteck-Paint-Beispiel nur 250 msec gebraucht!
  Mit Zitat antworten Zitat
Benutzerbild von alleinherrscher
alleinherrscher

Registriert seit: 8. Jul 2004
Ort: Aachen
797 Beiträge
 
Delphi XE2 Professional
 
#20

Re: Bilder vergleichen -> optimiertes verfahren gesucht!

  Alt 17. Jul 2005, 14:49
Also ich hab jetzt Jans Idee verwendet, ist zwar bei meiner alten Kiste nicht viel schneller (immernoch so 2 Sekunden) aber ich sehe ein, dass das die beste Lösung ist für das Problem Danke@Jan und die anderen!

Aber: *g* Das alte Problem besteht weiter, schaut mal hier. Ich habe zwei Bilder angehängt, die das Programm als Bild3.bmp ausgibt. Es werden von der g32 Lib Pixel mit gleichen Farbwerten als unterschiedlich erkannt.

Das einzige was ich noch nicht gemacht hab ist das "PixelFormat" eingestellt (das kann aber nicht der fehler sein, es gibt kein Pixelformat im TBitmap32)

Gruß, Alleinherrscher
Angehängte Dateien
Dateityp: zip richtigundfalsch_157.zip (200,8 KB, 21x aufgerufen)
„Software wird schneller langsamer als Hardware schneller wird. “ (Niklaus Wirth, 1995)

Mein Netzwerktool: Lan.FS
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 5     12 34     Letzte »    


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 16:27 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