我对如何使用OpenCV findHomography方法计算最佳转换感到困惑。

我使用它的方式如下:

cv::Mat h = cv::findHomography(src, dst, CV_RANSAC, 5.f);

不管我运行多少次,我都会得到相同的变换矩阵。我以为RANSAC应该随机选择一个点子集进行拟合,所以为什么它每次都返回相同的变换矩阵?与随机数初始化有关吗?我怎样才能使这种行为实际上是随机的?

其次,如何调整此设置中的RANSAC迭代次数?通常,迭代次数基于内部比率和类似的东西。

最佳答案

findHomography已经为您提供了最佳转换。真正的问题是关于最优的含义。

例如,使用RANSAC,您将拥有最小重投影误差的模型,而使用LMEDS,您将拥有最小中值误差的模型。

您可以通过以下方式修改默认行为:

  • 通过设置RANSAC(允许的最大数量为2000)来更改maxIters的迭代次数。
  • 减少(增加)用于验证内部值和异常值(通常在1到10之间)的ransacReprojThreshold


  • 关于您的问题。



    可能您的观点足够好,以至于您总是找到最佳模型。



    RANSAC(随机抽样共识)首先选择一个随机子集,检查使用这些点构建的模型是否足够好。如果不是,则选择另一个随机子集。



    我无法想象这会有用的情况,但是您可以从srcdst中随机选择4对点,然后使用getPerspectiveTransform。除非您的观点是完美的,否则您将为每个子集获得一个不同的矩阵。

    关于opencv - OpenCV RANSAC每次都返回相同的转换,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32036021/

    10-13 08:07