- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我在校准两个摄像头时遇到问题:第一个是 rgb,第二个是红外线。它们具有不同的分辨率(我调整大小并裁剪了更大的图像)、焦距等...
例子:
RGB 1920x1080
红外线 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 相机,我首先调整图像大小并裁剪图像以匹配红外相机 (512x424) 的分辨率,然后进行校准。对于 RGB 相机,我得到 camera.yml,对于 IR 相机,我得到 camera_ir.yml。然后我尝试使用修改后的 stereo_calib.cpp 示例进行立体校准。在调用 stereoCalibrate 之前,我从文件中读取相机的 camera_matrix 和 distortion_coefficients 参数,并将这些矩阵放入 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
);
最佳答案
在 Dropbox 上看不到你的图片(为什么不把你的图片放到 stack exchange 上?),但似乎 bundle adjustment 没有收敛。您应该尝试以下操作:
使用 cv::calibrateCamera
( link ) 独立校准每个相机,并获取每个相机的相机矩阵 K 和畸变系数 D。
使用 cv::stereoCalibrate
( link ) 和估计的 K 和 D 以及标志 CV_CALIB_USE_INTRINSIC_GUESS
和 CV_CALIB_FIX_INTRINSIC
已启用。
这样做会将相机矩阵和畸变系数的估计与旋转和平移的估计解耦,这应该会大大改善残差。
关于opencv - 不同相机(RGB 和红外线)的 stereoCalibrate,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22877869/
我正在使用 stereoCalibrate,而 termCriteria 会抛出错误 ' cv :: stereoCalibrate ' : can not convert parameter 13
我有两台分辨率不同的相机,但 stereoCalibrate 函数只有一个图像大小选项。 如果我理解正确的话,stereoCalibrate 会计算从 cam1 到 cam2 的刚性变换矩阵。如果这是
我注意到 opencv stereoCalibrate() 改变了相机矩阵中的焦距,即使我已经设置了适当的标志(即 CV_CALIB_FIX_FOCAL_LENGTH)。我在镜头上使用两个具有相同焦距
我在使用 OpenCV 计算立体声对的校正时遇到一些问题:stereoCalibrate 返回高均方根误差,我得到了错误的校正对。我尝试了我的整改程序和 opencv 提供的 stereo_calib
我有一个立体相机装置。我已经捕获了一个 chessboardPattern 序列(相同的序列,每次曝光两张照片)。我使用 cv2.calibrateCamera 对各个相机执行了单个相机校准。 我的问
我是 OpenCV 的新手,在 Python 上找不到 stereoCalibration 的正常教程。如果您有一些示例,请分享。 我对每个相机都进行了一次校准,然后遇到了下一个问题。左边一个: 正确
我在校准两个摄像头时遇到问题:第一个是 rgb,第二个是红外线。它们具有不同的分辨率(我调整大小并裁剪了更大的图像)、焦距等... 例子: RGB 1920x1080 红外线 512x424 如何相互
大家好,我一直在使用 Python 和 OpenCV 深入研究计算机视觉,并尝试校准我购买的两台相机,以便进行一些 3D 立体重建,但我遇到了一些问题。 我主要关注的是这个tutorial为了分别校准
我已经校准了一对相机,我有一个循环,可以跟踪人腿上的标记并保存他们的位置。现在怎么办? 我是否必须在保存像素坐标之前cv::undistort 图像?在我尝试将这些 2D 坐标对转换为 3D 之前,还
我会尽量让这个问题具体化。 在 opencv 3.0 中调用 stereoCalibrate() 时,出现如下错误信息: Assertion failed 0 && nimages == image
我正在使用 openCV 的 calibrateCamera() 来检索 distCoeffs,我想将其用作 stereoCalibrate() 的输入。但是调用 StereoCalibrate()
我似乎无法确定在哪里可以找到 stereoCalibrate() 方法的输入数组。 opencv 文档将其描述为“校准模式点向量的向量”,这似乎必须来自对象检测校准。然而,我已经为我的相机完成了 op
我正在使用Python 2.7和OpenCV 3.3进行立体摄像机校准。我使用的代码是(我从Stereo Calibration Opencv Python and Disparity Map获得):
我是一名优秀的程序员,十分优秀!