在下图中,目标是计算单应矩阵H,其将点a1 a2 a3 a4变换为它们的对应点b1 b2 b3 b4.那是:
[b1 b2 b3 b4] = H * [a1 a2 a3 a4]
Run Code Online (Sandbox Code Playgroud)
您建议采用什么方式成为计算H(3x3)的最佳方法.a1 ... b4是2D中的点,它们在齐次坐标系中表示(即[a1_x a1_y 1]',...). 编辑:对于这些类型的问题我们使用SVD,所以我想看看如何在Matlab中简单地完成.
编辑:
以下是我最初尝试使用Maltlab中的svd(H = Q/P)来解决它的方法.Cosider给出了给定示例的以下代码
px=[0 1 1 0]; % a square
py=[1 1 0 0];
qx=[18 18 80 80]; % a random quadrangle
qy=[-20 20 60 -60];
if (DEBUG)
fill(px,py,'r');
fill(qx,qy,'r');
end
Q=[qx;qy;ones(size(qx))];
P=[px;py;ones(size(px))];
H=Q/P;
H*P-Q
answer:
-0.0000 0 0 0 0
-20.0000 20.0000 -20.0000 20.0000 0.0000
-0.0000 0 0 0 -0.0000 …Run Code Online (Sandbox Code Playgroud) matlab robotics computer-vision numerical-methods projective-geometry