Bild in einem Bild suchen
-
also praktisch so:
wenn pixel 1,1 in bild1 == pixel 1,1 in bild2 dann
wenn pixel 2,1 in bild1 == pixel 2,1 in bild2 dann
usw... und wenn alles gleich ist dann ausgabe
wenn ende
wenn endewenn pixel 2,1 in bild1 == pixel 1,1 in bild2 dann
wenn pixel 3,1 in bild1 == pixel 2,1 in bild2 dann
usw... und wenn alles gleich ist dann ausgabe
wenn ende
wenn endeusw
so in etwa? kennst du dazu ein tutorial oder ein buch?
und wie könnte ich abweichungen in bild2 'tolerieren' ?
z.B. wenn ein paar Pixel anders sind
-
ja so in etwa. wenn du abweichende pixel tollerieren willst, ignorierst du halt die anzahl der falschen pixel die du tollerieren willst.
falls du den unterschied zwieschen zwei pixel tollerieren willst, rechnest du den abstand zweischen den pixeln aus, also
abs(pixel1.red-pixel2.red)+abs(pixel1.green-pixel2.green)+abs(pixel1.blue-pixel2.blue)<Tolleranz
-
Vielleicht noch ein Stichwort dazu: Kreuzkorrelation
-
hm was bringt mir dieses thema in bezug auf meine frage.
wikipedia und co spucken mir nur gps-infos und formeln aus
edit: ah oke... ich hab das 'mod im mathe forum' in deiner sig übersehen *eg*
is mir zu hoch
-
waere auch mit kanonen auf spatzen gewesen, falls es wirklich so simple dinge sind wie in deinen beispielbildern kommst du mit den simplen vergleichen voll aus.
-
Die Kreuzkorrelation ist eigentlich nix anderes als das beschriebene Vorgehen. Nur dass man üblicherweise die Summe der quadratischen Abstände nimmt.
-
naja es ist 'fast' genau das was ich brauche aber den rest dichte ich mir
dann selbst dazu
die frage mal jetzt vielleicht ein wenig dümmlich klingen...
aber hat hier jemand einen link zu einer anleitung zum arbeiten mit grafiken in c++ ,
das geht ja nur per winapi bzw dx usw oder?
-
graphiken, also bilder, sind nur dateien, geht also mit c++.
-
naja schon aber das auslesen von nem pixel geht doch per getpixel und das ist doch winapi oder geht das auch ohne??

-
informier dich ueber dein gewuenschtes graphikformat... oder war das nur ein schlechter aprilscherz?
-
so hab mich mal grob drüber informiert, aber das ganze ist ja ziemlich umständlich.
sobald die bmp anders komprimiert ist, kann ich nix mehr mit den daten anfangen
und anders auslesen wenn ich das so weit richtig verstanden habe...da ist es doch mit winapi einfacher denke ich - oder?
achja^^... nein das ist kein aprilscherz :PP
-
Wenn was anderes ist als wirklich einfache datenformate ist es vermutlich einfacher irgendeine bibliothek zuhilfe zu nehmen. Letztlich kann man theoretisch aber auch alles in reinem ISO-C++ machen. Es ist halt dann entsprechend aufwendig.
-
das hab ich mir schon gedacht aber welche bibliothek kannst du mir denn
empfehlen um mit grafiken zu arbeiten?
-
Die WinAPI stellt vermutlich ein paar einfache Funktionen zur Verfügung. Nahezu jede GUI-Framework bietet Klassen um Bilder zu laden und auf die Pixel zuzugreifen. Außerdem gibt's natürlich noch speziellere Bibliotheken, beispielsweise OpenCV. Die können allerdings noch viel mehr als nur Bilder laden. In OpenCV ist ne Kreuzkorrelation ziemlich sicher schon implementiert. Je nach Deinem Erfahrungsstand mußt Du aber auch Zeit einrechnen bis sone Library dann läuft und Du Dir die richtigen Funktionen rausgesucht hast.
Wenn Du also nicht vor hast die Bildverarbeitungsfunktionen von OpenCV zu benutzen würde ich eher zur WinAPI oder ähnlichem raten.
-
hm... kann mir leider das erste bild nicht ansehen "link has been blocked" erscheint da nur, was auf dem zweiten bild ist, kann ich auch nicht erkennen (kaputte kokosnuss?
:p ) , aber so etwas:Phenex schrieb:
1,1 in bild1 == pixel 1,1 in bild2
wird definitiv nicht funktionieren, wenn die beiden bilder in getrennten dateien vorliegen und irgendwie nicht-verlustfrei komprimiert wurden (zb in JPEG = das sieht zwar für den menschen ähnlich aus, die farbwerte werden jedoch alle irgendwie geringfügig verändert).
Ausserdem wird es mehr oder weniger ewig dauern, wenn die bilder größer werden, da lohnt es sich evtl, das ganze zunächst mal in gröbere "verwischte" rechtecke zu zerlegen...
-
Andrey schrieb:
kaputte kokosnuss?
hehe, jep. zum trinken
hatte grad kein anderes bild da.
aber das ist eben ein ausschnitt aus dem ersten bild.Andrey schrieb:
[...] wird definitiv nicht funktionieren, wenn die beiden bilder in getrennten dateien vorliegen und irgendwie nicht-verlustfrei komprimiert wurden
ja das ist ja einer der gründe wieso ich ne toleranz einbauen will.
muss eben das irgendwie voneinander abziehen und den rest dann bis zu einem
bestimmten wert tolerieren...Andrey schrieb:
Ausserdem wird es mehr oder weniger ewig dauern, wenn die bilder größer werden, da lohnt es sich evtl, das ganze zunächst mal in gröbere "verwischte" rechtecke zu zerlegen...
hm was meinst du mit gröberen rechtecken

das ganze soll schon mehr oder weniger genau sein.
-
Du kannst ja versuchen erstmal kleinere Bildauschnitte zu lokalisieren und nur dort wo die passen auch versuchen das ganze Bild unterzubringen.
-
naja aber das kommt ja auf das selbe raus denn wenn die ersten pixel nicht
passen hört er ja eh auf zu vergleichen.
-
Ja okay, aber was ist wenn's nur ähnlich ist und ausgerechnet die ersten Pixel nicht passen?
-
hm ja... aber das ganze bild vergleichen und dann in einer art *prozentzahl* die ähnlichkeit ausgeben ist doch ziemlich rechenintensiv hum?
wenn ich das für jedes möglich rechteck mache - omg