用C#实现同源图像的拼接

这几天在帮老师搜集资料时,需要用到历史的高清影像。在GE上发现其提供了2米级分辨率影像的阅览但并没有提供大范围的下载途径。在国内某些地图下载提供了GE的小范围(图像大小小于50M)下载和小范围批量下载方式,而这些小范围的影像实际上是来自一幅大范围影像,是通过裁剪获得的。于是想到了批量下载多个小范围影像然后将其拼接生成大范围影像的方法。(当然,SIFT是很好的算法,但是在这个案例中没必要)

Step1 准备批量下载描述文件

按照某地图下载软件的要求,我用python写了一小段(就是因为最近在练习python语法,并不是python写这个很方便,用C#也一样),用于生成0.02°×0.02°,0.001°重叠的区域的描述文本文件。

(向左滑动查看完整代码)

Step 2 图像同名点查找

Figure 1图像重叠示意图(蓝色为参考图像,绿色为待拼接图像)

由于相邻的两幅图像存在东西或南北方向上存在0.001°的重叠范围,所以我们可以在重叠范围内查找同名点。如Figure 1所示,如果在重叠区域选择图像2中选择一小块区域,将这块区域称作模板,拿着模板在重叠区域中不断移动,最后将找到一个位置,这个位置,模板与模板下所覆盖的图像的相关系数最大,我们就认为模板左上角与模板下图像的左上角是同名点。

计算两个m×n离散图像P,L的相关系数利用下面的公式:

(向左滑动查看完整代码)

如果能够提前知道同名点在图像1中的大致范围(这个范围要比模板大,且包含模板,称为搜索区域),就能够提高效率,减少程序计算时间。通过事先的图像匹配,我获得了下面几个区域(坐标原点取图像左上角,向东、南为X、Y正):

Table 1不同情况下的搜索区域和模板(组1、组2和组3分别对应Figure 1、Figure 2左Figure 2右,每一组第一个表示搜索区域,第二个表示模板)

Figure 2几种重叠情况示意图(蓝色为参考图像,绿色为待拼接图像)

效果展示

Figure 3原始图像展示

Figure 4拼接界面

Figure 5拼接效果(截图,原图像太大)

----=END=----

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180819G1FXQU00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券