PIE SDK波段運算
1.演算法功能簡介
波段運算(Band Math)工具能夠方便的執行影象中的各個波段的加減乘除、三角函式、指數、對數等數學函式計算,也可以使用IDL編寫的函式。
由於每個使用者都有獨特的需求,利用此工具使用者可以自己定義處理演算法,應用到某個波段或者整個影象中。波段運算實質上是對每個畫素點對應的的畫素值進行數學運算,運算表示式中的每一個變數不僅可以對應於單一波段,也可以是一個多波段的柵格檔案。例如,在表示式 b1﹢b2 中,如果 b1 是一個多波段的影象, b2 為單一波段,則結果為 b1 所對應影象的所有波段分別與 b2 進行求和。
PIE SDK支援演算法功能的執行,下面對波段運算演算法功能進行介紹。
2.演算法功能實現說明
2.1 實現步驟
第一步 |
演算法引數設定 |
第二步 |
演算法執行 |
第三步 |
結果顯示 |
2.2 演算法引數
C#演算法DLL |
PIE.CommonAlgo.dll |
|
C#演算法名稱 |
PIE.CommonAlgo.BandOperAlgo |
|
引數結構體 |
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示例程式/ FundamentalToolDemo. BandOperDemo |
資料路徑 |
百度雲盤地址下/ PIE示例資料/柵格數/World/world.tiff |
視訊路徑 |
百度雲盤地址下/PIE視訊教程/波段運算演算法avi |
示例程式碼 |
|
1 /// <summary> 2 ///波段運算演算法測試,本演算法實現了將World.tif的第一波段生成World3.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 = "b1"; 9 info.SelectFileBands = new List<int> { 1 }; 10 info.SelectFileNames = new List<string> { @"D:\Data\World.tif", @"D:\Data\World.tif" }; 11 info.OutputFilePath = @"D:\Data\World3.tif"; 12 info.FileTypeCode = "GTiff"; 13 14 PIE.SystemAlgo.ISystemAlgo algo = PIE.SystemAlgo.AlgoFactory.Instance().CreateAlgo("PIE.CommonAlgo.dll", "PIE.CommonAlgo.BandOperAlgo"); 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 23 //3、結果顯示 24 ILayer layer = PIE.Carto.LayerFactory.CreateDefaultLayer(@"D:\Data\World3.tif"); 25 m_HookHelper.ActiveView.FocusMap.AddLayer(layer); m_HookHelper.ActiveView.PartialRefresh(ViewDrawPhaseType.ViewAll); 26 }View Code |