Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Opencv 从单应恢复平面_Opencv_Normals_Homography_Plane - Fatal编程技术网

Opencv 从单应恢复平面

Opencv 从单应恢复平面,opencv,normals,homography,plane,Opencv,Normals,Homography,Plane,我使用openCV通过使用特征并匹配它们来计算与同一平面视图相关的单应性。有没有办法从单应性中恢复平面本身或平面法线?(我正在寻找一个方程式,其中H是输入,法线n是输出。)如果您有摄像机的校准,您可以提取平面的法线,但不能提取到平面的距离(即,您获得的变换符合比例),如图所示。我不知道有什么实现可以做到这一点,但这里有几篇文章讨论了这个问题(我警告你这并不简单): 如果平面上两点之间至少有实际距离,则可以恢复变换的实际平移(即到平面的距离)。如果是这种情况,使用OpenCV最简单的方法是首先计算

我使用openCV通过使用特征并匹配它们来计算与同一平面视图相关的单应性。有没有办法从单应性中恢复平面本身或平面法线?(我正在寻找一个方程式,其中H是输入,法线n是输出。)

如果您有摄像机的校准,您可以提取平面的法线,但不能提取到平面的距离(即,您获得的变换符合比例),如图所示。我不知道有什么实现可以做到这一点,但这里有几篇文章讨论了这个问题(我警告你这并不简单):


如果平面上两点之间至少有实际距离,则可以恢复变换的实际平移(即到平面的距离)。如果是这种情况,使用OpenCV最简单的方法是首先计算单应性,然后获得平面上的四个点及其2D坐标和真实3D坐标(如果在平面上进行真实测量,您应该能够获得它们),最后使用PnP。PnP将为您提供一个真实的变换。

如果您有摄像机的校准,您可以提取平面的法线,但不能提取到平面的距离(即,您获得的变换达到比例),如图所示。我不知道有什么实现可以做到这一点,但这里有几篇文章讨论了这个问题(我警告你这并不简单):


如果平面上两点之间至少有实际距离,则可以恢复变换的实际平移(即到平面的距离)。如果是这种情况,使用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是图像宽度,焦距是相机焦距。请注意,摄影机平截头体在鸟瞰视图中看起来像梯形


矫正图像定义为使两幅图像中的极线水平并位于同一行。根据你的描述,我知道你只是想扭曲平面,使其与相机传感器或图像平面平行。这与矫正无关——我更愿意称之为获得鸟瞰图或俯视图

但我看到了困惑的根源。图像校正通常涉及将每个图像与单应矩阵相乘。在您的情况下,通过传感器平面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是图像宽度,焦距是相机焦距。请注意,摄影机平截头体在鸟瞰视图中看起来像梯形


恐怕这更像是一个线性代数问题。你应该找到给定初始平面和变换矩阵的平面方程。恐怕这更像是一个线性代数问题。你应该找到给定初始平面和变换矩阵的平面方程。我实际上对到平面的距离不感兴趣。我想根据平面校正图像(因此相机位置与平面直接正交)。我不是