参考文献:A compact algorithm for rectification of stereo pairs
0.基本概念
- 极线(epipolar line)
- 投影几何(perspective projections)
1. 小孔成像模型
主要涉及三个坐标系:世界坐标系(word coordinates),相机坐标系(camera coordinate),图像坐标系(image plane coordinate)。世界坐标系中的点,通过转换矩阵转换到图像坐标系。
. 相似等号(参照三角形相似)
级线矫正的关键就是这个,不满足我们的要求,所以就是分析这个变换就十分重要。
1.1 分析变换矩阵
-
变换角度分析
是两步转换的综合:坐标系的旋转平移,投影变换。
. 注意:通过QR分解,由推导出旋转平移,投影变换. -
几何表达角度分析(作者需要固定光心点)
分成两块了来看
. 把光心带入该式子
个人对此式子还有一定疑问
所以, -
一对多的关系,图像点与世界坐标系
# 相似等号,换成了绝对的等号
# 给定任意图像点,对应一系列的空间点
1.2 理想的变换矩阵
- 两个相机矫正后,相同的投影变换,(作者说这个可以随便选,很不错的性能)。
- 两个相机矫正后,相同的旋转由,(有要求,主要是X坐标轴与光心连线平行)
- 两个相机矫正后,不同的平移,作者约定光心与矫正前光心位置重合,(你也可以调整光心位置,相当切换了视角,会引起其他问题)
2.极线矫正
- 找到一个变换,将old原始图像坐标,转到new新的图像坐标哦系下。
#好了,只要有(标定给出的)和(人为设定的)就可以进行极线矫正了,找到了。
2.1 人为设定
- 投影变换。 # 任意设置嘛,取原来图像的平均值感觉比较好。
- 旋转,主要依据光心来构建的直角坐标系,参看原文。
- 平移,感觉有点问题,对吧!且看作者是如何做的
,立马推出
所以其实平移并没有用,因为只和有关系,
2.2 Matlab代码
作者是提供了代码的(快20年过去了,论文中给的网址失效了),我们都很喜欢他!!!
function [T1,T2,Pn1,Pn2] = rectify(Po1,Po2)
% RECTIFY: compute rectification matrices
% factorize old PPMs
[A1,R1,t1] = art(Po1);
[A2,R2,t2] = art(Po2);
% optical centers (unchanged)
c1 = - inv(Po1(:,1:3))*Po1(:,4);
c2 = - inv(Po2(:,1:3))*Po2(:,4);
% new x axis (= direction of the baseline)
v1 = (c1-c2);
% new y axes (orthogonal to new x and old z)
v2 = cross(R1(3,:)’,v1);
% new z axes (orthogonal to baseline and y)
v3 = cross(v1,v2);
% new extrinsic parameters
R = [v1’/norm(v1)
v2’/norm(v2)
v3’/norm(v3)];
% translation is left unchanged
% new intrinsic parameters (arbitrary)
A = (A1 + A2)./2;
A(1,2)=0; % no skew
% new projection matrices
Pn1 = A * [R -R*c1 ];
Pn2 = A * [R -R*c2 ];
% rectifying image transformation
T1 = Pn1(1:3,1:3)* inv(Po1(1:3,1:3));
T2 = Pn2(1:3,1:3)* inv(Po2(1:3,1:3));
% ------------------------
function [A,R,t] = art(P)
% ART: factorize a PPM as P=A*[R;t]
Q = inv(P(1:3, 1:3));
[U,B] = qr(Q);
R = inv(U);
t = B*P(1:3,4);
A = inv(B);
A = A ./A(3,3);
参考文献
- A compact algorithm for rectification of stereo pairs
网友评论