bouguet算法极线校正出现视野丢失问题(求解答)
bouguet算法进行极线校正(校正后出现视野丢失)
求大佬解答!!!!
以下是代码,相机参数如下:
A1 = [4355.32892609972,0,0;
0,4354.46537146890,0;
955.684861556178,479.999753226413,1]';
ds1 = [-0.0888107877181613,0.0167240323406204,0.000708358963632538,-0.000902613153670540,2.62148611892628];
A2 =[4334.96419210503,0,0;
0,4334.63120935697,0;
1005.91027176123,545.069856217225,1]';
ds2 = [-0.107236918679592,2.07866887856303,-3.50342013663461e-05,0.000593026747207718,-37.0924506041808];
R = [0.938999448102872,0.0110266677770001,0.343741834899736;
-0.00533092118423861,0.999832467953517,-0.0175104912925634;
-0.343877329496769,0.0146098810301512,0.938900917900529]';
T = [93.5418416790751,0.131308782487841,12.2465638053458]';
Rvec = rotationMatrixToVector®;
matalb代码如下:
clc;clear all;
%数据加载
load(‘nice2.mat’);
L = rgb2gray(imread(‘left01.jpg’));
R = rgb2gray(imread(‘right02.jpg’));
W = 1920;
H = 1080;
IL_rect = zeros(H,W);
IR_rect = zeros(H,W);
%求解共同内参
A=(A1+A2)/2;
% fx 0 u0
% 0 fy v0
% 0 0 1%求解左右相机的校正矩阵 RL RR
R_half = rodrigues(Rvec/2);
R_nhalf = rodrigues(-Rvec/2);
e1 = T/norm(T);
e2 = cross([0 0 1]',T)/norm(cross(T,[0 0 1]'));
e3 = cross(e1,e2);
R_rect = [e1';e2';e3'];
RL = R_rect*R_half;
RR = R_rect*R_nhalf;%校正图像
for i= 1:Hfor j= 1:W%像素坐标系P_pix = [j;i;1];%像素坐标系转相机坐标系P_cam = inv(A) *P_pix;%左目校正P_cam_rect = RL'*P_cam;%齐次坐标归一化x_cam_rect = P_cam_rect(1)/P_cam_rect(3);y_cam_rect = P_cam_rect(2)/P_cam_rect(3);%畸变校正r2 = x_cam_rect^2+y_cam_rect^2;x_cam_rect_undistort =2*ds1(3)*x_cam_rect*y_cam_rect+...ds1(4)*(r2+2*x_cam_rect^2)+...x_cam_rect*(1+ds1(1)*r2^2+ds1(2)*r2^4+ds1(5)*r2^6);y_cam_rect_undistort =ds1(3)*(r2^2+2*y_cam_rect^2)+...2*ds1(4)*x_cam_rect*y_cam_rect+...y_cam_rect*(1+ds1(1)*r2^2+ds1(2)*r2^4+ds1(5)*r2^6);%转到像素坐标系x_pix_rect_undistort = x_cam_rect_undistort*A1(1,1)+A1(1,3);y_pix_rect_undistort = y_cam_rect_undistort*A1(2,2)+A1(2,3);%插值if(x_pix_rect_undistort>=1 &&x_pix_rect_undistort <=W &&...y_pix_rect_undistort>=1 &&y_pix_rect_undistort <=H)IL_rect(i,j) = L(round(y_pix_rect_undistort),round(x_pix_rect_undistort));endend
end%校正右目
for i= 1:H
for j= 1:W%像素坐标系P_pix = [j;i;1];%像素坐标系转相机坐标系P_cam = inv(A) *P_pix;%左目校正P_cam_rect = RR'*P_cam;%齐次坐标归一化x_cam_rect = P_cam_rect(1)/P_cam_rect(3);y_cam_rect = P_cam_rect(2)/P_cam_rect(3);%畸变校正r2 = x_cam_rect^2+y_cam_rect^2;x_cam_rect_undistort =2*ds2(3)*x_cam_rect*y_cam_rect+...ds2(4)*(r2+2*x_cam_rect^2)+...x_cam_rect*(1+ds2(1)*r2^2+ds2(2)*r2^4+ds2(5)*r2^6);y_cam_rect_undistort =ds2(3)*(r2^2+2*y_cam_rect^2)+...2*ds2(4)*x_cam_rect*y_cam_rect+...y_cam_rect*(1+ds2(1)*r2^2+ds2(2)*r2^4+ds2(5)*r2^6);%转到像素坐标系x_pix_rect_undistort = x_cam_rect_undistort*A2(1,1)+A2(1,3);y_pix_rect_undistort = y_cam_rect_undistort*A2(2,2)+A2(2,3);%插值if(x_pix_rect_undistort>=1 &&x_pix_rect_undistort <=W &&...y_pix_rect_undistort>=1 &&y_pix_rect_undistort <=H)IR_rect(i,j) = R(round(y_pix_rect_undistort),round(x_pix_rect_undistort));end
end
end
imshow(uint8([IL_rect IR_rect]))
两张棋盘格的图片
这是左相机:
这是右相机:
最后的校正结果是这样的:
右边相机视野丢失了,求大佬解答!!!!
bouguet算法极线校正出现视野丢失问题(求解答)相关推荐
- 立体视觉--双目相机立体校正(Bouguet算法)
双目相机立体校正(Bouguet算法) 在双目立体视觉的三维重建过程中,需要通过立体匹配算法来进行视差图的计算得到左右两幅图像的视差值,进而来计算深度来恢复场景的三维信息. 计算三维场景中目标点在左右 ...
- 双目相机的畸变校正以及平行校正(极线校正)的入门问题总结
一.相机标定是干什么的,需要什么器材才能做?双目校正目标是什么,又需要什么设备? 二.相机(针孔)模型是什么样的?世界坐标系,相机坐标系,图像物理坐标系,图像像素坐标系,这四个坐标系到底是什么?从世界 ...
- 原理+代码实战 | 双目视觉中的极线校正
点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 本文转自:计算机视觉life 为什么要做极线校正? 三维重建是通过 ...
- 立体视觉入门指南:对级约束与Fusiello法极线校正
作者丨李迎松@知乎 来源丨https://zhuanlan.zhihu.com/p/466758105 编辑丨3D视觉工坊 亲爱的同学们,我们的世界是3D世界,我们的双眼能够观测三维信息,帮助我们感知 ...
- 立体视觉入门指南(6):对级约束与Fusiello法极线校正
亲爱的同学们,我们的世界是3D世界,我们的双眼能够观测三维信息,帮助我们感知距离,导航避障,从而翱翔于天地之间.而当今世界是智能化的世界,我们的科学家们探索各种机器智能技术,让机器能够拥有人类的三维感 ...
- Epipolar Recitification 极线校正/立体校正
在进行极线搜索时,为了方便,将极点通过射影变换转至无穷远点,则图上的极线都变成了平行线,便于搜索 PAT: 只能在极点位于图像外时使用这种方法,极点在图像内时,极点周围的点也会被变换到无穷远处 变换矩 ...
- opencv进行双目标定以及极线校正 python代码
opencv进行双目标定以及极线校正python代码 双目标定 主要使用的函数 代码 极线校正 主要使用的函数 代码 效果图 双目标定 参考博客 OpenCV相机标定全过程 [OpenCV实战]38 ...
- openMVS:极线校正Fusiello
立体视觉入门指南(6):对级约束与Fusiello法极线校正 原理+代码实战 | 双目视觉中的极线校正 校正目的:对两幅图像的二维匹配搜索变成一维,节省计算量,排除虚假匹配点,成平行视图. 算法流程: ...
- 基于图像的多视角立体视觉三维重建(一)——对极几何模型与极线校正原理
一.小孔成像模型 世界坐标系到相机坐标系 [xcyczc]=R[xwywzw]+t即[xcyczc1]=[Rt0T1][xwywzw1]=TPw(1.0)\begin{bmatrix} x_{c}\\ ...
最新文章
- java 共享锁 独占锁_Java并发编程锁之独占公平锁与非公平锁比较
- git安装和初步使用
- thinkphp3.22 多项目配置
- java 继承 冒号_java继承(extends)简单介绍
- 1148 Werewolf - Simple Version (20 分)
- 【OpenCV】OpenCV访问像素点的三种方式
- Representation Flow for Action Recognition论文解读
- antv g6 禁止移动_十 AntV
- Equals() 和 运算符 == 重载准则 (C# 编程指南)
- 为什么 PSP22 对 Polkadot 生态系统很重要
- python拦截游戏封包_TCP封包拦截类模块 API HooK封包拦截源码
- Java 枚举 ordinal 使用以及介绍
- 接口测试用例怎么写?一文1600字教你写一个优秀的接口测试的测试用例
- CSDN的C1-见习工程师能力认证相关知识(框架)
- 12面魔方公式图解法_高手指教一下十二面魔方怎么拼?
- 12.Numpy数值计算
- 探索C++0x: 1. 静态断言(static_assert)
- ZYNQ之高速AD/DA验证实验
- mysql查询学生_在mysql中查询学生排名
- c调用c++ qt_C#调用C++(QT5.5.1项目)的C++/CLI(CLR项目)项目技术笔记
热门文章
- 手机闪存速度排行_手机闪存读写速度对比?一加不如iQOO,华为最强,默秒全...
- 三菱电梯c语言程序代码破解,三菱电梯LEHY-C故障代码大全
- 诚信通(b2b)信息发布5大核心技巧
- 给感染新冠的老年人一点建议
- Dimensioning of Cables
- javafx-更改webview中的html元素报错Exception in thread “JavaFX Application Thread“ netscape.javascript.JSExce
- 个人简评——2345王牌拼音输入法
- 在python环境下使用Openposes
- 微信自动加好友 模拟位置
- 小米12回收能值多少钱