zoukankan      html  css  js  c++  java
  • PIE SDK图像裁剪

     

    1.算法功能简介

        图像裁剪的目的是获取选定的影像范围区域。图像裁切工具提供像素范围裁切、矢量裁切、栅格图像裁切和几何图元裁切四种方式。 像素范围裁切是基于像素坐标获取矩形裁切区域的裁切方式;矢量裁切是基于矢量地理坐标获取任意形状裁切区域的裁切方式; 栅格图像裁剪是基于栅格文件的坐标获取裁剪区域的裁剪方式; 几何图元裁切是基于交互方式在主视图上绘制多边形来获取裁切范围的裁切方式。

        PIE支持算法功能的执行,下面对图像裁剪算法功能进行介绍。

    2.算法功能实现说明

    2.1. 实现步骤

    第一步

    算法参数设置

    第二步

    算法执行

    2.2.  算法参数

    算法名称

    图像裁剪

    C#算法DLL

    PIE.CommonAlgo.dll

    C#算法名称

    PIE.CommonAlgo.ImageClipAlgo

    参数结构体

    DataPreImgClip_Exchange_Info

    参数说明

    InputFilePath

    String

    输入文件

    (*.tif;*.tiff;*.bmp;*.img;*.jpg;*.ldf)

    Type

    Int

    裁剪类型

    0为以栅格来裁剪;1为用shp文件; 2为几何范围来裁剪

    ShpFilePath

    String

    如果以shp文件裁剪,需要输入的shp文件路径

    OutputFilePath

    String

    输出文件路径

    (*.tif;*.tiff; *.img)

    FileType

    String

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

    .tif/.tiff——GTiff

    .img—————HFA

    其他—————ENVI

    XStart

    Int

    裁剪范围起始X

    XEnd

    Int

    裁剪范围终点X

    YStart

    Int

    裁剪范围起始Y

    YEnd

    Int

    裁剪范围终点Y

    bInvalidValue

    bool

    是否设置无效值

    InvalidValue

    double

    无效值

    FuncName

    String

    功能名称

    ListBands

    IList<Int>

    输出裁剪影像的波段

    Geometry

    IGeometry

    裁剪几何形状

    2.3. 示例代码

    项目路径

    百度云盘地址下/PIE示例程序/10.算法调用/图像预处理/ClipAlgoDemo.Form1

    数据路径

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

    百度云盘地址下/PIE示例数据/ 矢量数据/Shape/省级行政区.shp

    视频路径

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

    示例代码

      1         //(一)通过栅格范围裁剪
      2         /// <summary>
      3         ///图像裁剪算法测试,本算法实现了将World.tif根据起始点(0,0)到终止点(500,500)的矩形范围裁剪生成clip_xy.tif文件
      4         /// </summary>
      5         private void button_xy_Click ()
      6         {
      7             #region 1、参数设置
      8             //Clip裁剪
      9             PIE.CommonAlgo.DataPreImgClip_Exchange_Info info = new PIE.CommonAlgo.DataPreImgClip_Exchange_Info();
     10 
     11             info.InputFilePath = @"D:DataWorld.tif";  //待裁剪影像
     12             PIE.DataSource.IRasterDataset rDataset = PIE.DataSource.DatasetFactory.OpenRasterDataset(info.InputFilePath, PIE.DataSource.OpenMode.ReadOnly);
     13             if (rDataset == null) return;
     14             int count=rDataset.GetBandCount();
     15             List<int> list = new List<int> { };
     16             for (int i = 0; i < count; i++) {
     17                 list.Add(i);
     18             }
     19             info.listBands = list;
     20             info.XFactor = 1;
     21             info.YFactor = 1;
     22             info.bInvalidValue = false;
     23             info.OutputFilePath = @"D:Dataclip_xy.tif";  //裁剪保存结果
     24             info.Type = 0;  // (等于0表示通过栅格范围裁剪)
     25             info.XStart = 0;
     26             info.XEnd = 500;
     27             info.YStart = 0;
     28             info.YEnd = 500;
     29             info.FileType = "GTiff";  //Tiff数据的FileTypeCode为“GTiff”,IMG数据的FileTypeCode为"HFA",其他格式的为"ENVI"。;
     30 
     31             PIE.SystemAlgo.ISystemAlgo algo = PIE.SystemAlgo.AlgoFactory.Instance().CreateAlgo("PIE.CommonAlgo.dll", "PIE.CommonAlgo.ImageClipAlgo");
     32             if (algo == null) return;
     33 #endregion
     34             //2、算法执行
     35             PIE.SystemAlgo.ISystemAlgoEvents algoEvents = algo as PIE.SystemAlgo.ISystemAlgoEvents;
     36             algo.Name = "影像裁剪";
     37             algo.Params = info;
     38             //PIE.SystemAlgo.AlgoFactory.Instance().AsynExecuteAlgo(algo);
     39             //bool OK = PIE.SystemAlgo.AlgoFactory.Instance().ExecuteAlgo(algo);
     40             bool OK = algo.Execute();
     41             MessageBox.Show("裁剪成功!");          
     42                     }
     43         //(二)使用shape文件裁剪
     44         /// <summary>
     45         ///图像裁剪算法测试,本算法实现了将World.tif根据省级行政区.shp文件裁剪生成clip_shp.tif文件
     46         /// </summary>
     47         private void button_shp_Click ()
     48         {
     49             #region 1、参数设置
     50             //Clip裁剪
     51             PIE.CommonAlgo.DataPreImgClip_Exchange_Info info = new PIE.CommonAlgo.DataPreImgClip_Exchange_Info();
     52             //参数设置
     53             string featurePath = @"D:Data省级行政区.shp"; //裁剪的几何要素
     54             info.InputFilePath = @"D:DataWorld.tif";  //待裁剪影像
     55             PIE.DataSource.IRasterDataset rDataset = PIE.DataSource.DatasetFactory.OpenRasterDataset(info.InputFilePath, PIE.DataSource.OpenMode.ReadOnly);
     56             if (rDataset == null) return;
     57             int count = rDataset.GetBandCount();
     58             List<int> list = new List<int> { };
     59             for (int i = 0; i < count; i++)
     60             {
     61                 list.Add(i);
     62             }
     63             info.listBands = list;
     64             info.bInvalidValue = false;
     65             info.OutputFilePath = @"D:Dataclip_shp.tif";  //裁剪保存结果
     66             info.ShpFilePath = featurePath;
     67             info.Type = 1;  // (等于1表示使用shape文件裁剪)
     68             info.FileType = "GTiff";  //Tiff数据的FileTypeCode为“GTiff”,IMG数据的FileTypeCode为"HFA",其他格式的为"ENVI"。;
     69             PIE.SystemAlgo.ISystemAlgo algo = PIE.SystemAlgo.AlgoFactory.Instance().CreateAlgo("PIE.CommonAlgo.dll", "PIE.CommonAlgo.ImageClipAlgo");
     70             if (algo == null) return;
     71 #endregion
     72             //2、算法执行
     73             PIE.SystemAlgo.ISystemAlgoEvents algoEvents = algo as PIE.SystemAlgo.ISystemAlgoEvents;
     74             algo.Name = "影像裁剪";
     75             algo.Params = info;
     76             PIE.SystemAlgo.AlgoFactory.Instance().AsynExecuteAlgo(algo);
     77             //bool OK = PIE.SystemAlgo.AlgoFactory.Instance().ExecuteAlgo(algo);
     78             //bool OK = algo.Execute();
     79             MessageBox.Show("裁剪成功!");          
     80                     }
     81 //(三)使用几何范围裁剪
     82         /// <summary>
     83         ///图像裁剪算法测试,本算法实现了将World.tif根据省级行政区.shp文件中索引为0的geometry裁剪生成clip_shp.tif文件
     84         /// </summary>
     85         private void button_geometry_Click ()
     86         {
     87             #region 1、参数设置
     88             //Clip裁剪
     89             PIE.CommonAlgo.DataPreImgClip_Exchange_Info info = new PIE.CommonAlgo.DataPreImgClip_Exchange_Info();
     90             //参数设置
     91             string featurePath = @"D:Data省级行政区.shp"; //裁剪的几何要素
     92             PIE.DataSource.IFeatureDataset fDataset = PIE.DataSource.DatasetFactory.OpenFeatureDataset(featurePath);
     93             PIE.DataSource.IFeature feature = fDataset.GetNextFeature();
     94             fDataset.ResetReading();
     95             PIE.Geometry.IGeometry geometryClip = null;
     96             while (feature != null)
     97             {
     98                 geometryClip = feature.Geometry;
     99                 feature = fDataset.GetNextFeature();
    100                 break;
    101             }
    102             info.InputFilePath = @"D:DataWorld.tif";  //待裁剪影像
    103             PIE.DataSource.IRasterDataset rDataset = PIE.DataSource.DatasetFactory.OpenRasterDataset(info.InputFilePath, PIE.DataSource.OpenMode.ReadOnly);
    104             if (rDataset == null) return;
    105             int count = rDataset.GetBandCount();
    106             List<int> list = new List<int> { };
    107             for (int i = 0; i < count; i++)
    108             {
    109                 list.Add(i);
    110             }
    111             info.listBands = list;
    112             info.bInvalidValue = false;
    113             info.OutputFilePath = @"D:Dataclip_geometry.tif";  //裁剪保存结果
    114             info.Type = 2;  // (等于2表示使用几何范围裁剪)
    115             info.Geometry = geometryClip;
    116             info.FileType = "GTiff";  //Tiff数据的FileTypeCode为“GTiff”,IMG数据的FileTypeCode为"HFA",其他格式的为"ENVI"。;
    117             PIE.SystemAlgo.ISystemAlgo algo = PIE.SystemAlgo.AlgoFactory.Instance().CreateAlgo("PIE.CommonAlgo.dll", "PIE.CommonAlgo.ImageClipAlgo");
    118             if (algo == null) return;
    119 #endregion
    120             //2、算法执行
    121             PIE.SystemAlgo.ISystemAlgoEvents algoEvents = algo as PIE.SystemAlgo.ISystemAlgoEvents;
    122             algo.Name = "影像裁剪";
    123             algo.Params = info;           PIE.SystemAlgo.AlgoFactory.Instance().AsynExecuteAlgo(algo);
    124             //bool OK = PIE.SystemAlgo.AlgoFactory.Instance().ExecuteAlgo(algo);
    125             //bool OK = algo.Execute();
    126             MessageBox.Show("裁剪成功!");          
    127                     }
    View Code

    2.4. 示例截图

    (一)通过栅格范围裁剪

    (二)使用shape文件裁剪

    (三)使用几何范围裁剪

     

  • 相关阅读:
    WUSTOJ 1247: 递增或递减排序(Java)
    WUSTOJ 1246: 字符串排序(Java)
    Oracle查询部门工资最高员工的两种方法 1、MAX()函数 2、RANK()函数
    Oracle数据库——用户(USER)
    Firefox在新标签页打开“书签”和“搜索栏”(无需插件)
    Oracle数据库——ROWNUM
    Oracle数据库 SET ECHO [ON|OFF]
    WUST Oracle数据库 实验一实验二
    优课在线 嵌入式系统(胡威)2018春季测验 参考解析
    Oracle数据库——查询所有用户
  • 原文地址:https://www.cnblogs.com/PIESat/p/10186014.html
Copyright © 2011-2022 走看看