PIE SDK圖像裁剪

 

1.算法功能簡介算法

    圖像裁剪的目的是獲取選定的影像範圍區域。圖像裁切工具提供像素範圍裁切、矢量裁切、柵格圖像裁切和幾何圖元裁切四種方式。 像素範圍裁切是基於像素座標獲取矩形裁切區域的裁切方式;矢量裁切是基於矢量地理座標獲取任意形狀裁切區域的裁切方式; 柵格圖像裁剪是基於柵格文件的座標獲取裁剪區域的裁剪方式; 幾何圖元裁切是基於交互方式在主視圖上繪製多邊形來獲取裁切範圍的裁切方式。ide

    PIE支持算法功能的執行,下面對圖像裁剪算法功能進行介紹。工具

2.算法功能實現說明測試

2.1. 實現步驟編碼

第一步spa

算法參數設置code

第二步orm

算法執行視頻

2.2.  算法參數blog

算法名稱

圖像裁剪

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 一、參數設置
  8             //Clip裁剪
  9             PIE.CommonAlgo.DataPreImgClip_Exchange_Info info = new PIE.CommonAlgo.DataPreImgClip_Exchange_Info();
 10 
 11             info.InputFilePath = @"D:\Data\World.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:\Data\clip_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             //二、算法執行
 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 一、參數設置
 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:\Data\World.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:\Data\clip_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             //二、算法執行
 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 一、參數設置
 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:\Data\World.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:\Data\clip_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             //二、算法執行
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文件裁剪

(三)使用幾何範圍裁剪

 

相關文章
相關標籤/搜索