Ich arbeite an einem OpenCV-Projekt, und ich bin auf Kalibrierung. Ich glaube, ich habe den Code korrekt implementiert; Allerdings bekomme ich unterschiedliche Werte für die Kameramatrix, manchmal sehr unterschiedlich. Nach 6 Wiederholungen des 10-maligen Anzeigens des Kalibrierungsmusters bekomme ich (die Dezimalstellen sind zur besseren Übersicht abgeschnitten) :
%Vor%Diese Werte unterscheiden sich durch nicht akzeptable Werte. Ich muss zu einem anständigen Grad der Genauigkeit wissen, was die gegebenen Parameter sind. Was ist typischerweise die Ursache für diese großen Ungenauigkeiten und wie kann ich die Korrektheit einer gegebenen Matrix bewerten? Es scheint von der Vielfalt der Abstände und Orientierungen abhängig zu sein, von denen ich das Muster zeige, aber ich kann das Muster nicht verstehen.
Abhängig von der Kamera / Objektiv und der Genauigkeit, die Sie benötigen, aber Sie benötigen wahrscheinlich mehr als 10 Positionen und Sie müssen einen größeren Bereich von Blickwinkeln abdecken.
Ich nehme vom 800x600 an, dass dies eine Webcam mit einem einfachen Weitwinkelobjektiv mit vielen Verzerrungen ist. Ich würde sagen, dass Sie 6-8 Positionen / Umdrehungen des Ziels in jedem von 3-4 verschiedenen Winkeln zur Kamera benötigen. Sie müssen außerdem sicherstellen, dass das Ziel und die Kamera fixiert sind und sich während eines Bildes nicht bewegen. Wenn Sie davon ausgehen, dass die Kamera über eine einfache Autogain-Funktion verfügt, sollten Sie sicherstellen, dass das Ziel sehr gut ausgeleuchtet ist, so dass eine kurze Verschlusszeit und eine geringe Verstärkung verwendet werden.
Ein Problem mit der von openCV verwendeten Technik ist, dass sie alle Ecken / Punkte auf dem Ziel sehen muss, damit ein Rahmen in der Lösung identifiziert und verwendet werden kann - es ist also ziemlich schwierig, Punkte in der Nähe der Ecken des Bildes zu erhalten . Sie sollten die Daten auf die Anzahl der Bilder überprüfen, die tatsächlich bei der Kalibrierung verwendet werden - vielleicht findet sie nur alle Punkte auf einigen der 10 Bilder und basiert die Lösung auf dieser Untergruppe.
Es ist auch wichtig, nicht nur senkrecht zur Kamera liegende Muster aufzunehmen, sondern diese zu drehen. Um die Ergebnisqualität zu verbessern, können Sie auch die Position der erkannten Ecken überprüfen, die Bilder entfernen, bei denen einige Ecken nicht korrekt erkannt wurden, und den Algorithmus erneut ausführen.
Ich weiß nicht, welche Kamera Sie verwenden, aber da die Kameras stark verzerrt und nicht scharf genug sind, können die Ecken schwer richtig erkannt werden. Die OpenCV-Kalibrierung kann auch mit einem Kreismuster realisiert werden, das in diesem Fall bessere Ergebnisse liefert.
Aus meiner Erfahrung sollten Sie mit unverzerrten Bildern mit der von openCV bereitgestellten Funktion undistort () arbeiten.
Das bedeutet, dass Sie die Kalibrierung zweimal durchführen, um die Linsenkoeffizienten zu bestimmen. Dann deaktiviere jeden Schachbrettrahmen im zweiten Lauf. Die Brennweiten fx und fy werden mit unverzerrten Kalibrierungsrahmen genauer.
Der richtige Winkel liegt laut Zhengyou Zhangs Papier unter 45 Grad, und es müssen mehr als 6 Bilder sein, Sie sollten besser 20 für sie nehmen. Außerdem müssen Sie die Lichtbalance, die Intensität beachten.
Tags und Links c++ opencv camera-calibration