码迷,mamicode.com
首页 > 编程语言 > 详细

Google Earth 图片叠加Geo-referencing算法

时间:2015-09-03 06:58:08      阅读:378      评论:0      收藏:0      [点我收藏+]

标签:

在Google Earth中,可将一个图片添加进来成为一个“叠加层”(菜单:添加->图像叠加层),通过对图片叠加层进行平移、旋转、拉伸等操作,使图片上的地理要素与Google Earth中的卫星图像重合,这一过程称之为对图像的Geo-referencing,即:图像的像素空间(以像素的行、列为坐标)与地理空间(以经纬度为坐标)之间的映射。

以深圳市宝安区绿道地图(地址:http://imgbdb2.bendibao.com/szbdb/20143/20/201432014584100.jpg)为例。将地图添加为图片叠加层,选取地图上的3个跨度较大的兴趣点,对地图进行平移、旋转、拉伸等操作,使3个兴趣点与卫星地图上的实际位置重合。如下图:

技术分享

 

所选择的3个兴趣点分别是:

  • 广田路与燕山大道交叉点,像素坐标为(995, 288),地理坐标为(113.852873, 22.806881)
  • 宝安大道与新安五路交叉点,像素坐标为(1136, 2318),地理坐标为(113.875381, 22.57191)
  • 龙大高速与机荷高速交叉点,像素坐标为(1904, 1339),地理坐标为(113.969075, 22.686780)

以上像素坐标(x, y)中,x、y分别为像素的列和行,原点在图像左上角;地理坐标(x, y)中x、y分别为经度和维度,经度以向东为正,维度向北为正。后同。

Google Earth对图片叠加层允许的操作有平移(Translate)、旋转(Rotate)、拉伸(Scale)3种;另外,由于像素坐标y轴方向与地理坐标y轴(纬度)相反,这里隐含了相对于x轴的反射变换(Reflect)。因此,图片叠加层的Geo-referencing是一种2D仿形变换。所谓仿形变换,有这样的特点:直线变换后仍为直线,平行线变换后仍为平行线,进而平行四边形变换后仍为平行四边形。

作为检验,在经过上述“3点定位”过程后,对地图中的其它的地理特征(例如:道路)与卫星图片进行对比,发现符合度较高。由此我们得出结论:Google Earth的图片叠加层是对图片的像素空间向地理空间的2D仿形变换。

1,从像素空间到地理空间的变换矩阵

计算机图形学给出2D仿形变换的公式为:

技术分享

其中,(x, y) 为变换前的坐标,(x‘, y‘) 为变换后的坐标,3x3矩阵为变换矩阵。注意,变换矩阵的第3行为常数。

要求解变换矩阵,只需求解6个未知数m11、m12、...m23。如果已知3对变换点的坐标,代入上式,将会得到由6个线性方程构成的方程组,求解该方程组,即可得到变换矩阵。这也是前面添加图片叠加层时,需要对3个点进行定位的原因。

获得从像素空间向地理空间的变换矩阵后,就可计算出图片上任一点(像素)的地理坐标(经纬度)。

2,从像素空间到地理空间的变换矩阵的另一种求解方法

如果将Google Earth中的图片叠加层导出为KML(在“位置”面板中选中图片叠加层,然后点击菜单:文件->保存->将位置另存为),检查KML文件的内容,摘录如下:

 1         <GroundOverlay>
 2             <name>未命名图像叠加层</name>
 3             <Icon>
 4                 <href>http://imgbdb2.bendibao.com/szbdb/20143/20/201432014584100.jpg</href>
 5                 <viewBoundScale>0.75</viewBoundScale>
 6             </Icon>
 7             <LatLonBox>
 8                 <north>22.84065998787623</north>
 9                 <south>22.54036701934297</south>
10                 <east>113.9954174014041</east>
11                 <west>113.7305967071939</west>
12                 <rotation>1.042495828443866</rotation>
13             </LatLonBox>
14         </GroundOverlay>

根据KML文件规范,<LatLonBox>定义了图片叠加层的矩形边界框,其中<rotation>定义了相对于边界框中心点的旋转角度(以逆时针方向为正,单位为度)。根据KML边界框定义(包括旋转角度)也可以计算出变换矩阵。

我们将整个过程分解为以下“基本变换”:

技术分享

技术分享

 

(1)缩放

初始时,图像坐标系与地理坐标系重合,图像宽度为W、高度为H。将图像缩放到KML边界框的大小,即宽度为e-w、高度为n-s,其中,e为边界框右边经度(east)、w为左边经度(west)、n为上边纬度(north)、s为下边纬度(south),后同。

缩放的变换矩阵为:

技术分享

(2)平移

将图片中心移动到原点,变换矩阵为:

技术分享

(3)反射

由于像素空间的y轴方向与地理坐标系y轴方向相反,需要将图像相对于x轴反射,其变换矩阵为:

技术分享

(4)旋转

绕原点按逆时针方向旋转角度θ,变换矩阵为:

技术分享

(5)平移

将原点移动到KML边界框中心,变换矩阵为:

技术分享

 

最终,从像素空间到地理空间的变换矩阵为 M=M5*M4*M3*M2*M1。

获得了 从像素空间到地理空间的变换矩阵后,即可将地理位置(经纬度)定位到图片上的像素。

3,从地理空间到像素空间的变换矩阵

从地理空间到像素空间的变换是从像素空间到地理空间的变换的逆运算。仿形变换的逆运算也是仿形变换,二者的变换矩阵互为逆矩阵。要计算从地理空间到像素空间的变换矩阵,可以使用上面第1节所介绍的求解线性方程组的方法。如果已知了从像素空间到地理空间的变换矩阵,也可以直接求逆矩阵,例如使用特征分解法。

 

Google Earth 图片叠加Geo-referencing算法

标签:

原文地址:http://www.cnblogs.com/pffar/p/geo_referencing.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!