zoukankan      html  css  js  c++  java
  • 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 示例截图

  • 相关阅读:
    on SDN
    距离矢量路由协议中路由环路问题的解决方法:
    图的基本算法(BFS和DFS)
    OSPF邻居状态机
    Dijkstra 算法,用于对有权图进行搜索,找出图中两点的最短距离
    关于Dijkstra算法
    RIP路由协议及工作原理
    帧中继网络 (转)
    OSPF建立邻居、邻接关系 学习笔记
    OSPF中 hello报文的 内容
  • 原文地址:https://www.cnblogs.com/PIESat/p/10968013.html
Copyright © 2011-2022 走看看