修正鱼眼相机径向失真和图像边缘的模糊效果

信息处理 图像处理 计算机视觉 opencv 相机 相机校准
2022-01-29 00:31:40

关于这个主题有很多问题,但我试图从这些问题中获得更清晰的画面。

我正在尝试校准鱼眼相机,并且正在使用 OpenCV omnidir类函数来查找相机内在函数。

我得到了公平的结果。问题是 ,

在图像边缘,对象被拉伸,并且我在边缘丢失了一些信息。

这是我的输入图像:

在此处输入图像描述

这是我的输出图像: 在此处输入图像描述

如您所见,我在边缘(左右)丢失了一些信息,并且图像开始在边缘拉伸。

我的问题如下:

  1. 如何在边缘的校正图像中包含更多 FOV,信息丢失?

  2. 如何减少边缘的模糊效果?

  3. 在校准过程中,我是否应该覆盖相机的整个 FOV,以便角落也出现在边缘?

  4. 校准时显示模式的正确方法是什么?

  5. 有没有提供鱼眼校准的在线工具箱。

这是我用于校准和测试的代码片段

//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);
0个回答
没有发现任何回复~