关于这个主题有很多问题,但我试图从这些问题中获得更清晰的画面。
我正在尝试校准鱼眼相机,并且正在使用 OpenCV omnidir类函数来查找相机内在函数。
我得到了公平的结果。问题是 ,
在图像边缘,对象被拉伸,并且我在边缘丢失了一些信息。
这是我的输入图像:
如您所见,我在边缘(左右)丢失了一些信息,并且图像开始在边缘拉伸。
我的问题如下:
如何在边缘的校正图像中包含更多 FOV,信息丢失?
如何减少边缘的模糊效果?
在校准过程中,我是否应该覆盖相机的整个 FOV,以便角落也出现在边缘?
校准时显示模式的正确方法是什么?
有没有提供鱼眼校准的在线工具箱。
这是我用于校准和测试的代码片段
//Calibration
Mat K, xi, D, idx;
int flags=0|omnidir::CALIB_FIX_SKEW | omnidir::CALIB_FIX_K1 |
omnidir::CALIB_FIX_K2;
TermCriteria critia(cv::TermCriteria::COUNT + cv::TermCriteria::EPS, 200,
0.0001);
vector<cv::Mat> rvecs, tvecs;
double rms = cv::omnidir::calibrate(obj_points, image_points, image_size, K,
xi, D, rvecs, tvecs, flags, critia, idx);
//Testing
Mat R = Mat::eye(3, 3, CV_32F);
Mat Mapx, Mapy;
Mat New_camera_mat(3,3,CV_32F);
//New_camera_mat tries to get entire FOV,but it is losing some information
at edges
New_camera_mat.at<float>(0, 0) = 100; New_camera_mat.at<float>(0, 1) = 0;
New_camera_mat.at<float>(0, 2) = 1280/2;
New_camera_mat.at<float>(1, 0) = 0; New_camera_mat.at<float>(1, 1) = 100;
New_camera_mat.at<float>(1, 2) = 720/2 ;
New_camera_mat.at<float>(2, 0) = 0; New_camera_mat.at<float>(2, 1) = 0;
New_camera_mat.at<float>(2, 2) = 1;
cv::omnidir::initUndistortRectifyMap(K, D, xi_Right, R, New_camera_mat,
image_size, CV_32F, Mapx, Mapy, cv::omnidir::RECTIFY_PERSPECTIVE);
remap(distorted_frame, undistorted_out_frame, Mapx, Mapy, INTER_CUBIC);