Image-Recognition

  • Allgemein

Es gibt 4 Antworten in diesem Thema. Der letzte Beitrag () ist von LaMiy.

    Image-Recognition

    Guten Tag liebes Forum,

    ich habe allgemeine Fragen zum sogenannten Image-Recognition.

    Gegeben sei eine Karte ( Luftbild, mehr oder minder orthogonal ), und eine weitere Karte ( Google Maps, et cetera ) .
    Es gilt zu lösen:

    Aus diesem einen Luftbild ( aufgenommen mit Webcam, Cam et cetera ) soll determiniert werden, welches Gebiet am passlichsten ist.
    Das bedeutet, die Applikation hat 50 Templates ( Google Maps ) und muss nun das Template wiedergeben, dass diesem Luftbild am identischsten ist.

    Ich habe mir überlegt, als Erstes extrahiert die Applikation alle jenen Pixel, die keine menschlichen "Errungenschaften" repräsentieren ( Bäume, Gräser, Pflanzen ), sodass menschliche Strukturen als einziges Relevantes als Referenz genommen werden kann.
    Dann wollte ich die Straßen und andere rationalen Konstruktionen markieren.

    Ich habe mir überlegt, die Applikation mehrere Exemplare von Straßen ( Farbe , Form ) zu offerieren, sodass es erkennen kann, dass Pixel (i, j) eine Straße ist.
    Auch habe ich einen Sobel-Operator in Erwägung gezogen.

    Schließlich, nach all dieser Abstraktion wird dann das Luftbild mit den Templates parallelisiert.

    Folgendes Problem resultiert jedoch:
    Wenn das Luftbild nicht orthogonal ist, oder schlimmer, schief ist, sodass eine Straße, die gerade ist, plötzlich eine Diagonale repräsentiert.


    Wie würdet ihr dieses spezifische Problem lösen, oder sogar, wie ist mein Ansatz, habt ihr einen anderen Vorschlag?
    Ich habe auf meinen Ansatz via OpenCV das sogenannte Bruteforce Matching angewandt...doch der Name wird diesem Verfahren nicht gerecht..
    Wenn ich zwei Bilder habe, das Bild a) ist das ganze Bild und b) eine Szene dieses Bild, die im ganzen Bild zu suchen gilt, und das Template rotiere, so wird diese Szene im Input-Bild nicht (mehr) gefunden..

    Kennt ihr Algorithmen, die diese Aufgabenstellung erfüllen?

    Ich wäre über Referenzen gänzlich erfreut.

    Lieben , lieben Dank und einen schönen Tag noch!
    Und Gott alleine weiß alles am allerbesten und besser.

    φConst schrieb:

    Algorithmen
    Hier geht es um harte Bildverarbeitung.
    Grob gesagt:
    • Bild vorbereiten
    • Kanten erkennen kleine Objekte löschen
    • Kanten vektorisieren
    • Vekrorobjekte beider Bilder vergleichen: Größe anpassen, Ausrichtung anpassen
    Das ganze ist jedoch nicht trivial.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    RodFromGermany schrieb:

    Kanten vektorisieren



    Genau das habe ich mir auch gedacht... exemplarisch ein Kreis; es ist geschlossen; demnach muss ja in der Addition 0 rauskommen... und so wollte ich auch bei Straßen argumentieren.
    Nur ist eben die Ausrichtung das Problem.. eine Straße , die gerade verläuft ist vektoriell gesehen ja einfach ein Pfeil, mit der Funktion
    f(x)=x * (1,0) + (0,0)
    , demnach
    ändert sich nur die X -Komponente (oder Y, je nachdem)... was jedoch, wenn das Bild schief ist und nun die Funktion plötzlich wie folgt aussieht :
    ​f(x)=x*(1,0.1) + (0,0)
    .. gibt es eine Möglichkeit, ein Algorithmus
    mit dem so etwas "korrigiert" werden kann?

    Wenn ich mir die Formel so angucke, fällt mir auf.. das eigentlich die Funktion selbst eine Gerade, und demnach eine Straße beschreibt.. 8o .

    Wie würdest Du die Straßen extrahieren?

    Lieben Dank!
    Und Gott alleine weiß alles am allerbesten und besser.

    φConst schrieb:

    die Straßen
    kenne ich nicht, ich kenne nur Kanten.
    Gedreht wird ein Bild mit einer Drehmatrix, das geht ganz easy. Das interessante dabei ist, dass egal ist, um welchen Punkt gedreht wird, ein Vektorgruppen in sich translationsinvariant sind.
    Im Prinzip musst Du dann nur noch eine Differenz zweier Bilder definieren.
    Wenn Du dann beide Bilder gleich ausrichtest (Norden oben), kannst Du durch Größenveränderung des einen im Vergleich zum anderen eine Reihe von Differenzwerten bestimmen, deren Minimum Du suchst.
    Diese Prozedur machst Du mit allen Zielbildern. das Bild mit dem kleinsten Minimum ist das Zielbild.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!