OpenCV在未知相机内参数情况下的立体图像矫正方法
来源:互联网 发布:《算法竞赛入门经典》 编辑:程序博客网 时间:2024/05/01 02:46
(1)提取特征点并匹配,参考http://blog.sina.com.cn/s/blog_4298002e01013w4z.html
(2)计算基本矩阵F,参考http://blog.sina.com.cn/s/blog_4298002e01013w9a.html
(3)极线矫正。
//! computes the rectification transformation for an uncalibrated stereo camera (zero distortion is assumed)
CV_EXPORTS_W bool stereoRectifyUncalibrate
该函数输入参数为两幅图像的匹配特征点,基本矩阵F以及图像的尺寸,返回的参数是两幅图像各自对应的单应变换矩阵H1和H2。只需要对两幅图像按照H1和H2做单应变换,即可得到矫正后图像。假设I为图像,变换如下:
I_recty = H*I
// 假设前面我们已经得到两幅图像的匹配特征点,并计算出了基本矩阵F,同时得到了匹配特征点的inlier
// Mat m_matLeftImage;
//
// vector<Point2f> m_LeftInlier;
//
// Mat m_Fundamental;
// 计算图像矫正的单应变换矩阵
Mat m_LeftH;
Mat m_RightH;
stereoRectifyUncalibrate
// 任意指定一个内参数矩阵K,不会影响计算结果,此处设为单位阵。
Mat K = Mat::eye(3, 3, CV_64F); // 注意一定是double类型
Mat invK = K.inv(DECOMP_SVD);
Mat LeftR = invK*m_LeftH*K;
Mat RightR = invK*m_RightH*K;
Mat LeftMap1, LeftMap2;
Mat RightMap1, RightMap2;
Mat Distort;
Size UndistSize(m_matLeftImage.cols, m_matLeftImage.rows);
// 计算左右两幅图像的映射矩阵
initUndistortRectifyMap(K, Distort, LeftR, K, UndistSize, CV_32FC1, LeftMap1, LeftMap2);
initUndistortRectifyMap(K, Distort, RightR, K, UndistSize, CV_32FC1, RightMap1, RightMap2);
// 把原始图像投影到新图像上,得到矫正图像
Mat m_LeftRectyImage;
Mat m_RightRectyImage;
remap(m_matLeftImage, m_LeftRectyImage, LeftMap1, LeftMap2, INTER_LINEAR);
remap(m_matRightImage, m_RightRectyImage, RightMap1, RightMap2, INTER_LINEAR);
// 显示结果
cvNamedWindow( "left image", 1);
cvShowImage("left image", &(IplImage(m_LeftRectyImage)));
cvNamedWindow( "right image", 1);
cvShowImage("right image", &(IplImage(m_RightRectyImage)));
cvWaitKey( 0 );
cvDestroyWindow( "left image" );
cvDestroyWindow( "right image" );
程序计算的结果如下图所示:
原始图像对:
极线矫正后的图像:
SGBM算法:
GC算法:
- OpenCV在未知相机内参数情况下的立体图像矫正方法
- OpenCV在未知相机内参数情况下的立体图像矫正方法及注意事项
- OpenCV在未知相机内参数情况…
- OpenCV文本图像的旋转矫正
- opencv 相机标定与矫正
- 基于OpenCv的摄像机立体标定和立体矫正的源代码
- OpenCV3.1.0的calibrateCamera()函数计算相机内参数
- opencv打开多种情况下的图像
- css在未知高度的情况下实现垂直居中
- opencv 图像畸变矫正加速、透视变换加速方法总结
- opencv 图像畸变矫正加速、透视变换加速方法总结
- 由相机矩阵计算相机内参方法
- 根据相机内参数及畸变系数给图像去畸变
- 张正友相机标定Opencv实现以及标定流程&&标定结果评价&&图像矫正流程解析
- 图像标定 求相机内参外参
- 关于opencv在代码正确的情况下,无法显示图像的问题。
- 相机的标定+畸变矫正
- 如何根据相机的参数知道摄像机的内参数矩阵
- Spark Streaming时间间隔性能测试
- 微博粉丝迅速增粉之--互粉大厅
- hi3516a之h264
- 邮件群发软件的随机文本行变量
- 优先队列的使用方法
- OpenCV在未知相机内参数情况下的立体图像矫正方法
- Qt自适应大小显示图片,添加菜单
- POJ Mayor's posters 线段树
- tair分布式缓存
- 南邮 OJ 1227 乘法表问题
- poj1065 贪心
- queue
- Java基础知识(下)
- vs 快捷键盘