3

2 つのカメラのキャリブレーションに問題があります。1 つ目は RGB で、2 つ目は赤外線です。解像度が異なります(画像のサイズを変更してトリミングしました)、焦点距離など...

例:

RGB 1920x1080RGB 1920x1080

赤外線 512x424赤外線 512x424

それらを互いに調整する方法は?stereoCalibrate でどのパラメータを使用する必要がありますか? デフォルトのサンプル stereo_calib.cpp は非常に大きなエラーを生成します。このようなもの: https://www.dropbox.com/s/x57rrzp1ejm3cac/%D0%A1%D0%BA%D1%80%D0%B8%D0%BD%D1%88%D0%BE%D1%82 %202014-04-05%2012.54.17.png

RMS エラー = 4.1026 で完了

平均再投影誤差 = 10.2601

アップデート

私は、calibration.cpp の例を使用して、各カメラのキャリブレーション パラメーターを個別に生成しました。RGB カメラの場合、最初に画像のサイズを変更してトリミングし、解像度が IR カメラ (512x424) に一致するようにしてから、調整します。RGB カメラの場合は camera.yml を取得し、IR カメラの場合は camera_ir.yml を取得します。次に、変更した stereo_calib.cpp の例を使用してステレオ キャリブレーションを試みます。stereoCalibrate を呼び出す前に、ファイルからカメラの camera_matrix パラメーターと歪曲係数パラメーターを読み取り、これらのマトリックスを stereoCalibrate に入れます。

FileStorage rgbCamSettings("camera.yml", CV_STORAGE_READ);
Mat rgbCameraMatrix;
Mat rgbDistCoeffs;
rgbCamSettings["camera_matrix"] >> rgbCameraMatrix;
rgbCamSettings["distortion_coefficients"] >> rgbDistCoeffs;

FileStorage irCamSettings("camera_ir.yml", CV_STORAGE_READ);
Mat irCameraMatrix;
Mat irDistCoeffs;
irCamSettings["camera_matrix"] >> irCameraMatrix;
irCamSettings["distortion_coefficients"] >> irDistCoeffs;


Mat cameraMatrix[2], distCoeffs[2];
cameraMatrix[0] = rgbCameraMatrix;
cameraMatrix[1] = irCameraMatrix;
distCoeffs[0] = rgbDistCoeffs;
distCoeffs[1] = irDistCoeffs;

Mat R, T, E, F;



double rms = stereoCalibrate(objectPoints, imagePoints[0], imagePoints[1],
                cameraMatrix[0], distCoeffs[0],
                cameraMatrix[1], distCoeffs[1],
                imageSize, R, T, E, F,
                TermCriteria(CV_TERMCRIT_ITER+CV_TERMCRIT_EPS, 50, 1e-6),
                CV_CALIB_FIX_INTRINSIC +
                CV_CALIB_USE_INTRINSIC_GUESS
                );
4

1 に答える 1

4

Dropbox で画像が見られない (スタック エクスチェンジに画像を置いてみませんか?) が、バンドル調整が収束していないようです。次のことを試してください。

  1. cv::calibrateCamera(リンク)を使用して各カメラを個別に調整し、各カメラのカメラ行列 K と歪み係数 D を取得します。

  2. cv::stereoCalibrate( link ) を使用して、推定された K と D およびフラグCV_CALIB_USE_INTRINSIC_GUESSCV_CALIB_FIX_INTRINSIC有効にして、2 つのカメラ間の回転 R と平行移動 T を推定します。

そうすることで、カメラ行列と歪み係数の両方の推定が回転と平行移動の推定から分離され、残差が大幅に改善されます。

于 2014-04-07T06:22:23.047 に答える