快捷搜索: 王者荣耀 脱发

Epipolar Recitification 极线校正/立体校正

在进行极线搜索时,为了方便,将极点通过射影变换转至无穷远点,则图上的极线都变成了平行线,便于搜索 PAT: 只能在极点位于图像外时使用这种方法,极点在图像内时,极点周围的点也会被变换到无穷远处

变换矩阵H的形式

H e = [ 1 , 0 , 0 ] T He=[1,0,0]^T He=[1,0,0]T H H H最少有6个自由度,为了减少畸变,应该使 H H H接近刚体变换, H = G G R G T ∈ R 3 × 3 H=GG_RG_Tin R^{3 imes3} H=GGRGT∈R3×3 G T = [ 1 0 − O x 0 1 − O y 0 0 1 ] G_T=egin{bmatrix}1&0&-O_x\0&1&-O_y\0&0&1\end{bmatrix} GT=⎣⎡100010−Ox−Oy1⎦⎤ 其中 O x , O y O_x,O_y Ox,Oy是图像中心, G T [ O x O y 1 ] = [ 0 0 1 ] G_Tegin{bmatrix}O_x\O_y\1end{bmatrix}=egin{bmatrix}0\0\1end{bmatrix} GT⎣⎡OxOy1⎦⎤=⎣⎡001⎦⎤

G T G_T GT将极点变换到图像坐标系下,再通过刚体变换 G R ∈ S O ( 3 ) G_Rin SO(3) GR∈SO(3)将极点变换到x轴上, G R G_R GR是以z轴为旋转轴的旋转矩阵

G R G T e = [ x e , 0 , 1 ] T G_RG_Te=[x_e,0,1]^T GRGTe=[xe,0,1]T 要使 G [ x e , 0 , 1 ] = [ 1 , 0 , 0 ] T G[x_e,0,1]=[1,0,0]^T G[xe,0,1]=[1,0,0]T,则 G = [ 1 0 0 0 1 0 − 1 x e 0 1 ] G=egin{bmatrix}1&0&0\0&1&0\ -frac{1}{x_e}&0&1end{bmatrix} G=⎣⎡10−xe1010001⎦⎤

已标定相机下的极线校正

这篇论文是在相机已标定情况下讨论的极线校正,两个相机的投影矩阵 P P P都认为已知 P ~ = K [ R ∣ t ] ilde{P}=K[R|t] P~=K[R∣t] 论文讲的是如何计算一个矩阵把上面的相机位姿变换成下面图中这种形式,同时使图像的畸变尽量的小 可以看到,校正后两个成像平面的x轴和基线平行,也就是两个相机的旋转相同,同时相机在校正的过程中位置 c c c是不能改变的,这样我们就能得到校正后投影矩阵 P P P的大概形式 P n 1 ~ = K R ∣ − R c 1 , P n 2 ~ = K R ∣ − R c 2 ilde{P_{n1}}=K{R|-Rc_1}, ilde{P_{n2}}=K{R|-Rc_2} Pn1~=KR∣−Rc1,Pn2~=KR∣−Rc2 矩阵 R R R可以用他的行向量表示, R = [ r 1 T r 2 T r 3 T ] R=egin{bmatrix}r_1^T\r_2^T\r_3^Tend{bmatrix} R=⎣⎡r1Tr2Tr3T⎦⎤ 三个行向量分别代表了三个轴在世界坐标系中的单位向量,因为 x x x轴和基线平行,所以 r 1 = ( c 1 − c 2 ) ∣ ∣ c 1 − c 2 ∣ ∣ r_1=frac{(c_1-c_2)}{||c_1-c_2||} r1=∣∣c1−c2∣∣(c1−c2), y y y轴要平行于 x x x轴,所以手动设置为 r 2 = k ^ r 1 r_2=hat{k} r_1 r2=k^r1,其中 k k k是任意单位向量,同时 z z z轴要垂直于 x x x轴和 y y y轴,所以 r 3 = r 1 ^ r 2 r_3=hat{r_1}r_2 r3=r1^r2,这个算法在相机纯平移前后运动时会失效

有了校正后的投影矩阵,我们就可以求解变换矩阵了,这里以左视图为例子

W ~ ilde{W} W~是3D点, m ~ ilde{m} m~是对应的投影点 可以看到两个图像点变换前后的关系为 变换矩阵为 论文中一些极线校正的结果

matlab提供的极线校正参考代码

matlab中的代码是针对没标定好的相机的,只要两张图之间匹配点大于等于7个并且极点不在图像内就可以完成校正

参考文献

Hartley R, Zisserman A. Multiple view geometry in computer vision[M]. Cambridge university press, 2003.
经验分享 程序员 微信小程序 职场和发展