Die OpenCV-Apriltag-Erkennung erkennt nur wenige MarkierungenPython

Python-Programme
Guest
 Die OpenCV-Apriltag-Erkennung erkennt nur wenige Markierungen

Post by Guest »

Ich verwende das Aruco-Modul von OpenCV in Python, um mein AprilTag-Kalibrierungsboard zu erkennen. Das Problem besteht darin, dass trotz eines recht guten Eingabebildes nur sehr wenige Markierungen erkannt werden. Nach allem, was ich versucht habe, scheint es, dass die AprilTag-Implementierung sehr empfindlich ist und ein nahezu ideales Bild erfordert, um zu funktionieren. Wenn dies wirklich der Fall ist, würde das den AprilTag-Detektor von OpenCV fast unbrauchbar machen.
Ich verwende:
  • Windows
  • Python 3.10.5
  • opencv-contrib-python 4.7.0.72
Zuerst ein minimaler Code Beispiel (im Anschluss an die Dokumentation des OpenCV Aruco-Moduls):

Code: Select all

import cv2

img = cv2.imread("april_board_drawing.png", cv2.IMREAD_COLOR)

aruco_dict = cv2.aruco.getPredefinedDictionary(cv2.aruco.DICT_APRILTAG_36h11)
arucoParams = cv2.aruco.DetectorParameters()
arucoParams.markerBorderBits = 2

(corners, ids, rejected) = cv2.aruco.detectMarkers(img, aruco_dict, parameters=arucoParams)

cv2.aruco.drawDetectedMarkers(img, corners, ids)

cv2.imshow('img', img)
cv2.waitKey(0)
cv2.destroyAllWindows()
Ich habe mit einem „idealen“ Bild begonnen, um zu testen, ob die Tags richtig erkannt werden und ob zwischen meiner Kalibrierungstafel und dem AprilTag-Wörterbuch keine Abweichungen bestehen. Das hat gut geklappt, alle Markierungen wurden erkannt.
ideal image.png
Ich habe dann mit einer Aufnahme von meiner Kamera fortgefahren. Und hier trat das Problem auf. Es wurden nur sehr wenige Marker erkannt (15/49). Ich habe dafür eines der besten Bilder ausgewählt, die ich gemacht habe. Nicht alle Markierungen sind perfekt, es gibt einige Blendungen, aber viele haben einen recht guten Kontrast und werden immer noch nicht erkannt. Ich habe mit den Erkennungsparametern herumgespielt, aber ohne Erfolg.
real image.png
Vielleicht ist die Verzerrung zu stark, dachte ich. Also entzerrte ich das Bild, entfernte so die Verzerrung und versuchte es erneut. Dies brachte mir einige zusätzliche Erkennungen (20/49), aber viele wurden immer noch nicht erkannt.
real image rectified.png
Ich hatte dann eine Schauen Sie sich die abgelehnten Markierungen an. Sie scheinen richtig abgelehnt zu werden. Kein Problem. Allerdings ist es seltsam, dass mehrere Markierungen fast korrekt sind. Ich bin mir nicht sicher, was da los ist. Ich habe die richtige Rahmengröße angegeben.
rejections.png
Andere Dinge, die ich versucht habe:
  • Größe ändern, Zuschneiden und Spiegeln des Eingabebildes
  • Graustufen- und Farbeingabe
  • alle aruco.DetectorParameters optimiert
Ich experimentiere nur ungern mit adaptiver Kontrastverstärkung, da ich erwarte, dass der Algorithmus mit dieser Bildqualität funktioniert. Sind meine Erwartungen zu hoch?
Die Geometrie der Kalibrierungstafel scheint kein Problem zu sein, da die Markierungen in der idealen Zeichnung korrekt erkannt werden, oder? Aufgrund der hohen Markierungsdichte und der Möglichkeit, an den Ecken eine Subpixel-Verfeinerung durchzuführen, bevorzuge ich die Verwendung dieser Art von Platine.
Irgendeine Idee, was hier falsch läuft? Wir freuen uns über jede Hilfe!
Hier sind alle Eingabebilder, die ich verwendet habe:
april_board_drawing.png
april_board_real.png
april_board_real_rectified.png

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post