集成RANSAC以计算基本矩阵
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了集成RANSAC以计算基本矩阵相关的知识,希望对你有一定的参考价值。
我使用5点算法计算了基本矩阵。我不确定如何将它与ransac集成,因此它给了我更好的结果。
这是源代码。 https://github.com/lunzhang/openar/blob/master/src/utils/5point/computeEssential.js
目前,我正在考虑计算5个随机点的基本矩阵,然后将基本矩阵转换为基本矩阵,并使用此公式x'Fx = 0查看误差阈值。但后来我不确定,该怎么办。
我如何知道哪些点设置为大纲?如果错误太大,我会立即将它们设置为大纲吗?根据其他4个点是什么,一个点可能产生不同的基本矩阵吗?
好吧,这是一个简短的解释,用伪代码,你可以如何将它与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个点完全相同的结果。
希望这可以帮助。
以上是关于集成RANSAC以计算基本矩阵的主要内容,如果未能解决你的问题,请参考以下文章
OpenCV RANSAC 和 LMeDS 都制作了一个大小为 0 的基本矩阵
openCV中的findHomography函数分析以及RANSAC算法的详解
(转载)利用SIFT和RANSAC算法(openCV框架)实现物体的检测与定位,并求出变换矩阵(findFundamentalMat和findHomography的比较) 置顶