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 } |
2.4 示例截图