1

我正在尝试在 OpenCV 中实现我自己的 Homography 和 Pose 估计。假设我有一个方形图像作为模型,我想在相机的输入帧中定位它。我的问题是关于如何准备模型数据来计算 Homography。

我做了以下程序:

1-我在两个图像中提取了 3 个对应的集合。

 Input features:       Model Features:
p1_Input(278,278)---> p1_model(137,273)
p2_Input(317,235)---> p2_model(176,230)
p3_Input(217,204)---> p3_model(76,199)  //all in pixel

2-解决P3P问题:

a) 使用相机内在参数对输入点进行归一化:

u.x=(p1_Input.x - cx) / fx 
u.y=(p1_Input.y - cy) / fy  
u.z=1

v.x=(p2_Input.x - cx) / fx 
v.y=(p2_Input.y - cy) / fy  
v.z=1

w.x=(p3_Input.x - cx) / fx 
w.y=(p3_Input.y - cy) / fy  
w.z=1

b) 归一化长度以获得单位向量:

d = sqrt(u.x*u.x + u.y*u.y + 1);
u.x=u.x/d;
u.y=u.y/d;
u.z=u.z/d;  // and same for v and w

c) 通过求解 p3p 并存储在 a、b 和 c 中找到 u 和相机焦点之间的距离。(v 和 w 相同)

d) 计算 3D 坐标:

A_Input.x=a*u.x;
A_Input.y=a*u.y;
A_Input.z=a*u.z;  // same for B_input and C_Input

like:
A_Input:(-0.0899342 ,0.0570672 ,0.976046)
B_Input:(-0.0197703 ,-0.0194311 ,0.955101) 
C_Input:(-0.197233 ,-0.0746457 ,0.967379)

3-计算单应性

我的问题出现在这里。我应该如何准备和修改p1_model,p2_model and p3_model以便为 Homography 计算做好准备?

显然 A_Input是具有归一化日期的 3D 矢量,而p1_model以像素为单位的 2D 矢量。

解决问题后剩下的内容如下:

a) 为这两个集合找到中心点。

b) 使用这个公式点产品找到 H

4- 使用 H 和 SVD 找到刚性变换

更多详细信息可在此处此处获得

4

1 回答 1

0

就坐标系而言,没有特定的“格式”需要您放入点以从 P3P (或PnP)算法中获得良好的结果,只要保持一致即可。给定 p1 和 p2 之间的对应关系,算法正在寻找的解决方案是

p2 = [resulting_3x4_transform]*p1;

对于每个通信。出于数字原因,建议不要让任何坐标值非常大或非常小,但除此之外,您可以随意将您的点放在您喜欢的任何坐标系中。

于 2012-10-22T16:47:48.023 回答