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 |
裁剪幾何形狀 |
項目路徑 |
百度雲盤地址下/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 } |
(一)經過柵格範圍裁剪
(二)使用shape文件裁剪
(三)使用幾何範圍裁剪