Bild in einem Bild suchen


  • Mod

    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


  • Mod

    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?


  • Mod

    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?? 😃


  • Mod

    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 🙂



  • Das würde ich als erste mal implementieren. Und anschließend kannste ja noch optimieren indem Du erstmal Bildausschnitte suchst.


Anmelden zum Antworten