讲怎么求平面射影变换H
直接线性变换(DLT)算法
-
利用x′i×Hxi=0,hiT是H的第i行。一般选择前2行
⎡⎣⎢⎢0Tw′ixTi−y′ixTi−w′ixTi0Tx′ixTiy′ixTi−x′ixTi0T⎤⎦⎥⎥⎡⎣⎢h1h2h3⎤⎦⎥=0
-
求解H,解是A的最小奇异值的单位奇异矢量
min ||Ah||, s.t. ||h||=1
不同的代价函数
-
代数距离,DLT的解在次代价函数下取得最优解
dalg(x′i,Hxi)2=||εi||2=||[0Tw′ixTi−w′ixTi0Ty′ixTi−x′ixTi]h||2
-
几何距离
单图像误差:∑id(x′i,Hx¯i)2
对称转移误差:∑id(xi,H−1x′i)2+d(x′i,Hxi)2
-
重投影误差
∑id(xi,x^i)2+d(x′i,x^′i)2 s.t x^′i=H^x^i
-
几何距离和代数距离的比较,考虑单图像误差
(x^′i,y^′i,z^′i)=Hx¯
Aih=εi=(y′iw^′i−w′iy^′iw′ix^′i−x′iw^′i)
dalg(x′i,x^′i)=(y′iw^′i−w′iy^′i)2+(w′ix^′i−x′iw^′i)2
d(x′i,x^′i)=dalg(x′i,x^′i)/w^′iw′i
-
重投影的几何解释,νH是满足(x′,y′,1)=H(x,y,1)的4维空间的代数簇
||Xi−X^i||2=(xi−x^i)2+(yi−y^i)2+(x′i−x^′i)2+(y′i−y^′i)2=d(xi,x^i)2+d(x′i,x^′i)2
通过一系列点(xi.yi,x′i,y′i),拟合出代数簇
-
Sampson误差,在νH上的点X满足Ah=0,记为ζH(X)=(0,0)T
ζH(X+δx)=ζH(X)+δζHδXδx
求在满足Jδx=−ε条件下使||δx||取最小值的矢量δx,最小化δTxδx−2λT(Jδx+ε)
2δx−2λTJ=0T↦δx=JTλ
JJTλ=−ε↦λ=−(JJT)−1ε↦δx=−JT(JJT)−1ε
X^=X+δx, ||δx||2=εT(JJT)−1ε
最小化目标函数: ∑iεTi(JJT)−1εi
这里有2处近似:1. J,点X并未在簇上。2. 泰勒一阶展开
变换不变性
DLT算法的非不变性,xi↔x′i由DLT算法得到H。相似变换下,x~i=Txi↔x~′i=T′x~′i由DLT算法会得到H~=T′HT−1吗?
回答是:不一定能,所以DLT算法不具有不变性,会因为坐标选择而出现映射的不同
几何误差具有相似不变性
-
归一化变换,数据的归一化在一些算法中是必须得,特别是对一些不太良定的问题,例如:基本矩阵的计算以及三焦张量的DLT算法。
1.对点进行平移,让这些点的图心(Centroid)移到原点
2.进行尺度缩放,让这些点的到原点的平均距离为2–√
T=s⎡⎣⎢100010−u¯−v¯1/s⎤⎦⎥ ,s=2–√n∑i[(xi−u¯)2+(yi−v¯)2]1/2
迭代最小化方法
单图像误差: f:h9∗1↦(Hx1,Hx2,...,Hxn)2n∗1
对称转移误差: f:h9∗1↦(H−1x′1,...,H−1x1n,Hx1,Hx2,...,Hxn)4n∗1
重投影误差: f:(h,x^1,...,x^n)(9+2n)∗1↦(x^1,x^′1,...,x^n,x^′n)4n∗1
鲁棒估计
- 距离阈值:根据概率来选择,利用χ2分布
- 采样多少次:ε=1−w是野值比率,,选择s个点,p是采样点中没有野值的概率,(1−ws)N=1−p
- 算法步骤
(1)角点检测
(2)角点匹配
(3)RANSAC鲁棒估计
(4)最优估计:由划分为内点的对应点重新估计H,利用LM迭代
(5)引导匹配:
(6)最后2步可以重复进行直到对应的数目稳定