Dee*_*pak 3 c++ opencv minimization homography
我有一个单应性矩阵
[h1 h2 h3
h4 h5 h6
h7 h8 h9]
Run Code Online (Sandbox Code Playgroud)
我已经p1 to P1使用上述单应性矩阵转换了一个点
。相似地
p2 to P2
p3 to P3
p4 to P4
Run Code Online (Sandbox Code Playgroud)
我知道两者之间的差异
P1-P2 = D1
P2-P3 = D2
P3-P4 = D3
Run Code Online (Sandbox Code Playgroud)
由于单应性错误,D1,D2,D3中的误差很小。(我知道实际的差值)让误差为E1, E2, E3(已知值)。
(E1 = D1 - Actual_Difference_between_P1_andP2)
Run Code Online (Sandbox Code Playgroud)
类似地,计算E2,E3和E4。
现在,我需要修改单应性矩阵,以使E1,E2,E3,E4最小。
介绍:
可以从4对点中以100%的精度获得同形照相(真实的0重投影误差)。但是,当一对点数大于4时,您可能无法获得0误差的单应性。这是因为这些点可能不在一个3D平面中。
因此,首先您必须处理一个事实,即在实词应用中,可能没有100%准确的单应性(由于匹配错误),但是有一个最优的(最小重投影误差矩阵)。
公式:
关于您的问题,看来您有两组对分。您曾经使用过一种方法来获取同形学,而另一种则是您要根据它来验证模型,然后又想用它来增强模型。
如何增强单应性?
首先,使用两种集合使用某种鲁棒的估计方法(例如RANSAC)获得单应性。您可以在此处找到更多信息。
其次,遍历您的集合并按照您的描述计算每个点的重投影误差。然后,消除所有重投影误差大于某个阈值的点。
第三,仅对线性误差应用微调优化技术,直到根据线性误差之和得出良好的单应性。
第三步怎么做?
您有8个参数需要优化:
h11 h12 h13
h21 h22 h23
h31 h32 1
Run Code Online (Sandbox Code Playgroud)
优化功能:
并且您已经使用RANSAC计算了同构。因此,您有一个很好的估计,接近全局最优值。这意味着对于这种情况,非线性局部优化技术就足够了。存在许多算法。选择一个并开始(一些建议:爬山,模拟退火)
在OP评论后进行编辑,即仅知道第二组之间的距离:
AD_ijPi和Pj之间的实际距离在哪里。
您可以尝试通过例如将欧氏距离序列用于参考和查询来降低复杂度。