punkte finden



  • @DocJunioR:
    wie gesagt mach ich das grade im Prinzip so, aber es gibt eben auch andere weiße Stellen, und da die Punkte nicht ein Pixel groß sind, bringt das ja nicht wirklich was.

    @TomasRiker:
    ich kann nichts finden wie man das nun konkret macht, kennst du vielleicht ein Tutorial, Beispiel oder eine Library?



  • klingt so, als könntest du über die aufnahmen ziemlich genaue annahmen machen. wenn die webcam vom laserpointerpunkt z.b. immer exakt gleich entfernt ist (webcam steht starr und "guckt" auf die projektorwand) dann wird dich nen sehr simples korrelationsverfahren möglicherweise schnell ans ziel bringen.

    du kannst dann nämlich davon ausgehen, dass der laserpointerpunkt auf jedem bild ungefähr gleich gross ist. wenn das der fall ist, geht folgendes verfahren wahrscheinlich ziemlich gut:

    - template für laserpointerpunkt basteln (aus händisch erstelltem binärbild kopieren)
    - hohen schwellenwert über das ursprungsbild jagen, um ein binärbild zu erhalten, auf dem der laserpointerpunkt wahrscheinlich eines der "rundesten" objekte sein wird
    - template über das bild jagen und pixelweise vergleichen (korrelation), vergleichswerte in einer liste speichern
    - höchste korrelation ist die stelle, an der sich dein laserpointerpunkt befindet

    da du hier mit binärbildern arbeitest, bietet sich als korrelatioswert die anzahl der deckungsgleichen pixel beim vergleich an



  • Guck dir mal die Hough-Transformation für Kreise an



  • @thordk:
    die Idee gefällt mir, aber ich denke das Problem werden die unterschiedlichen Hintergründe,der Laserpointer ist zwar immer gleich weit entfernt, aber der Beamer zeigt immer andere Bilder, außerdem ist es mal heller und mal dunkler.
    Aber ich probier das trotzdem mal, immerhin sind Laserpointer ziemlich hell, vielleicht merkt man durch den Hintergrund keinen allzu großen Unterschied.

    Ganz hab ich das aber noch nicht verstanden, wie genau soll ich das Template über das Bild "jagen"?
    wenn ich jeden Pixel von dem Webcam-Bild einmal als Offset für das Template nehm, muss ich ja Pixel_webcam*Pixel_Template viele vergleiche machen, das dauert aber zu lange, da das ganze in Echtzeit laufen muss.

    @Vertexwahn:
    da find ich auch keine Librarys oder Tutorials drüber wie man das praktisch machen kann, kennst du da was?



  • Vertexwahn schrieb:

    Guck dir mal die Hough-Transformation für Kreise an

    die ist imo ziemlich rechenlastig.
    Wenn du _wirklich_ runde kreise hast, gehts vielleicht, aber ansonsten hast du wenigstens 5 variable Parameter.. da braucht selbst nen guter PC ne Weile

    zum Thema Tutorial:

    Du hast folgende variablen Werte:
    Radius höhe: a
    Radius breite: b
    Rotationswinkel um den Kreismittelpunkt.

    Mittelpunkt: x, y

    Hiermit errechnest du die Randpunkte eines Ellipsoids.

    Wenn du jetzt den Mitteplunkt verschiebst und die errechneten Randpixel auf deinem Bild suchst, musst du eigentlich nur noch entscheiden, ob du genug weiße Punkte direkt auf den Randpunkten hast. Bist du der Meinung, es sind genug, speicherst du die Daten der Ellipse ab und schwärzt das Bild an der Stelle, damit du auch ja nichts doppelt findest..

    http://de.wikipedia.org/wiki/Ellipse


  • Mod

    bewegt sich der laserpointer zufaellig?



  • @DocJunioR:
    das hört sich auch gut an, ich mach überprüf am besten auch noch ob in einem größeren radius dann keine weißen Punkte mehr sind, wenn doch ist es ein weißer Teil vom Beamer und kein Laserpointer.

    @rapso:
    jop, sonst wärs nicht in Echtzeit und man könnt auch einfach das Bild von der Webcam holen und von Hand bestimmen wo der Laser ist.
    Oder meinst du die Position von der der Laserpointer strahlt und nicht die auf der er aufkommt?
    Wär schon besser wenn die variabel wäre, muss aber nicht sein.


  • Mod

    wenn sich der laserpointer mehr bewegt als der rest, mach diffs zu den letzten paar frames und dann ist die stelle mit den meisten bewegungen die letzte position vom LP.



  • ne im Hintergrund bewegt sich viel zu viel, da bewegt sich der Laserpointer wahrscheinlich noch am wenigsten.



  • scales of justice schrieb:

    @thordk:
    die Idee gefällt mir, aber ich denke das Problem werden die unterschiedlichen Hintergründe,der Laserpointer ist zwar immer gleich weit entfernt, aber der Beamer zeigt immer andere Bilder, außerdem ist es mal heller und mal dunkler.
    Aber ich probier das trotzdem mal, immerhin sind Laserpointer ziemlich hell, vielleicht merkt man durch den Hintergrund keinen allzu großen Unterschied.

    Ganz hab ich das aber noch nicht verstanden, wie genau soll ich das Template über das Bild "jagen"?
    wenn ich jeden Pixel von dem Webcam-Bild einmal als Offset für das Template nehm, muss ich ja Pixel_webcam*Pixel_Template viele vergleiche machen, das dauert aber zu lange, da das ganze in Echtzeit laufen muss.

    klar, das kann schon recht lang dauern, wenn man es pixelweise macht. kommt halt auf die gewünschte genauigkeit an. sinnvoll ist es bei sowas entweder das bild zu skalieren, oder das template nicht immer einen pixel pro schritt zu bewegen, sondern gleich mehrere (equivalent dazu, das bild zu verkleinern).

    in der bildverarbeitung braucht man sehr sehr selten "riesige" bilder. meist erhält man ebenso gute (manchmal sogar bessere) ergebnisse, wenn man mit kleiner skalierten bildern arbeitet.

    hab aus spass grad mal son template ding implementiert und siehe da, es hat sogar geklappt 😉 hab mal nen bild angefügt, wie ursprungsbilder ungefähr gestaltet sein sollten, damit das gut klappt.

    http://img50.imageshack.us/img50/5953/blubbog4.png

    der laserpointer (hier der dicke fleck) muss schon irgendwie besonders herausstechen. wenn er im vergleich zum rest des bildes extrem klein ist und viele bereiche ähnliche helligkeit aufweisen, dann kann es mitunter schwer werden, hier mit nem template verfahren weiter zu kommen. bewegliche objekte auf sich veränderndem untergrund zu finden ist wahrlich keine einfache aufgabe.

    möglicherweise wirst du mit "simplen" verfahren gar nicht weiterkommen. wär hilfreich, wenn du mal paar beispielbilder hättest.


  • Mod

    scales of justice schrieb:

    ne im Hintergrund bewegt sich viel zu viel, da bewegt sich der Laserpointer wahrscheinlich noch am wenigsten.

    ist doch gut, mach es genau andersrum, die stelle die am meisten gleich bleibt, da ist der laserpointer 😃



  • @thordk:

    bei mir funzt jetzt einigermaßen:
    ich durchsuch das bild erstmal nach hellen pixel und probier nur in deren nähe das template, damit ist die rechenzeit in Ordnung, solange man die Kamera nicht in die Sonne hält.

    Allerdings kommen immer noch manchmal Fehler, kannst du mir den Sourcecode von deinem Programm geben?
    vielleicht hast du das besser hinbekommen wie ich.

    das ist eher ein kleines projekt, falls es mit einem einfachen varfahren nicht funktioniert mach ich einfach die hellen sachen aus dem spiel raus, das ist auch nicht so schlimm.
    Bilder kann ich machen, allerdings hab ich den Projektor nicht zu hause, kom ich wahrscheinlich Donnerstag wieder dran.

    EDIT:
    hat sich erledigt, jetzt funktionierts gut, war nur ein programmierfehler.

    Eine Frage noch weil ich das ganze präsentier:
    gibts ein Fremdwort für diese Template-Technik? ist das Korrelation?



  • klar, den source kannst haben. habs allerdings in java geschrieben, also nich irritieren lassen 😃 und das ganze is nich wirklich auf speed optimiert, sollte nur mal testen, wie das funzt.

    source: http://rafb.net/p/Eu0r8B93.html


Anmelden zum Antworten