zoukankan      html  css  js  c++  java
  • PIE SDK波谱运算

     

    1.算法功能简介

        波谱运算(Spectral Math)是一种灵活的波谱处理工具,可以用数学表达式或IDL程序对波谱曲线(以及选择的多波段图像)进行处理。波谱曲线可以来自一幅多波段图像的Z剖面、波谱库或ASCII文件。

        如图1为波谱运算的简单示意图——求三个波谱曲线的和。在表达式s1+s2+s3中(波谱运算中的变量是以s开头),可以分别给s1、s2、s3指定为一条波谱曲线,得到的结果是一条波谱曲线(x值与s1、s2、s3一样,y值是三者之和);也可以s1是一个多波段图像文件(其实是每个像素点的Z-剖面),s2和s3分别是两条波谱曲线,得到的结果是一个与输入的多波段图像一样波段数和行列数的图像。

     

    图1波谱运算示意图

        PIE SDK支持算法功能的执行,下面对波谱运算算法功能进行介绍。

    2.算法功能实现说明

    2.1.  实现步骤

    第一步

    算法参数设置

    第二步

    算法执行

    第三步

    结果显示

    2.2. 算法参数

    C#算法名称

    PIE.CommonAlgo. BandSpecAlgo

    参数结构体

    BandOper_Exchange_Info

    参数说明

    StrExp

    String

    波段运算公式,如"(b4-b3)/(b4+b3)";

    SelectFileBands

    IList<Int>

    选中的图像对应的波段band编号(是波段编号而非波段索引),根据波段运算公式的波段大小先后顺序b3、b4确定顺序。new List<int> {3, 4}

    SelectFileNames

    IList<String>

    选中的图像对应的文件file名称,根据波段运算公式的波段大小先后顺序b3、b4确定顺序。new List<String> {b3对应文件路径, b4对应文件路径}

    OutputFilePath

    String

    输出文件路径

    FileTypeCode

    String

    根据输出类型获得文件编码类型

    .tif/.tiff——GTiff

    .img—————HFA

    其他—————ENVI

    FuncName

    String

    C#算法名称

    2.3. 示例代码

    项目路径

    百度云盘地址下/PIE示例程序/10.算法调用/多功能工具/  FundamentalToolDemo.BandSpecDemo 

    数据路径

    百度云盘地址下/ PIE示例数据/栅格数据/04.World/World.tif

    视频路径

    百度云盘地址下/PIE视频教程/10.算法调用/多功能工具/波谱运算算法.avi

    示例代码

     1          /// <summary>
     2         ///波谱运算算法测试,本算法实现了将World.tif文件的全部波段(称为一个光谱文件)生成World4.tif文件
     3         /// </summary>
     4         private void Test_KrigingInterpolationAlgo()
     5         {
     6             #region 1、参数设置
     7             PIE.CommonAlgo.BandOper_Exchange_Info info = new PIE.CommonAlgo.BandOper_Exchange_Info();
     8             info.StrExp = "s1";
     9             info.SelectFileBands = new List<int> { 1 };
    10             info.SelectFileNames = new List<string> { @"D:DataWorld.tif", @"D:DataWorld.tif" };
    11             info.OutputFilePath = @"D:DataWorld4.tif";
    12             info.FileTypeCode = "GTiff";
    13 
    14             PIE.SystemAlgo.ISystemAlgo algo = PIE.SystemAlgo.AlgoFactory.Instance().CreateAlgo("PIE.CommonAlgo.dll", "PIE.CommonAlgo.BandSpecAlgo");
    15             if (algo == null) return;
    16 #endregion
    17 
    18             //2、算法执行
    19             PIE.SystemAlgo.ISystemAlgoEvents algoEvents = algo as PIE.SystemAlgo.ISystemAlgoEvents;
    20             algo.Name = "波谱运算";
    21             algo.Params = info;            PIE.SystemAlgo.AlgoFactory.Instance().ExecuteAlgo(algo);           
    22             //3、结果显示
    23 ILayer layer = PIE.Carto.LayerFactory.CreateDefaultLayer(@"D:DataWorld4.tif");
    24             m_HookHelper.ActiveView.FocusMap.AddLayer(layer);          m_HookHelper.ActiveView.PartialRefresh(ViewDrawPhaseType.ViewAll);                      
    25                     }
    View Code

    2.4. 示例截图

     

  • 相关阅读:
    mybatis框架查询用户表中的记录数
    文件的上传和下载
    怎样在一条sql语句中将第一列和第二列加和的值作为第三列的值
    [OS] 进程的虚地址空间
    [网络] TCP/IP协议族各层的协议汇总
    [面试] C++ 虚函数表解析
    [OS] 堆栈、堆、数据段、代码段
    [算法] 并查集概念及其实现
    [OS] 我与大牛的对话!
    [C] int *p[4]与int (*q)[4]的区别
  • 原文地址:https://www.cnblogs.com/PIESat/p/10157179.html
Copyright © 2011-2022 走看看