PIE SDK影像快速拼接

1.算法功能简介

   快速拼接是对若干幅互为邻接的遥感数字图像拼在一起,构成一幅整体影像的技术过程。PIE支持快速拼接算法功能的执行,下面对快速拼接算法功能进行介绍。

2.算法功能实现说明

2.1 实现步骤

第一步

算法参数设置

第二步

算法执行

第三步

结果显示

2.2 算法参数

算法名称

快速拼接

C#算法DLL

PIE.CommonAlgo.dll

C#算法名称

            PIE.CommonAlgo.ImageMosaicParamAlgo

参数结构体

  PIE.CommonAlgo.buildMosaicFileVec

参数说明

buildMosaicFileVec(生成镶嵌影像算法参数)

bmfVec

IList<buildMosaicFileInfo>

生成镶嵌结果所需参数

若IList<buildMosaicFileInfo>数量等于1 则为整幅输出镶嵌结果

若大于1 可设置分幅输出镶嵌结果

buildMosaicFileInfo

sOutFilePath

String

输出文件路径

EnvOut

IEnvelope

设置镶嵌结果输出范围

iOutBandType

Int

输出通道类型

0:3通道8位输出  

1:原始数据格式

pSrcLyrs

IList<IRasterLayer>

输入影像

存放原始数据栅格图层,数量不能小于2

2.3 示例代码

数据路径

实验中的例子是将一整幅World.tif分割成两个影像来进行快速拼接实验的

视频路径

百度云盘地址下/PIE视频教程/10.算法调用/图像预处理/快速拼接算法avi

示例代码

 1  /// <summary>
 2  /// 快速拼接算法实现了波段相同的影像快速拼接在一起
 3 /// </summary>
 4 public override void OnClick()
 5  {
 6     //影像快速拼接
 7     buildMosaicFileVec info = new buildMosaicFileVec();
 8     List<buildMosaicFileInfo> bmfVec = new List<buildMosaicFileInfo>();
 9     buildMosaicFileInfo item = new buildMosaicFileInfo();
10     //设置影像文件
11     IList<string> listFile = new List<string>();
12     string file1 = @"D:\data\图像mosaic拼接\world31.tif";
13     string file2 = @"D:\data\图像mosaic拼接\world33.tif";
14     listFile.Add(file1);
15     listFile.Add(file2);
16     int bandCount = 0;
17     int count = 0;
18     foreach (string file in listFile)
19     {
20         //判断拼接的图像的波段数是否一致
21         IRasterDataset tempDataset = DatasetFactory.OpenRasterDataset(file, OpenMode.ReadOnly);
22         if (tempDataset == null)
23         {
24             MessageBox.Show("打开数据集失败!" + file, "提示");
25             return;
26         }
27         if (count == 0)
28         {
29             bandCount = tempDataset.GetBandCount();
30         }
31         else
32         {
33             if (bandCount != tempDataset.GetBandCount())
34             {
35                 MessageBox.Show("加入文件波段数不一致!", "提示");
36                 (tempDataset as IDisposable).Dispose();
37                 tempDataset = null;
38                 return;
39             }
40         }
41         count++;
42         IRasterLayer rLayer = LayerFactory.CreateDefaultRasterLayer(tempDataset);
43         item.pSrcLyrs.Add(rLayer);
44     }
45     item.iOutBandType = 0;
46     item.bFastMosaic = true;
47     item.sOutFilePath = @"D:\data\图像mosaic拼接\world_Mosia.tif";
48     bmfVec.Add(item);
49     info.bmfVec = bmfVec;
50     //创建算法
51     ISystemAlgo algo = SystemAlgo.AlgoFactory.Instance().CreateAlgo("PIE.CommonAlgo.dll", "PIE.CommonAlgo.ImageMosaicParamAlgo");
52     if (algo == null) return;
53     algo.Params = info;
54     bool result = AlgoFactory.Instance().ExecuteAlgo(algo);
55     if (result)
56     {
57         MessageBox.Show("算法执行成功");
58         ILayer layer = LayerFactory.CreateDefaultLayer(item.sOutFilePath);
59         if (layer == null) return;               
60         m_HookHelper.ActiveView.FocusMap.AddLayer(layer);
61         m_HookHelper.ActiveView.PartialRefresh(ViewDrawPhaseType.ViewAll);
62     }
63     else
64     {
65         MessageBox.Show("算法执行失败!");
66 }
67     }
View Code

2.4 示例截图

 

posted @ 2019-06-03 15:54  PIESAT  阅读(1395)  评论(0编辑  收藏  举报