Computer vision 积分RANSAC计算本质矩阵

Computer vision 积分RANSAC计算本质矩阵,computer-vision,Computer Vision,我已经使用5点算法计算了基本矩阵。我不知道如何将其与ransac整合,因此它给了我更好的结果 这是源代码 目前,我正在考虑计算5个随机点的基本矩阵,然后将基本矩阵转换为基本矩阵,并使用此方程x'Fx=0查看误差阈值。但我不确定,之后该怎么办 如何知道将哪些点设置为大纲视图?如果错误太大,是否立即将其设置为大纲视图?根据其他4个点是什么,一个点可能会产生不同的基本矩阵吗?好吧,这里有一个简短的解释,用伪代码,说明如何将其与ransac集成。基本上,Ransac所做的就是使用数据的一个子集计算您的模

我已经使用5点算法计算了基本矩阵。我不知道如何将其与ransac整合,因此它给了我更好的结果

这是源代码

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


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

好吧,这里有一个简短的解释,用伪代码,说明如何将其与ransac集成。基本上,Ransac所做的就是使用数据的一个子集计算您的模型(这里是基本的),然后查看其余数据是否对该结果“满意”。它会保留数据集中最高部分“满意”的结果

最高快乐点数=-1;
最佳估计基本矩阵=恒等式;
对于iter=1至最大iter编号:
n_pts=获取n_随机点(P)//从点集合P中获取n个点的子集。您可以使用5个,但也可以使用更多。
E=计算基本值(n分);
快乐点数=0;
对于P中的pt:
//我们想知道pt对计算出的E是否满意
err=成本函数(pt,E)//例如,您建议的x^TFx,或带有essential的x^TEX。
如果(最高快乐点数):
最高快乐点数=快乐点数;
最佳估计基本矩阵=E;
这应该能奏效。通常,您可以通过实验将某个阈值设置为较低的值。当然还有更复杂的RANSAC,你可以通过谷歌很容易地找到它们

我认为你使用
x^TFx
的想法很好

一旦此Ransac完成,您将拥有
最佳估计值\u基本矩阵
。异常值是指
x^TFx
值大于可选阈值的值

要回答您的最后一个问题,是的,一个点可以在给定4个不同点的情况下生成不同的矩阵,因为它们的空间配置不同(可能存在退化情况)。在理想的设置中,情况并非如此,但我们总是存在噪音、匹配错误等,因此最终的结果是,你用5个点得到的方程不会产生与其他5个点完全相同的结果


希望这有帮助

您好,在您的示例中,似乎您在每个循环中都保留了异常值,但根据wiki,您应该在每次传递时删除异常值。这是正确的吗?我认为在RANSAC过程中不应该删除异常值。假设您随机选择用于估算的前五个点是真正意义上的异常值(它们只是数据中的噪声,例如错误匹配)。使用它们,您将得到一个基本矩阵
E_bad
,与之相关的这五个点将是内联线。然而,其余的点(真正的内联线)大多是关于
E_bad
的异常值。所以在这种情况下,消除异常值实际上意味着消除好的数据。是的,我就是这么想的。谢谢祝你新年快乐!
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;