我在互联网上搜索了很多资源很多天但我无法解决问题.
我有一个项目,我应该检测一个圆形物体在飞机上的位置.因为在一个平面上,我所需要的只是x和y位置(不是z)为此我选择了图像处理.相机(单视图,非立体)位置和方向相对于平面上的参考坐标系固定并且是已知的
我已经使用opencv检测到圆心的图像像素坐标.我现在需要的只是改变坐标.到现实世界.
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] Vector不可逆.而且我不知道这是正确的方法.
内在和外在参数是已知的,我需要的是地平面上的真实世界项目坐标.由于点在一个平面上,坐标将是2个维度(深度并不重要,作为与单个视图几何体相对的参数).相机是固定的(位置,方向).如何在捕获的图像上找到该点的真实世界坐标通过相机(单一视图)?
编辑 我一直在阅读Gary Bradski和Adrian Kaehler的"学习opencv".在校准 - > Homography部分的第386页,它写成:q = sMWQ其中M是相机固有矩阵,W是3x4 [R | T],S是一个"高达"比例因子我假设与单应性概念相关,我不知道清楚.q是像素库,Q是真正的coord.据说为了获得在图像平面上检测到的物体的坐标的真实世界坐标(在棋盘平面上); Z = 0然后W = 0中的第三列(假设轴旋转),修剪这些不必要的部分; W是3x3矩阵.H = MW是3x3单应矩阵.现在我们可以反转单应矩阵并且左乘q得到Q = [XY 1],其中Z coord被修剪.
我应用了上面提到的算法.我得到了一些不能在图像角落之间的结果(图像平面与摄像机平面平行,距摄像机约30厘米,我得到的结果就像3000)(棋盘方形尺寸以毫米为单位输入,所以我假设输出的真实世界坐标再次以毫米为单位).无论如何,我还在努力.顺便说一下,结果非常非常大,但我将Q中的所有值除以Q的第三个分量得到(X,Y,1)
最终编辑
我无法完成相机校准方法.无论如何,我应该从透视投影和变换开始.这样,我通过图像平面和物理平面之间的透视变换(通过两个平面上的4对相应的共面点生成变换)进行了非常好的估计.然后简单地在图像像素点上应用变换.