Math 将三维坐标投影到具有已知点的二维图像上
我正在编写一个.NET程序,它允许用户通过识别图像上的特定点,然后指定与每个点关联的真实世界坐标来注册图像 图像注册过程还要求用户指定摄像机的坐标 我希望在图像注册后能够根据它们的真实坐标在图像上绘制其他点 我已经读了很多关于透视投影的书,但我很难让它正常工作。我必须承认,我的数学技能不是他们应该具备的,这是斗争的一部分。我被卡住的地方是试图确定焦距和到显示屏表面的距离: 本文中称为观察者的位置(e[x,y,z]): 我也提到了这篇文章: http://www.shotlink.com/Tour/WebTemplate/shotlinknew.nsf/2c47cc31e412bc4985256e6e00287832/c1743b40acf6aa03852575b7007122b0/$FILE/Plotting%203D%20ShotLink%20Data%20on%202D%20Images.pdf 它从视野中提取焦距,这似乎是事先知道的,但在我的例子中不是 所以我想我的问题是,有没有一种方法可以根据图像上已知点的位置反向确定焦距和/或视野?还是我看得不对,也许有更简单的方法来实现最终目标?Math 将三维坐标投影到具有已知点的二维图像上,math,opengl,3d,gis,projection-matrix,Math,Opengl,3d,Gis,Projection Matrix,我正在编写一个.NET程序,它允许用户通过识别图像上的特定点,然后指定与每个点关联的真实世界坐标来注册图像 图像注册过程还要求用户指定摄像机的坐标 我希望在图像注册后能够根据它们的真实坐标在图像上绘制其他点 我已经读了很多关于透视投影的书,但我很难让它正常工作。我必须承认,我的数学技能不是他们应该具备的,这是斗争的一部分。我被卡住的地方是试图确定焦距和到显示屏表面的距离: 本文中称为观察者的位置(e[x,y,z]): 我也提到了这篇文章: http://www.shotlink.com/Tou
编辑:我被模式上的混合单元弄糊涂了。因此,我对我的答案做了一些修改
如果我们看看投影背后的数学,我觉得这是可行的 下面是一个不太严格的水平坐标的情况模式(我混合了真实世界的坐标和像素,试图说明您的情况): 与:
,用户给定的点之一,其投影位置相对于相机定义的相对坐标系(应用平移和旋转后)D
摄像机点-上述坐标系的原点E
图片平面中的结果点,以像素为单位显示B
和u
。图片平面的尺寸为v
xw
像素h
焦距(与f
,x
,y
…)以像素为单位,z
其实际单位值,以及f
水平半视角-您要计算的值α
您可以看到三角形ECD和EBM相似,因此使用,我们得到:
EM/EC=MB/CD
(我们正在比较比率,因此,如果等式的左侧成员使用真实世界的单位,而右侧成员使用像素,则没有问题。真实世界的值除以像素1)f/z=u/x
f=u/x*z
α
F
,我想您需要知道相机传感器的尺寸r\u x
xr\u y
,因为:
tan(α)=(r_x/2)/f
f=r_x/(w/2)*f
α
,您可以通过以下方式获得:
tan(α)=(w/2)/f
如果您想与您指出的维基百科文章进行对比,我们一直在使用: 其中:
=(d_x,d_y,d_z)
,点在相机系统中的位置(x,y,z)
=(sux,suy)
,可打印表面的大小(w,h)
=(r\ux,r\uy,r\uz)
,记录表面的特征(r\ux,r\uy,f)
=(b_x,b_y)
,在可打印表面上的位置(u,v)