我对如何使用OpenCV findHomography
方法计算最佳转换感到困惑。
我使用它的方式如下:
cv::Mat h = cv::findHomography(src, dst, CV_RANSAC, 5.f);
不管我运行多少次,我都会得到相同的变换矩阵。我以为RANSAC应该随机选择一个点子集进行拟合,所以为什么它每次都返回相同的变换矩阵?与随机数初始化有关吗?我怎样才能使这种行为实际上是随机的?
其次,如何调整此设置中的RANSAC迭代次数?通常,迭代次数基于内部比率和类似的东西。
最佳答案
findHomography已经为您提供了最佳转换。真正的问题是关于最优的含义。
例如,使用RANSAC
,您将拥有最小重投影误差的模型,而使用LMEDS
,您将拥有最小中值误差的模型。
您可以通过以下方式修改默认行为:
RANSAC
(允许的最大数量为2000)来更改maxIters
的迭代次数。ransacReprojThreshold
。 关于您的问题。
可能您的观点足够好,以至于您总是找到最佳模型。
RANSAC(随机抽样共识)首先选择一个随机子集,检查使用这些点构建的模型是否足够好。如果不是,则选择另一个随机子集。
我无法想象这会有用的情况,但是您可以从
src
和dst
中随机选择4对点,然后使用getPerspectiveTransform。除非您的观点是完美的,否则您将为每个子集获得一个不同的矩阵。关于opencv - OpenCV RANSAC每次都返回相同的转换,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32036021/