像素坐标到GPS坐标
我正在从视频数据中进行一些移动跟踪。 使用一些视频处理(即翻译为自顶向下的视图),我已经获得了移动路径。 我现在需要将路径(x,y)的像素坐标转换为世界坐标(lat,long)。
我在图像中有四个参考点以及它们相关的经度和纬度点。 (纬/长 - >像素坐标):
(51.606733, -3.986813) -> (246, 399)
(51.607357, -3.987126) -> (407, 781)
(51.607337, -3.987266) -> (838, 781)
(51.606671, -3.987175) -> (1247, 402)
如何使用这些参考点将像素坐标转换为世界坐标?
问题
由于地球表面是弯曲的,而不是平坦的,因此GPS投影到2D表面通常是一个棘手的问题。 但是,如果您提供的GPS样本数据是实际数据(顺便说一句,希望天气在斯旺西令人愉快!)我会假定数据集被限制在一个非常小的区域,因此您可以假设经度是平行的。 这个问题就变成了一个简单的代数问题,你只需要两个参考点,其中x1 != x2
和y1 != y2
。
解
ISO坐标给出为(纬度,经度)=(y,x),而绘制坐标为(x,y)。 我只是要告诉你如何做y(纬度)。 我们需要将源头(屏幕)的起源映射到目标(世界)的起源,并将源头的规模映射到世界的规模。 我将命名这些变量如下:
screenY0 //Screen origin (pixel corresponding to zero degrees latitude)
worldY0 //World origin (zero degrees latitude)
screenYscale //Screen scale (distance between 2 pixels)
worldYscale //World scale (distance between two latitude lines)
screenYpoint //Screen point (pixel y location)
worldYpoint //World point (latitude on the ground)
我将使用下面的坐标对,因为它们是最远的:
(51.606733, -3.986813) -> (246, 399)
(51.607337, -3.987266) -> (838, 781)
我们的公式将如下所示:
screenY0 + screenYscale * screenYpoint = worldY0 + worldYscale * worldYpoint.
我们知道世界的起源是0,世界的尺度是1,所以我们可以把它凝结成:
screenY0 + screenYscale * screenYpoint = worldYpoint.
我们可以插入我们的值来形成2个联立方程:
screenY0 + screenYscale * 399 = 51.606733
和screenY0 + screenYscale * 781 = 51.60733
解决:
screenY0 = 51.606733 - screenYscale * 399
和screenY0 = 51.607337 - screenYscale * 781
=> 51.606733 - screenYscale * 399 = 51.607337 - screenYscale * 781
=> screenYscale * 781 - screenYscale * 399 = 51.607337 - 51.606733
=> screenYscale * 382 = 0.000604
=> screenYscale = 0.00000158115
因此,地图上的每个像素代表一定经度的0.00000158115。 插入以查找原点:
screenY0 + screenYscale * 399 = 51.606733
=> screenY0 + 0.00000158115 * 399 = 51.606733
=> screenY0 + 0.00063087885 = 51.606733
=> screenY0 = 51.606733 - 0.00063087885
=> screenY0 = 51.6061021212
因此,0处的像素代表现实世界中的51.6061021212。
式
我们的公式来寻找真实世界的纬度是这样的:
51.6061021212 + 0.00000158115 * screenYpoint = worldYpoint。
测试
我们用另一个参考纬度来测试它:51.606671 - > 402
51.6061021212 + 0.00000158115 * screenYpoint = worldYpoint
51.6061021212 + 0.00000158115 * 402 = 51.606671
51.6061021212 + 0.0006356223 = 51.606671
51.6067377435 = 51.606671
这大致相等; 考虑到1纬度等于111.2km(在地球平均半径处),这对应于约7.4米的误差。
希望这会有所帮助,并帮助您解决经度问题,AKA x! 如果您有任何问题或希望我澄清,请发表评论。
链接地址: http://www.djcxy.com/p/47305.html