Problem bei Farbfilterung und anschließender Objekterkennung

  • VB.NET

Es gibt 5 Antworten in diesem Thema. Der letzte Beitrag () ist von ~blaze~.

    Problem bei Farbfilterung und anschließender Objekterkennung

    Hallo,


    Habe mir folgenden Code zusammengestellt. Ich möchte damit meine Webcam aufnahme mit Aforge filtern und ein Farbiges Objetzt erkennen.


    VB.NET-Quellcode

    1. Dim IMAGEN As Bitmap = DirectCast(eventArgs.Frame.Clone(), Bitmap)
    2. Dim IMAGEN2 As Bitmap = DirectCast(eventArgs.Frame.Clone(), Bitmap)
    3. NIVEL = DETECTOR.ProcessFrame(IMAGEN)
    4. PictureBox1.Image = IMAGEN
    5. Dim filterss As New EuclideanColorFiltering
    6. filterss.CenterColor = New RGB(255, 30, 30)
    7. ' apply the filter
    8. Dim objectImage As Bitmap = filterss.Apply(IMAGEN2)
    9. Dim Bloob As New BlobCounter
    10. Bloob.MinWidth = 10
    11. Bloob.MinHeight = 10
    12. Bloob.FilterBlobs = True
    13. Bloob.ProcessImage(objectImage)
    14. Dim rects As Rectangle() = Bloob.GetObjectsRectangles
    15. For Each recs As Rectangle In rects
    16. If rects.Length > 0 Then
    17. For Each objectRect As Rectangle In rects
    18. Dim gs As Graphics = Graphics.FromImage(objectImage)
    19. Using pen As New Pen(Color.FromArgb(160, 255, 160), 5)
    20. gs.DrawRectangle(pen, objectRect)
    21. End Using
    22. gs.Dispose()
    23. Next
    24. End If
    25. Next
    26. Try
    27. Dim yhöhe As Integer = rects(0).Width
    28. Dim xweite As Integer = rects(0).Height
    29. Dim yrec As Integer = rects(0).Y
    30. Dim xrec As Integer = rects(0).X
    31. mousex = xweite / 2 + xrec
    32. mousey = yhöhe / 2 - yrec
    33. Catch
    34. End Try
    35. PictureBox2.Image = objectImage



    Meine Frage ist jetzt die Werte die bei Colorfilter.red usw stehen sicher nicht alles außer Rot filtern will will das nur noch die Farbe Rot zu sehen ist.

    Die Zweite Frage ist habe ich das so richtig gemacht weil wenn ich das Programm so debugge sehe ich genau das selbe bild wie in der Picturebox1 und das Rechteck das um das Objekt sein sollte ist nur am linke oberen Rand der PB zu sehen.

    Bitte um hilfe


    EDIT: Habe das Problem gelöst! Bearbeite den Obrigen Code damit dieser Stimmt

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „johannes 123456“ ()

    @johannes 123456 Wenn Du Farben erkennen willst, musst Du den RGB-Farbraum verlassen.
    Stell Dir vor, Du hast ein knallrotes Objekt und das Sonnenlicht schwindet.
    So findest Du alles, was rot ist oder ales, was Hellrot bis Fasthellrot ist.
    Das geht schief, wenn ein Auto vorbeikommt und das ganze mit seinem scheinwerfer anstrahlt.
    Also:
    Transformiere Dein RGB-Bild in den HSV-Farbraum und arbeite auf der H-Komponente.
    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!
    Hi
    soweit ich das sehe, ist das Problem durch RodFromGermanys Vorschlag bei weitem noch nicht behoben. Das lässt sich nicht zu 100% lösen, es gibt wohl immer "Unsicherheiten". Soweit ich weiß, ist das auch Gegenstand der aktuelleren KI-Forschung oder -Realisation, weiches von beidem weiß ich jetzt nicht mehr. Es ging dabei darum, dass einer KI beigebracht wird, wie Bananen aussehen, um entsprechend Bananen korrekt zu erkennen. Das ist wohl ein komplexeres Problem, als effektiv rote Objekte zu erkennen, aber es ist meines Erachtens nur lösbar, wenn es sich vermutlich um einen Gegenstand handelt, der typischerweise rot ist und zuvor das farbliche Umfeld abzusichern.
    Problematisch ist z.B., wenn man einen roten Gegenstand direkt vor die Fläche hält. Es kann dann kein Farbabgleich mit der Umgebung durchführt werden. Zudem kann es auch Lichtquellen, wie Bildschirme, etc. geben.
    Also, wie gesagt, das ist kein einfaches Problem.

    Viele Grüße
    ~blaze~
    @~blaze~ Jou.
    @johannes 123456 Mir ist noch folgendes eingefallen: Wenn in der industriellen Massenproduktion die Farbe von wer weiß was überwacht wird, wird sorgfältig darauf geachtet, dass nur Eigenlicht nicht aber Fremdlicht auf das Testobjekt strahlt, so dass die Farbe eines (Massen-)Körpers mit mit der angelernten Farbe eines Kalibrierkörpers verglichen werden kann. Das ist ein etwas höherer mechanischer Aufwand, bedarf aber keiner KI.
    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!
    Ja genau, das geht oder, dass man einen Referenzkörper im Bild haben muss, aus dem die Bestrahlung herausgerechnet wird und der vom Programm relativ sicher erkannt wird.
    Beide sind halt mit Aufwand seitens des Benutzers verbunden. Die KI muss aber dafür halt erst mal lernen und es ist schwer, zu beweisen, dass das, was sie erkennt auch richtig ist.

    Viele Grüße
    ~blaze~