【发布时间】:2013-07-23 06:24:14
【问题描述】:
我已经使用 openCV 通过使用特征并匹配它们来计算与同一平面的视图相关的单应性。有没有办法从这个单应性中恢复平面本身或平面法线? (我正在寻找一个方程,其中 H 是输入,正常 n 是输出。)
【问题讨论】:
-
恐怕这更像是一道线性代数题。你应该找到给定初始平面和变换矩阵的平面方程。
标签: opencv normals homography plane
我已经使用 openCV 通过使用特征并匹配它们来计算与同一平面的视图相关的单应性。有没有办法从这个单应性中恢复平面本身或平面法线? (我正在寻找一个方程,其中 H 是输入,正常 n 是输出。)
【问题讨论】:
标签: opencv normals homography plane
如果你有相机的校准,你可以提取平面的法线,但不能提取到平面的距离(即你获得的变换是按比例的),如Wikipedia explains。我不知道有什么实现方法,但这里有几篇处理这个问题的论文(我警告你这并不简单):Faugeras & Lustman 1988、Vargas & Malis 2005。
如果平面上的两点之间至少有一个实际距离,则可以恢复变换的实际平移(即到平面的距离)。如果是这种情况,使用 OpenCV 最简单的方法是首先计算单应性,然后获得平面上的四个点及其 2D 坐标和真实的 3D 坐标(如果你有真正的测量,你应该能够获得它们在飞机上),最后使用 PnP。 PnP 将为您带来真正的转变。
【讨论】:
校正图像的定义是使核线水平并在两个图像中位于同一行。根据您的描述,我知道您只是想扭曲平面,使其平行于相机传感器或图像平面。这与整改无关,我宁愿称其为鸟瞰图或俯视图。
我看到了混乱的根源。图像的校正通常涉及将每个图像与单应矩阵相乘。在您的情况下,尽管传感器平面 b 中的每个点: Xb = Hab * Xa = (Hb * Ha^-1) * Xa,其中 Ha 是从世界平面到传感器 a 的单应性; Ha 和固有相机矩阵将为您提供平面方向,但我没有看到将 Hab 分解为 Ha 和 Hb 的简单方法。
一个经典的(也是困难的)方法是找到一个基本矩阵,从中恢复基本矩阵,将基本矩阵分解为相机旋转和平移(按比例),校正两个图像,执行密集立体,然后拟合将平面方程转换为您重建的 3d 点。
如果您对地平面感兴趣并且您操作嵌入式设备,那么您甚至不需要两个框架 - 可以从单张照片中轻松恢复顶视图、从地面的相机高度 (H) 和陀螺仪(或方向矢量)读数。下面的一个简单的图表解释了 2D 情况下的过程:第一张图显示了如何将 Z(深度)坐标恢复到地平面上的每个点;第二张图显示了俯视图,纵轴为 z,横轴 x = (img.col-w/2)*Z/focal;这里的 img.col 是图像列,w - 图像宽度,focal 是相机焦距。请注意,在鸟瞰图中,相机平截头体看起来像一个梯形。
【讨论】: