我无法在任何地方找到这个问题的解决方案,所以我在这里询问希望有人能找到解决方案。
给定图像,是否可以找到图像中绘制的矩形的“实际尺寸”,其目的是在道路水平面上的投影?
我有可能解决此问题所需的任何信息:
但是我什至想念公式来开始写代码。
这里有 2 张来自 Google 的屏幕截图。在它们中,矩形的大小相同,只是向上移动,这产生了另一个大问题:透视。
环顾四周,似乎没有人提到水平面上的投影和透视。老实说,我什至不知道从哪里开始,我以前从未处理过这样的事情。 如果我没有说清楚,请随时询问。
编辑1: 这里有两张图片可以帮助您更好地理解问题。
您的问题本质上可以归结为“地面上对应于给定像素坐标位置的位置是什么”,因为一旦有了这个位置,确定四边形四个角的地面位置就很容易了。
如果您假设使用针孔相机,则地面上的一点会通过针孔直接照射到传感器。因此,最重要的部分是将传感器坐标系正确嵌入到 3D 空间中。
步骤 1 到 5 应允许您在生成的图像中获取 (x, y) 位置,并将它们转换为正确定位的传感器上相应点的 3d 位置。该 3d 矢量的任何倍数都是传感器上的点和针孔所跨越的线上的点。选择也位于地平面的倍数,即具有与地面匹配的一个非零坐标。这是你在地面上的位置。
所有这些都将通过使图像中的不同位置对应于地面上的不同位置来处理透视,这样传感器上的相同像素距离并不对应于地面上的相等距离。
OpenCV 可能有一些工具可以帮助解决所有这些问题,但理解如何正确使用这些工具可能比将 4 个矩阵相乘来组合我上面概述的基本变换更困难。如果您不能假设相机像针孔相机一样工作,那么事情就会变得更加复杂。
相关主题:如果您有 4 个匹配点而不是相机参数,请参阅 从 4 个投影点查找变换矩阵 了解如何计算矩阵,并参阅 如何从透视投影计算真实长度? 如果您没有相机参数你知道平面上可见物体的大小。