我需要找到单应矩阵,它将2d图像坐标转换为真实世界坐标(2D)。我所拥有的是墙上的图像和墙上的三个不重叠的三角形。 The length of each side of the triangle is 1 meter
(在墙上),我也知道图像中三角形的所有角落位置。如何使用这些三角形信息计算homography
矩阵?
如果我假设三角形的左下角为(0,0)在墙上,那么我可以找到基于该三角形的其他2个坐标(3个已知坐标),我如何使用其他三角形的信息来找到单应矩阵。
答案 0 :(得分:1)
仅使用单纯的Homography矩阵无法将图像坐标转换为真实世界坐标。当您将图像点转换为真实世界坐标时,您将获得
此处是图像坐标,是真实世界框架中的3D点。仅从图像坐标我们不知道比例因子。所以当我们乘以Homography矩阵的逆时间时:
X',Y',Z' 不等于 X,Y,Z 。
解决 X' Y' Z' 的一种方法是找到Homography而不是找到Homography,你可以使用opencv' s solvepnp()功能。您具有3D空间中已知的三角形角的3D坐标以及相应的像素坐标。使用相机的内在参数( K ),您可以从真实世界的原点找到相机的旋转和平移。知道了相机内在因素后,您可以将 X',Y',Z' 计算为
另一种方法是,至少有3个3D点和相应的图像坐标。您可以使用线性方程求解器求解H
答案 1 :(得分:0)
因此,我假设您要将2D像素坐标映射到墙上的2D坐标。您只需要点对应(至少四个)。所以,让我们说你知道你墙上的一些点坐标,你知道这些点在图像上出现的像素坐标。
您所要做的就是将这些要点传递给现成的解决方案,例如:由findHomography或OpenCV提供的here您将为Matlab找到一些内容。
两者都返回单应性(3x3矩阵)。您可以使用它来转换更多坐标。 OpenCV使用perspectivetransform为您完成此操作(实际上是一个带Homogeneous coordinates的简单矩阵乘法,所以它在Matlab中也不是很重要。)
答案 2 :(得分:0)
之前已经问过similar question。
您可以通过定义辅助变量来解决使用来自多个三角形的点对应的单应性,辅助变量解释三角形(在现实世界中“墙坐标”)如何相对于彼此旋转和平移。然后使用非线性优化公式同时求解单应系数和辅助变量。
在您的情况下,每个三角形有N=3
点对应关系。我已经为这个问题提供了一个解决方案,如果你至少有3
个三角形,那么它将会起作用。
此外,您需要使用Equilateral triangles,但您声明已经这样做了。
有关详细信息,请参阅my answer。