在进行极线搜索时,为了方便,将极点通过射影变换转至无穷远点,则图上的极线都变成了平行线,便于搜索
PAT: 只能在极点位于图像外时使用这种方法,极点在图像内时,极点周围的点也会被变换到无穷远处
变换矩阵H的形式
He=[1,0,0]T
H最少有6个自由度,为了减少畸变,应该使H接近刚体变换,H=GGRGT∈R3×3
GT=⎣⎡100010−Ox−Oy1⎦⎤
其中Ox,Oy是图像中心,GT⎣⎡OxOy1⎦⎤=⎣⎡001⎦⎤
GT将极点变换到图像坐标系下,再通过刚体变换GR∈SO(3)将极点变换到x轴上,GR是以z轴为旋转轴的旋转矩阵
GRGTe=[xe,0,1]T
要使G[xe,0,1]=[1,0,0]T,则G=⎣⎡10−xe1010001⎦⎤
已标定相机下的极线校正
A compact algorithm for rectification of stereo pairs
这篇论文是在相机已标定情况下讨论的极线校正,两个相机的投影矩阵P都认为已知
P~=K[R∣t]

论文讲的是如何计算一个矩阵把上面的相机位姿变换成下面图中这种形式,同时使图像的畸变尽量的小

可以看到,校正后两个成像平面的x轴和基线平行,也就是两个相机的旋转相同,同时相机在校正的过程中位置c是不能改变的,这样我们就能得到校正后投影矩阵P的大概形式
Pn1~=KR∣−Rc1,Pn2~=KR∣−Rc2
矩阵R可以用他的行向量表示,R=⎣⎡r1Tr2Tr3T⎦⎤
三个行向量分别代表了三个轴在世界坐标系中的单位向量,因为x轴和基线平行,所以r1=∣∣c1−c2∣∣(c1−c2),y轴要平行于x轴,所以手动设置为r2=k^r1,其中k是任意单位向量,同时z轴要垂直于x轴和y轴,所以r3=r1^r2,这个算法在相机纯平移前后运动时会失效
有了校正后的投影矩阵,我们就可以求解变换矩阵了,这里以左视图为例子



W~是3D点,m~是对应的投影点

可以看到两个图像点变换前后的关系为

变换矩阵为

论文中一些极线校正的结果


matlab提供的极线校正参考代码
官方文档
matlab中的代码是针对没标定好的相机的,只要两张图之间匹配点大于等于7个并且极点不在图像内就可以完成校正
参考文献
Hartley R, Zisserman A. Multiple view geometry in computer vision[M]. Cambridge university press, 2003.