【问题标题】:RANSAC camera-calibration implementationRANSAC 相机校准实现
【发布时间】:2015-05-28 23:26:20
【问题描述】:

我查看了几个库,如 OpenCV 等,但找不到任何以 RANSAC 方式进行相机校准的实现。我的意思是,我想进行校准,提供点对应(P,p)(即 3D -> 2D),它可以包含异常值,并最终从内部找到内在和外在矩阵。 在我继续使用 scikit 之类的库实现自己的库之前(我也没有在 C++ 中找到一个好的通用 RANSAC 实现),我想知道这样的东西是否现成。

【问题讨论】:

    标签: opencv computer-vision camera-calibration outliers ransac


    【解决方案1】:

    你看过 OpenCV 的 calibrateCamera 吗?如果您不确定点对应的质量,我认为基于此编写您自己的基于 RANSAC 的校准非常容易,因为该函数可以方便地返回重投影错误。

    【讨论】:

    • 这就是我现在正在做的;正在寻找已经实施的东西。 calibrateCamera 返回的重投影误差并没有多大用处,因为需要使用现有的相机矩阵来获取新点的重投影误差 - 为此需要额外调用 solvePnP 来获取新点的外在值,然后使用 projectPoints 来获取手动重投影错误。不要认为它可以做得比这更简单。
    【解决方案2】:

    要问的第一个问题是:您为什么要这样做?

    您找不到围绕整个相机校准包的 RANSAC 循环的收缩包装实现的原因是,从表面上看,这听起来是个坏主意。

    相机校准用例通常是(或应该是)高度可重复、低噪声的事务,异常值小到足以在捆绑调整中使用鲁棒性处理。如果您的用例与所有这些相反,就会对整个方法产生疑问。

    如果您更详细地描述您的用例会有所帮助。

    【讨论】:

    • 如果您需要根据图像而不是提前校准相机,这很有用 - 例如。如果您不拥有相机。
    • 但是您有正确校准装置的图像吗?并且您可以保证相机参数不会在校准图像(因此您可以校准)或实际场景图像上发生变化?您是否将“相机校准”(en.wikipedia.org/wiki/Camera_resectioning)与“相机自动校准”(en.wikipedia.org/wiki/Camera_auto-calibration)混淆了
    • 如果您可以先验访问相机以拍摄校准图像(并且它们不会随变焦或聚焦而改变),可以。但是,如果您正在创建一项服务,人们可以上传使用他们自己的相机围绕对象拍摄的单张照片,并且您根据点对应关系创建了一个模型,那么您需要从图像中求解相机矩阵。
    • @FrancescoCallari,我想这样做是因为我想从嘈杂的数据中进行校准 - 一个保证会有大量准确对应的数据 - 给出执行相机校准的范围.为什么这是一个坏主意?
    • 一般来说不是一个坏主意,但毫无意义。 “相机校准”通常包括两个阶段:(1)使用线性方法的相机参数的初始估计,以及(2)通过(可选鲁棒)束调整的细化阶段。如果您预计校准图像中有很大一部分异常值,那么在阶段 (1) 中讨论 RANSAC 或类似方法(例如 MLESAC)是有意义的——即使在那里,只有在您预计较大 (>= 50% ) 的情况下离群值的一部分,否则像最小中值平方这样的方法往往更有效且更易于使用。
    猜你喜欢
    • 2014-06-19
    • 2011-04-05
    • 1970-01-01
    • 1970-01-01
    • 2015-09-24
    • 2013-01-28
    • 2014-10-23
    • 2013-11-02
    • 1970-01-01
    相关资源
    最近更新 更多