AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi Bildausschnitt mit Bild vergleichen

Bildausschnitt mit Bild vergleichen

Ein Thema von AbesCid · begonnen am 29. Jul 2010 · letzter Beitrag vom 14. Dez 2011
Antwort Antwort
Benutzerbild von Nikolas
Nikolas

Registriert seit: 28. Jul 2003
1.528 Beiträge
 
Delphi 2005 Personal
 
#1

AW: Bildausschnitt mit Bild vergleichen

  Alt 29. Jul 2010, 23:38
> Also müsste ich rein theoretisch 60 x 75 Pixel vergleichen (4500)

In der ganz naiven Methode schiebst du den kleinen Bildausschnitt an alle möglichen Positionen und summierst dann über alle Pixel des kleinen Bild den unterschied zum Pixel im großen Bild. Bei 70x85 und 10x10 sind das 60*57 Vergleiche und jeweils 100Vergleiche. Wenn du allerdings weisst, dass das kleine Bild exakt aus dem großem kopiert wurde, kannst du natürlich nach dem ersten unterschiedlichen Pixel aufhören und wirst in den meisten Fällen wirklich mit einem Aufwand rechnen können, der grob der Anzahl der Pixel im großen Bild entspricht.

Aber nochmal zum Verständnis: Du hast einen kleinen Ausschnitt und 15000 Bilder aus dem er stammen kann. Was für eine Art Spiel ist das eigentlich? So richtig einen Sinn kann ich dahinter nichts sehen...
Erwarte das Beste und bereite dich auf das Schlimmste vor.
  Mit Zitat antworten Zitat
Medium

Registriert seit: 23. Jan 2008
3.688 Beiträge
 
Delphi 2007 Enterprise
 
#2

AW: Bildausschnitt mit Bild vergleichen

  Alt 30. Jul 2010, 02:40
Da wird's mit schnell aber recht flott eng. Nimmt man die Bildgröße mal der Anzahl, hast du es mit rund 94 mio. Pixeln zu tun, so dass die Gesamtaufgabe wird: Finde ein 10x10 Pixel großen Bereich in einem ca. 9700x9700 Pixel großen Bild. (Da man nicht über Bildkanten hinaus vergleichen muss, ist der Wert genorös abgerundet um das mit abzuschätzen. Grad keine Lust das ganz genau zu berechnen )

Der Best-Case ist zwar in 100 Vergleichen abgetan (sofortiger Fund), aber:
24 Bit RGB kann zwischen 16.777.216 Farben unterscheiden. Dein "Pool" ist ~94.000.000 Pixel, was heisst, dass statistisch jede Farbe 5,6 Mal vor kommt, so dass selbst mit der "early-out"-Optimierung eher selten nach dem ersten Vergleich Schluss ist. Nach dem 2. ist es schon ganz erheblich wahrscheinlicher (kommt halt auch sehr stark auf die Ähnlichkeiten der Bilder untereinander an). Du musst also zum Ausschließen einer Position grob geschätzt im Mittel(!) mindestens 2 Vergleiche haben, so dass du im best worst case schon ~188.000.000 Vergleiche brauchst. Im aller schlimmsten (aber auch extrem unwahrscheinlichen) Worst-Worst-Case bist du bei ~9.400.000.000 Operationen. Die Spanne ist riesig! 100 bis 9 Milliarden Operationen. Der mittlere zu erwartende Aufwand hängt dann von den konkreten Bildern selbst ab.
Man nagle mich jetzt auch nicht auf genaue Werte fest, das sind alles Pi*Daumen Schätzungen, um ein Gefühl für die Größenordnungen zu bekommen.
(Und wenn das Kandidatenbild bzw. die Basisbilder nicht 100%ig exakt sind (z.B. jpeg Kompression im Spiel ist), muss man das ganze auch noch tolerant gestalten, was die Rechenzeit gerne auch mal sehr merklich erhöht. Just in case...)

Nebenbei: Die Basisdaten verbraten 70*85*24/8 = 282.744.000 Byte im Speicher. Wenn das ganze eine isolierte Funktion eines Tools ist, locker verschmerzbar. Wenn es zu einem größeren Programm gehört, lohnt es sich ggf. aber auch da drauf zu gucken und ggf. etwas Cashing zu betreiben. Ist jetzt an sich nicht kritisch, aber genug um's zu erwähnen

Jetzt die spannende Frage: Wie schnell brauchst du diese Funktion? Und: Muss sie verlässlich N mal pro Zeiteinheit ausgeführt werden?
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)

Geändert von Medium (30. Jul 2010 um 02:44 Uhr)
  Mit Zitat antworten Zitat
AbesCid

Registriert seit: 23. Mai 2009
21 Beiträge
 
Delphi 7 Personal
 
#3

AW: Bildausschnitt mit Bild vergleichen

  Alt 2. Aug 2010, 18:32
Erst einmal wieder vielen Dank für eure Antworten und den interessanten Gedanken

An Nikolas:
Das ganze ist für ein Online Spiel. Es gibt Sets, diese bestehen aus jeweils 12 Karten. Das eigentliche Spiel zeigt mir ein Bild und aus diesem Bild soll ich erkennen welche "große" Karte gemeint ist. Das müsst ihr nicht unbedingt verstehen. Es handelt sich dabei um eine Art Zeitvertreib. Wenn du nun das Bild erkannt hast, dann bekommst du Preise etc.
Wie gesagt es ist eher ein Spiel und daher auch nicht soooo wichtig. Ich habe für dieses Onlinespiel schon einige Programme geschrieben, die mir einen Vorteil verschaffen. Einige sagen jetzt sicher Betrug, aber ich programmiere die Programme aus Spaß und nicht nur, um einen Vorteil zu erhaschen.
Vielmehr bin ich stolz darauf ein nutzbares Programm geschrieben zu haben, welches auch wirklich funktioniert.
So zurück zum Thema und gleich zur Frage von Medium.
Wie du nun bestimmt schon erahnen kannst (aus meiner obigen Antwort) brauche ich die Funktion nicht unbedingt. Es ging mir einfach nur darum, ob ich so etwas mit einer einfachen Funktion von Delphi hätte programmieren können. Mehr nicht. Da sich das nun alles sehr kompliziert erweist bzw. anhört, werde ich mich irgendwann später nochmal mit der Sache beschäftigen oder eben einfach sein lassen.

Dennoch vielen Dank für eure Hilfe und fürs Erschlagen mit den vielen Zahlen

Außerdem sollte ich mich mal mit effektiverem Programmieren beschäftigen. Leider verschaffen meine bisherigen Programme sehr viel CPU-Auslastung (teilweise bis 100% und eine Spreicherauslastung von ca. 20.000 K).

Wie kann ich so etwas optimieren? (jetzt fange ich gleich eine neue Frage in einer Frage an ... ahh -> ich bitte um Verzeihung)
Also wo ist das Problem? Muss ich nach Optimierung suchen (hier im Forum) oder wie oder was?
  Mit Zitat antworten Zitat
blackfin
(Gast)

n/a Beiträge
 
#4

AW: Bildausschnitt mit Bild vergleichen

  Alt 2. Aug 2010, 19:06
Zitat:
Da wird's mit schnell aber recht flott eng.
Der Satz gehört in eine Zitate-Liste
  Mit Zitat antworten Zitat
youuu

Registriert seit: 2. Sep 2008
Ort: Kleve
822 Beiträge
 
Delphi 2010 Professional
 
#5

AW: Bildausschnitt mit Bild vergleichen

  Alt 2. Aug 2010, 19:23
Hm sollte es nicht möglich sein, die Autoit Bibliotheken zu implementieren und dann die relative gut vorhanden Pixel Funktionen zu verwenden?
Steven
  Mit Zitat antworten Zitat
bernhard_LA

Registriert seit: 8. Jun 2009
Ort: Bayern
1.138 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: Bildausschnitt mit Bild vergleichen

  Alt 14. Dez 2011, 09:59
für die technische Lösung dieses Themas habe ich einen neuen Thread aufgemacht :


http://www.delphipraxis.net/165081-c...ml#post1141307
  Mit Zitat antworten Zitat
Antwort Antwort

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 19:38 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