我用五点算法计算了基本矩阵。我不知道如何将它与ransac集成,因此它给了我一个更好的结果。
这是源代码。https://github.com/lunzhang/openar/blob/master/src/utils/5point/computeEssential.js
目前,我正在考虑计算5个随机点的基本矩阵,然后将基本矩阵转换为基本矩阵,然后使用这个方程x‘’Fx= 0看到误差阈值。但之后我不确定该怎么办。
我如何知道应该将哪些点设置为外列者?如果错误太大,我是否立即将它们设置为副词?根据其他4个点的不同,某一点能产生不同的基本矩阵吗?
发布于 2017-12-27 20:43:41
好的,下面是一个简短的解释,用伪代码说明如何将它与ransac集成。基本上,Ransac所做的就是使用数据的子集计算您的模型(这里是必需的),然后查看其他数据是否“满意”该结果。它保存数据集中最高部分“高兴”的结果。
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个点完全相同的结果。
希望这能有所帮助。
https://stackoverflow.com/questions/47995636
复制相似问题