c++ - 计算二维平面上单应性的精度

标签 c++ opencv computer-vision homography

我正在尝试找到一种方法来参数化我的单应性计算的精度。我想获得一个值,该值描述在特定位置进行的测量的单应性计算的精度。

我目前已经成功地计算了单应性(使用 cv::findHomography),我可以使用它将我的相机图像上的一个点映射到二维 map 上(使用 cv::perspectiveTransform )。现在我想在我的 2D map 上跟踪这些对象并为此我想考虑到我的相机图像后面的对象在我的 2D map 上的位置不如一直在的对象前面。

我查看了关于此 website 的以下示例那提到了平面拟合,但我真的不明白如何使用这种方法正确填充矩阵。结果的可视化似乎确实符合我的需要。有什么方法可以用标准的 OpenCV 函数做到这一点吗?

编辑: 感谢弗朗切斯科的建议。但是,我想我正在寻找与您的答案不同的东西。我不是要测试单应性本身的精度,而是要测试一个真实相机 View 中的测量密度与我创建的 map 上的实际尺寸之间的关系。我想知道当我在相机图像中检测到 1 个像素时,此时我的 map 上会有多少米。

当然,我可以通过在我的相机图像上测量周围的一些像素来计算,然后使用单应性来查看每次我做单应性时这代表我的 map 上有多少米,但我不想计算这个每次。我想要的是有一个公式可以告诉我图像中的像素与 map 上的像素之间的关系,这样我就可以在 map 上进行跟踪时考虑到这一点。

最佳答案

您正在寻找的是所谓的“预测误差线”或“预测不确定性”。你绝对应该查阅一本关于估计理论的好介绍性书籍以获取详细信息(例如 this one )。但简而言之,预测不确定性是......

  • 图像1中的某个像素p将是图像2中像素p'在单应性H...下的映射H(p')
  • 鉴于已用于估计 H 的匹配对 (q0, q0'), (q1, q1'), ... 中的误差导致 H 的不确定性,...
  • 但假设模型是正确的,也就是说,图像 1 和 2 之间的真实映射实际上是单应性的(尽管单应性本身的估计参数可能会受到误差的影响)。

为了估计此概率分布,您需要一个测量误差模型,以及一个测量误差如何通过(单应性)模型传播的模型。

关于c++ - 计算二维平面上单应性的精度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18588353/

相关文章:

c++ - NAN 差异 - std::nan 与 quiet_NaN() 与宏 NAN

scala - 如何在 Scala 中使用来自 SBT(简单构建工具)的 JavaCV?

Java颜色检测

opencv - 在opencv上检测非闭合轮廓

c++ - 使用 MSVC 的模块中的访问冲突

c++ - VS2012 C++ 中奇怪的正则表达式行为

c++ - 在 C++ 中设计多维数组

python - 如何从VLC媒体播放器获取帧

python - 适当的轮廓中断

python - Tensorflow TFRecordDataset.map 错误