找到图像点的真实世界坐标
我在互联网上搜索了很多天的资源,但我无法解决问题。
我有一个项目,我应该在一架飞机上检测一个圆形物体的位置。 由于在飞机上,我所需要的只是x和y位置(而不是z)。为此我选择了图像处理。 相机(单视图,不是立体声)的位置和方向相对于平面上的参考坐标系是固定的并且是已知的
我已经使用opencv检测了圆心的图像像素坐标。 我需要的是现在转换coord。 到现实世界。
http://www.packtpub.com/article/opencv-estimating-projective-relations-images在这个网站和其他网站中,同形转换命名为:
p = C [R | T] P; 其中P是现实世界坐标,p是像素坐标(在同形坐标中)。 C是代表固有参数的相机矩阵,R是旋转矩阵,T是平移矩阵。 我已经遵循了关于在opencv上校准摄像头的教程(应用cameraCalibration源文件),我有9个精美的chessbordimages,并且作为输出,我具有内在相机矩阵,以及每个图像的平移和旋转参数。
我有3x3内在相机矩阵(焦距和中心像素)和一个3x4非本征矩阵[R | T],其中R是左3x3,T是3x1。 根据p = C [R | T] P公式,我假设通过将这些参数矩阵与P(世界)相乘我们得到p(像素)。 但是我需要的是将p(像素)坐标投影到地平面上的P(世界坐标)。
我正在学习电气和电子工程。 我没有采取图像处理或高级线性代数类。 正如我从线性代数课程中记得的那样,我们可以将变换操作为P = [R | T] -1 * C-1 * p。 然而,这是在欧几里德协调制度。 我不知道这样的事情是可能的在hompographic。 而且3x4 [R | T]向量不可逆。 此外,我不知道这是正确的方式去。
内在和外在参数是已知的,我只需要在地平面上真实世界的项目坐标。 由于点在平面上,因此坐标将是2维(深度并不重要,因为参数与单视图几何体相反)。摄像机是固定的(位置,方向)。如何找到拍摄的图像上点的真实世界坐标由相机(单一视图)?
编辑我一直在阅读Gary Bradski和Adrian Kaehler的“学习opencv”。 在校准 - > Homography部分的第386页上,它写成:q = sMWQ其中M是相机固有矩阵,W是3x4 [R | T],S是“我认为与单应性概念有关的”高达“比例因子,知道清楚.q是像素cooord和Q是真正的坐标。 据说为了获得在图像平面上检测到的物体的坐标的真实世界坐标(在棋盘平面上) Z = 0,那么W = 0中的第三列(我假设的轴旋转),修剪这些不必要的部分; W是一个3x3矩阵。 H = MW是一个3×3的单应性矩阵。现在我们可以将单应矩阵求逆并将其与q相乘以得到Q = [XY 1],其中Z坐标被修整。
我应用了上述算法。 并且我得到了一些不能在图像角落之间的结果(图像平面与相机的〜30厘米前面的摄像机平面平行,而我得到的结果像3000)(棋盘方形尺寸以毫米为单位输入,所以我假设输出的真实世界坐标再次以毫米为单位)。 无论如何,我仍然在尝试的东西。 顺便说一下,结果前面非常大,但我把Q中的所有值除以Q的第三个分量得到(X,Y,1)
最终编辑
我无法完成相机校准方法。 无论如何,我应该从透视投影和变形开始。 这样,我用图像平面和物理平面之间的透视变换(已经在两个平面上由4对相应的共面点生成变换)做出了非常好的估计。 然后,简单地将变换应用于图像像素点。
你说:“我有内在的相机矩阵,以及每个图像的平移和旋转参数”,但这些是从相机到棋盘的平移和旋转,这些与你的圆形无关,但如果你真的有翻译和旋转矩阵,然后获得3D点是非常容易的。
以均匀表示法在屏幕点上应用逆内蕴矩阵:C-1 * [u,v,1],其中u = col-w / 2和v = h / 2-row,其中col,row为图像列,行和w,h是图像的宽度和高度。 因此,您将获得具有所谓相机标准化坐标p = [x,y,z] T的3d点。 您现在需要做的就是减去平移并应用转置旋转:P = RT(pT)。 操作顺序与旋转并翻译的原稿相反; 请注意,转置旋转对原始旋转进行逆运算,但比R-1计算快得多。
链接地址: http://www.djcxy.com/p/30623.html