【问题标题】:Single Camera Calibration with OpenCV - Problems generating a "Complete" undistorted image使用 OpenCV 进行单相机校准 - 生成“完整”未失真图像的问题
【发布时间】:2012-10-16 23:04:57
【问题描述】:

我一直在尝试使用 OpenCV 的相机校准套件对来自鱼眼相机(如果相关,我使用的是 GoPro)的图像进行不失真处理。我已经完成了大部分流程,并且可以生成不失真的图像。但是,在使用重映射时,未失真的图像是“有效的矩形” - 换句话说,返回的图像是原始图像的裁剪版本,以避免未失真帧中固有的弯曲黑色边框。

我尝试使用 getOptimalNewCameraMatrix() 来纠正这种情况,但结果非常奇怪。我希望你们中的某个人能对我的问题有所了解。

我目前校准相机如下:

double error = calibrateCamera(worldPoints, sensorPoints, process_size, cameraMatrix, distCoeffs, rvecs, tvecs, calibration_flags);

它会生成我需要的 cameraMatrix。这部分有效(我认为),因为如果我通过 initUndistortRectifyMap() 然后 remap() 运行它,我会得到一个有效的图像。但是,我正在寻找完整的图像,所以接下来我会尝试按如下方式更正我的 cameraMatrix:

int alpha = 1;
cameraMatrix_corr = getOptimalNewCameraMatrix(cameraMatrix, distCoeffs, image.size(), alpha);

然后,我为重映射生成 X 和 Y 映射,如下所示(这是直接从 OpenCV 2.0 Cookbook 借来的,所以我相当有信心它也可以工作)。

initUndistortRectifyMap(
    cameraMatrix_corr,  // computed camera matrix
    distCoeffs, // computed distortion matrix
    Mat(), // optional rectification (none)
    Mat(), // camera matrix to generate undistorted
    image.size(),  // size of undistorted
    CV_32FC1,      // type of output map
    map1, map2);   // the x and y mapping functions

最后,我重新映射我的图像!

// Apply mapping functions
remap(image, undistorted, map1, map2, INTER_LINEAR);

这是我到目前为止的结果。如果我使用 alpha = 0(矩阵没有变化),我会得到合理(尽管被裁剪)的结果。

如果我使用 alpha = 1,我认为它应该给我一个图像,每个原始像素都映射到新图像,我得到以下信息:

所以,我的问题是:我做错了什么,为什么我不能从校准中获得未经裁剪、不失真的图像?

感谢大家对我的容忍,这是我在这里的第一个问题,但我尽量做到完整。如果我搞砸了,请告诉我!

【问题讨论】:

    标签: c++ opencv


    【解决方案1】:

    我相信校正相机矩阵不是为了不失真而应该做的事情,因为这会给你一个相机矩阵,就好像没有失真一样。

    如果您不想“丢失”图像信息,最好将地图在 x 和 y 方向上移动并将图像映射到更大的图像。这是因为在不失真时,角落的像素会向外移动以矫正图像。

    请记住,鱼眼镜头具有很高的失真,即使使用正确的代码也可能无法完全校正。

    【讨论】:

    • 我遇到了类似的问题,优化函数给出的感兴趣区域太小了。根据您的“纠正相机矩阵不是为了不失真而应该做的事情”的建议,我尝试在dst = cv2.undistort(img, camera_matrix, dist_coefs, None, newcameramtx) 中删除newcameramtx 参数,这为我解决了这个问题。谢谢!
    猜你喜欢
    • 2014-03-29
    • 1970-01-01
    • 2016-02-05
    • 2013-02-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-23
    • 1970-01-01
    相关资源
    最近更新 更多