Objekterkennung in einem Bild

  • VB.NET

Es gibt 28 Antworten in diesem Thema. Der letzte Beitrag () ist von RodFromGermany.

    Hey,

    ich würde das Ursprungsbild erst einmal in ein Graustufen-Bild umwandeln, dessen alle Farbkanäle den Farbwert des Pixels im HSV-Farbraum enthalten und erst auf dieses dann den Sobel-Filter anwenden...

    MfG
    Turtle10
    In HSV Farbraum hab ich das Bild schon konvertiert. nur kann ich ja diesen nicht direkt anzeigen lassen (zumindestens weis ich nicht wie) daher hab ich dann das bearbeitet Bild wieder in RGB Format umkonvertiert.



    Einen Algorithmus zum Finden von Kanten habe ich so programmiert:
    1. Umwandlung in ein Graustufenbild (@Turtle10)
    2. Diskriminierung -> Umwandlung in ein reines schwarz-weiß-Bild, wobei die Lage der Schwelle vorgegeben werden kann
    3. Laplace-Filter
    Das Ergebnis ist eine 1-Pixel breite Kante

    hmm 1-Pixel breite Kante? das wär echt genial^^ das muss ich mal ausprobieren. aber was meinst du mit Umwandlung in ein reines schwarz weiß bild und mit Schwelle?

    Den Laplace Filter hab ich auch schon ausprobiert. allerdings erkennt er dann wieder zu viel. also ein einfacher Schatten erkennt er dann schon als Kante. und das ist auch nichts richtiges.


    und @ Lightsource: ja das stimmt wohl mit deiner Theorie. dennoch reicht es mir erstmal aus nur Kanten zu erkennen. Wenn das dann richtig hinhaut kann ich das ja noch mit Farben unterscheiden. Für mich reicht erstmal das mit den Kanten aus. ist mir schon anspruchsvoll genug momentan :D

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „VB-Robo“ ()

    aber was meinst du mit Umwandlung in ein reines schwarz weiß bild und mit Schwelle?

    Bei Graustufen mit dem Schwellwert z.B. 128 wird bei den RGB Werten sozusagen gerundet(hier Graustufenbild):
    R = 127->0
    G = 127->0
    B = 127->0

    R = 130 ->255
    G = 130 ->255
    B = 130 ->255
    Ich wollte auch mal ne total überflüssige Signatur:
    ---Leer---
    Wenn Du Bildverarbeitung lernen willst, fang einfach mit einem Graustufenbild an.
    Beginne mit Kontrastspreizung, d.h.
    0 1 2 3 4 5 .... 250 251 252 253 254 255
    sind die Werte des Bildes.
    Lass die Anzeige so aussehen, dass folgende Transformation durchgfeführt wird:

    Quellcode

    1. Bild Anzeige
    2. 0-16 -> 0
    3. 17 -> 1
    4. ... (hier lineare Interpolation)
    5. 220 -> 254
    6. 221-255 -> 255
    (2 verkoppelte Slider: Minimum und Maximum)
    dann zieh die Grenzen einfach zusammen:

    Quellcode

    1. 0-123 -> 0
    2. 124-255 -> 255
    Das wäre die Diskriminierung.
    ------------------------
    Natürlich ist es nützulich/notwendig, das Bild von Ausreißern zu befreien (Medianfilter)
    und nach der Diskriminierung ist es ggf. sinnvoll, Objekte zu löschen, die weniger als n Pixel enthalten.
    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!
    ah okey. jetzt verstehe ich was ihr mit Diskriminierung meint. das klingt ja auch ganz einfach. Aber damit müsste ich dann einen Schwellwert festlegen. und da ich ja das ganze später einmal im Outdoorbereich einsetzen will und da alles immer anderst ist müsste ich ständig den Schwellwert anpassen. Je nach Lichtsituation und so eben.
    Ich probiere es zwar mal aus aber denke dass es für mich nicht sehr sinnvoll sein wird.
    Sieh Dir mal an, was ein Histogramm ist. :thumbsup:
    Wende das auf Deine Bilder an und überlege, ob es möglich ist, einen Automaten für die Diskriminierung zu entwerfen.
    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!
    also ich hab das mit der Diskriminierung ausprobiert. das funktioniert echt sau gut :thumbsup:
    man muss halt nur den Schwellwert individuell einstellen sobald man die kamera dreht.

    ich werd mich dann die nächsten tage mit dem Histogramm und so beschäftigen. mal sehen ob ich das "automatisiert" bekomm.

    Ich hab mal fix in Deinem Farbbild folgende Kanten gefunden (ist durch jpg etwas vermatscht):
    Bilder
    • Test.jpg

      7,32 kB, 326×245, 146 mal angesehen
    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!
    Genau so, wie ich es oben beschrieben habe. Die Schwelle hab ich von Hand nach Deinem Vorbild gesetzt.
    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!