如何使用它在其他图像中的位置对图像中像素的位置进行三角测量?

时间:2017-05-17 00:47:00

标签: python opencv computer-vision

我有四个来自略有不同位置的场景的航拍图像。每个图像在每个图像中具有相同的交叉可见。我知道3张图像中十字的确切位置(像素x和y),以及所有图像对之间的单应性和基本矩阵。

enter image description here

是否可以使用此信息来准确地对第四张图像中十字的位置进行三角测量?不幸的是,如果我只是将任何图像的十字形位置映射到带有单应性的第四个图像,则会出现一些错误。它在附近但不准确,我希望有一种方法来限制搜索,也许使用极线?

1 个答案:

答案 0 :(得分:1)

假设img0包含您要查找的目标,img1img2img3的目标位置为(x1, y1),{{1} },(x2, y2)。如果您知道所有图片对之间的单应性(例如,(x3, y3)H1H2H3img1和{{的单应性1}}到img2),然后您可以简单地将这些像素位置乘以单应性,以获得img3中的估计坐标。你不能精确地进行三角测量,但是你可以从所有三个图像和单应性中找到估计的扭曲点,并取平均值,或者根据你的喜好将它们组合起来,只要你的单应性是准确的,这应该给你一个很好的估计够了。

Homography矩阵是3x3矩阵,你的点是2向量。为了应用你的变换(或乘以矩阵和向量),你需要齐次坐标;您的积分位于img0的格式。然后,要从img0获取像素(x, y, 1)中的位置,乘法如下所示:

img0

您的输出将是矢量,但不是同质的。结果点将具有缩放因子img1;除以[s*x0] [x1] [h00 h01 h02] [x1] [s*y0] = H1 * [y1] = [h10 h11 h12] * [y1] [s ] [ 1] [h20 h21 h22] [ 1] 以获得最终坐标s。只需对您拥有的三个目标位置和相应的单应性进行此操作,您最终会得到三个估计位置,然后您可以对它们进行平均。

完整示例。

这是使用一些提供地面实况数据的图像,可用here

Here's my results

在第一张图像中,从了解其他三个中的位置以及数据集中给出的地面真实单应性来估计鸡眼中间的十字架的位置。我输出每个单应性的估计值,它们的平均值和圆形像素值,结果是舍入的估计像素值是精确的(因为单应性非常准确)。

s

这是一个完整的编码示例,只需从该数据集下载图像并将其弹出到该文件夹​​中的脚本中并运行。

(x0, y0)