任意2D集的类RANSAC实现

Doo*_*bot 9 c++ opencv signal-processing point-cloud-library ransac

TL; DR:是否有RANSAC的C++实现或其他可以与任意2D点集自由使用的强大对应算法?

我知道存在许多包括或利用诸如RANSAC(随机抽样共识)之类的对应算法的实现.它们经常用于计算机视觉应用中,并且可以在诸如OpenCV,PCL等的库中找到.通用算法是众所周知的,并且各种站点列出了不同的步骤.

现在,我发现的所有"高级"实现(为OpenCV,PCL等完成)都是针对具有一组基本假设的特定类型的问题.在OpenCV中,您希望在第一个图像和第二个图像的一部分(此示例)之间找到单应矩阵.在PCL中,您处于3D点云领域,而且(据我所知)您只能匹配特定的,已定义的形状(线条,球体等).

我"简单地"想要做的是采取任意2D点集(可能包含一些噪声)并在更大的2D点集合中找到对应关系(其中也包含一些噪声和其他点).除了输入两组点之外,它不需要特定的模型训练.我正在使用C++实现它,但是:

  • 我不是一个经验丰富的程序员,我需要整个事情来执行得相当快; 我自己已经完成的众所周知的算法(边缘检测,高斯模糊等)已经证明比经过验证的实现要慢得多(> 10x).

  • 简单地扯掉已经存在的开源实现(例如OpenCV)已被证明超出了我目前的能力(过多的依赖关系和虚拟实现模板等等)

所以,如果有人知道我错过了一个可以自由使用(BSD之类)和经过验证的C++实现......

Sri*_*har 16

很难找到RANSAC的流行,轻量级,通用的C++实现.我刚刚在MIT许可下发布了我的通用RANSAC实现.

https://github.com/drsrinathsridhar/GRANSAC

GRANSAC是通用的,模板化的,仅头文件和多线程的.用户必须实现继承AbstractModel的类.然后可以对任何类型的模型(例如:2D线,3D平面)进行RANSAC估计.

我已经测试过这个仅用于2D线路拟合,但也适用于其他问题.很乐意添加更多功能(例如自动选择迭代次数等)

在此输入图像描述