EmguCV Road Detection

  • C#
  • .NET (FX) 4.5–4.8

Es gibt 8 Antworten in diesem Thema. Der letzte Beitrag () ist von φConst.

    EmguCV Road Detection

    Guten Tag,
    ich wage mich zurzeit an eine Straßen-Detektion in EmguCV...

    Ich habe mir zunächst überlegt, all die Pixels zu markieren, die zwischen zwei natürlichen Farben liegen( exemplarisch Straßen in der Wüste, oder zwischen Gräsern).

    Das Problem ist, dass die Gräser -oder Sand-Farben insgesamt similar, nicht jedoch identisch sind.
    Kennt ihr eine Möglichkeit das Spektrum zu einer spezifischen Farbe zu bestimmen( in diesem Fall die Farbe Grau)?

    Im Anhang findet sich ein Beispiel-Bild... Google Bild-Erkennung erkennt, dass es eine Straße repräsentieren soll:

    google.de/search?tbs=sbi:AMhZZ…TOHLcy60DptvU2eZxWA&hl=de


    Lieben Dank .
    Bilder
    • testRoad.png

      232,21 kB, 544×286, 105 mal angesehen
    Und Gott alleine weiß alles am allerbesten und besser.
    Was genau willst du erkennen? Ob es sich um eine Straße handelt, oder wo/wie diese verläuft? Ersteres ist ein Klassifizierungsproblem, letzteres ein klassisches CV-Problem.
    Zuallererst musst du dich fragen, was denn der Input sein wird: In welcher Perspektive sind die Bilder (Fotos?) aufgenommen, wie ist die Belichtung der Bilder (komplett gleichmäßig; gibt es Schatten, welche die Erkennung beeinflussen könnten; Tageszeit), können auf den Bildern Autos zu sehen sein, gibt es Kreuzungen, Kreisverkehre, et cetera.
    Danach musst du dir überlegen, was eine Straße denn ausmacht: Farben (Grautöne), Kontinuität, oft 2 oder mehr parallele Kanten, (Fahrbahnmarkierungen), usw.
    Damit kannst du dann anfangen, die einzelnen Aspekte als detektierbare Aspekte eines Bildes darzustellen: Die Farbe ist vielleicht noch einfach, gerade Straßen lassen sich noch mit geraden Linien erkennen, ...

    Vielleicht wäre ein guter Anfang, einen Algorithmus zu schreiben, welcher mögliche Straßenteile durch deren Farbe vom Hintergrund trennen kann - das ginge relativ einfach über die Farbe des Asphalts und ggf. eine Konturenerkennung zur Verbesserung des Ergebnisses.
    Übrigens ist eine gewisse Vorbearbeitung des Bildes praktisch immer notwendig: Ich würde versuchen, die Farben zu verbessern, sodass sie ein größeres Spektrum abdecken und sich die Straßen schön vom Hintergrund abheben. Dann würde ich das bild noch leicht blurren, damit Bildrauschen die Erkennung nicht beeinflusst.

    PS: Ich würde übrigens OpenCVSharp mit der CPP-Syntax EmguCV bevorzugen - das ist meiner Erfahrung nach zuverlässiger (läuft immer direkt ohne aufwendigen Setup-Prozess) und der Zugriff ist schön im OOP-Stil.
    Es gibt ja auch son neuen roten Asphalt, der zurzeit schon getestet wird, aber noch nicht so verbreitet ist. So einfach ist das nicht. Außerdem kann es ja auch sein, wenn du jetzt eine Wiese mit lauter gelb-braunen Blumen hast und Sandwege erkennen willst :P Übrigens habe ich noch nie von EmguCV gehört. Ist das ein Programm was du schreiben willst oder aus dem du Infos abrufst? Und zu welchem Zweck willst du überhaupt Straßen "einlesen"?

    Grüße, ExteNesia.de
    Es ist mir schnuppe, ob es roten Asphalt gibt... rot sind bei Straßen nicht allzu konventionell.

    ExteNesia.de schrieb:

    Ist das ein Programm was du schreiben willst oder aus dem du Infos abrufst?


    Hä, was? EmguCV ist ein Wrapper.

    Und zu welchem Zweck willst du überhaupt Straßen "einlesen

    'Gegeben sei eine Karte (Google Maps), mit N -Straßen und ein Luftbild, orthogonal .

    Die Aufgabe: Determinieren, welche Karte zum Luftbild similar ist.
    Ansatz:

    - Straße extrahieren ( einziges Problem)
    - Korrektion ( Single-Pixels entfernen, "Höhlen" eliminieren)
    - Thinning
    - Vektorisieren und charakterisieren
    - Ergebnisse parallelisieren.


    Exemplarisch:
    Ein Kreisverkehr... wird dieses vektorisiert, müsste theoretisch aus der Vektor-Addition (Linearkombination)ein Nullvektor resultieren ( ist ja geschlossen),(siehe Vektoren einer Ebene).


    Das war quasi meine Idee.
    Ich habe bereits BruteForce Matching versucht, das Ergebnis war expressis verbis kein bruteforcen... und EigenObjektTracking... für's letztere benötigt man einfach viel zu viele Bilder und kleinste Divergenzen führten dazu, dass das Luftbild keiner Karte zugeordnet werden konnte...

    Wie würdet ihr vorgehen?
    Und Gott alleine weiß alles am allerbesten und besser.