OpenCV-Fischaugen-Kalibrierung schneidet zu viel des resultierenden Bildes ab

Ich benutze OpenCV, um Bilder zu kalibrieren, die mit Kameras mit Fischaugenobjektiven aufgenommen wurden.

Die Funktionen, die ich benutze, sind:

findChessboardCorners(...);, um die Ecken des Kalibrierungsmusters zu finden.cornerSubPix(...);, um die gefundenen Ecken zu verfeinern.fisheye::calibrate(...);, um die Kameramatrix und die Verzerrungskoeffizienten zu kalibrieren.fisheye::undistortImage(...);, um die Bildverzerrung mithilfe der Kamerainformationen, die bei der Kalibrierung erhalten wurden, aufzuheben.

Während das resultierende Bild gut aussieht (gerade Linien usw.), besteht mein Problem darin, dass die Funktion zu viel Bild wegschneidet.

Dies ist ein echtes Problem, da ich vier Kameras mit einem 90-Grad-Abstand zwischen ihnen verwende. Wenn so viele Seiten abgeschnitten sind, gibt es keinen Überlappungsbereich zwischen ihnen, der zum Zusammenfügen der Bilder erforderlich ist.

Ich habe mit @ gesucfisheye::estimateNewCameraMatrixForUndistortRectify(...) aber ich konnte es nicht schaffen, gute Ergebnisse zu erzielen, da ich nicht weiß, was ich als @ eintragen soR input, als Rotationsvektorausgabe vonfisheye::calibrate ist 3xN (wobei N die Anzahl der Kalibrierungsbilder ist) undfisheye::estimateNewCameraMatrixForUndistortRectify benötigt ein 1x3 oder 3x3.

Die folgenden Bilder zeigen ein Bild meines unverzerrten Ergebnisses und ein Beispiel für das Ergebnis, das ich im Idealfall haben möchte.

Undistortion:

Beispiel für gesuchtes Ergebnis:

Antworten auf die Frage(8)

Ihre Antwort auf die Frage