集成RANSAC以计算基本矩阵

问题描述 投票:0回答:1

我使用5点算法计算了基本矩阵。我不确定如何将它与ransac集成,因此它给了我更好的结果。

这是源代码。 https://github.com/lunzhang/openar/blob/master/src/utils/5point/computeEssential.js

目前,我正在考虑计算5个随机点的基本矩阵,然后将基本矩阵转换为基本矩阵,并使用此公式x'Fx = 0查看误差阈值。但后来我不确定,该怎么办。

我如何知道哪些点设置为大纲?如果错误太大,我会立即将它们设置为大纲吗?根据其他4个点是什么,一个点可能产生不同的基本矩阵吗?

computer-vision
1个回答
1
投票

好吧,这是一个简短的解释,用伪代码,你可以如何将它与ransac集成。基本上,所有Ransac都使用数据子集计算您的模型(此处为Essential),然后查看其余数据是否“满意”该结果。它保留了数据集的最高部分“满意”的结果。

highest_number_of_happy_points=-1;
best_estimated_essential_matrix=Identity;

for iter=1 to max_iter_number:    
    n_pts=get_n_random_pts(P);//get a subset of n points from the set of points P. You can use 5, but you can also use more.

    E=compute_essential(n_pts);

    number_of_happy_points=0;
    for pt in P:
        //we want to know if pt is happy with the computed E
        err=cost_function(pt,E);//for example x^TFx as you propose, or X^TEX with the essential.
        if(err<some_threshold):
            number_of_happy_points+=1; 
    if(number_of_happy_points>highest_number_of_happy_points):
        highest_number_of_happy_points=number_of_happy_points;
        best_estimated_essential_matrix=E;

这应该可以解决问题。通常,您通过实验将some_threshold设置为较低的值。当然有更复杂的Ransacs,你可以通过谷歌搜索轻松找到它们。

在我看来,你使用x^TFx的想法很好。

一旦这个Ransac完成,你将有best_estimated_essential_matrix。异常值是那些x^TFx值大于可选阈值的异常值。

为了回答你的最后一个问题,是的,一个点可以产生一个给定4个不同点的不同矩阵,因为它们的空间配置是不同的(你可以有退化的情况)。在一个理想的设置中,情况并非如此,但我们总是有噪声,匹配误差等等,所以最后发生的是你用5点获得的方程不会产生与其他5个点完全相同的结果。

希望这可以帮助。

© www.soinside.com 2019 - 2024. All rights reserved.