最小化单应矩阵中的误差

时间:2017-02-10 06:21:20

标签: c++ opencv homography minimization

我有一个同形矩阵

 [h1 h2 h3 
  h4 h5 h6 
  h7 h8 h9]

我改变了一点 p1 to P1使用上面的单应矩阵。 类似地

    p2 to P2
    p3 to P3
    p4 to P4

我知道

之间的差异
P1-P2 = D1
P2-P3 = D2
P3-P4 = D3

由于单应性错误D1,D2,D3中存在小错误。 (我知道实际的差值) 设误差为E1, E2, E3(已知值)。

(E1 = D1 - Actual_Difference_between_P1_andP2)

同样计算E2,E3和E4。

现在我需要修改我的单应矩阵,以便最小化我的E1,E2,E3,E4。

1 个答案:

答案 0 :(得分:4)

<强>简介

可以从4对点获得100%准确度(实际0重投影误差)。但是,当一对点的数量大于4时,您可能无法获得0错误的单应性。这是因为这些点可能不在一个3D平面中。

所以,首先你必须处理这样一个事实:在实际应用中,可能没有100%准确的单应性(由于匹配误差),但有一个最优(最小重投影误差矩阵)。

<强>配方

关于你的问题,似乎你有两组点。一个用于获取Homography,另一个用于验证模型,然后您希望使用它来增强模型。

如何增强单应性?

首先,使用两组来使用一些稳健的估计方法(例如RANSAC)来获得单应性。您可以找到更多信息here

其次,迭代您的集合并计算每个点的重投影错误,如您所述。然后,消除重投影误差超过某个阈值的所有点。

第三,在内点上应用微调优化技术,直到你在内点之间的误差总和方面得到良好的单应性。

如何进行第三步?

您需要优化8个参数:

h11    h12    h13
h21    h22    h23
h31    h32     1

优化功能:

enter image description here

你已经使用RANSAC计算了Homography。所以,你有一个非常好的估计,接近全局最优。这意味着非线性局部优化技术足以满足这种情况。存在许多算法。选择一个并开始(一些建议:Hill ClimbingSimulated Annealing

在OP的评论之后

编辑,只知道第二组之间的距离:

优化功能应该是: enter image description here

其中AD_ij是Pi和Pj之间的实际距离。

您可以尝试通过例如使用欧美距离的广场进行参考和查询来降低复杂性。