[C#][OpenCV][EmguCV][Stereo] Fehler bei StereoCalibrate
Verfasst: 07.12.2010, 10:58
Code: Alles auswählen
//Emgu.CV.IntrinsicCameraParameters intParams = new Emgu.CV.IntrinsicCameraParameters();
Emgu.CV.IntrinsicCameraParameters intParams1 = new Emgu.CV.IntrinsicCameraParameters();
Emgu.CV.IntrinsicCameraParameters intParams2 = new Emgu.CV.IntrinsicCameraParameters();
Emgu.CV.ExtrinsicCameraParameters extParams;
Emgu.CV.ExtrinsicCameraParameters[] extP;
Emgu.CV.Matrix<double> found,ess;
// Eine Kamera aber welche?
//Emgu.CV.CameraCalibration.CalibrateCamera(worldpoints, found_points_right.ToArray(), BmpRight.Size, intParams,
// Emgu.CV.CvEnum.CALIB_TYPE.CV_CALIB_FIX_PRINCIPAL_POINT, out extP);
// StereoCalibrate: Beide Kameras(?)
Emgu.CV.CameraCalibration.StereoCalibrate(worldpoints, found_points_left.ToArray(), found_points_right.ToArray(),
intParams1, intParams2, BmpRight.Size, Emgu.CV.CvEnum.CALIB_TYPE.DEFAULT,
new MCvTermCriteria(100, 0.001), out extParams, out found, out ess);
//IntrinsicCameraParameters.Undistor -> OpenCV: Ar.size() == Size(3,3) || Ar.size() == Size(4, 3)
//BmpLeft= intParams.Undistort<Bgr, byte>(new Emgu.CV.Image<Bgr, byte>(BmpLeft)).ToBitmap(); // ein versuch
BmpLeft = intParams1.Undistort<Bgr, byte>(new Emgu.CV.Image<Bgr, byte>(BmpLeft)).ToBitmap();
BmpRight= intParams2.Undistort<Bgr, byte>(new Emgu.CV.Image<Bgr,byte>(BmpRight)).ToBitmap();
Ich versuche, mit Stereokameras, eine Tiefenmessung zu realisieren, aber auf Grund von Verzerrungen ist das momentane Ergebniss nicht ganz "Optimal". Deshalb wollte ich die Kameras kalibieren und die StereoCalibrate Methode verwenden, aber nach dem ich die IntrinsicCameraParameters.Undistort Methode aufrufe kommt es zu einer Exception "OpenCV: Ar.size() == Size(3,3) || Ar.size() == Size(4, 3)"
Was man auch verstehen kann, denn in den IntrinsicCameraParameters gibt es nur ein {double[5, 1]} Array.
Leider ist die Methode "CameraCalibration.Undistort2<Bgr, byte>(imageRaw, intParams);" veraltet und bereits in der aktuellen Version entfernt worden.
Aus der Dokumentation: "Will be removed in the next version, use IntrinsicCameraParameters.Undistor function instead"
Was ich auch versucht habe, hierzu der Code oben.
Wie kann ich nun die Kalibrationsdaten nutzen? Gibt es hierzu ein funktionierendes Tutorial mit der aktuellen Version?
Oder hat dies schon mal jemand zum laufen bekommen?
Danke im Vorraus,
TheRealBlack