波譜運算(Spectral Math)是一種靈活的波譜處理工具,能夠用數學表達式或IDL程序對波譜曲線(以及選擇的多波段圖像)進行處理。波譜曲線能夠來自一幅多波段圖像的Z剖面、波譜庫或ASCII文件。算法
如圖1爲波譜運算的簡單示意圖——求三個波譜曲線的和。在表達式s1+s2+s3中(波譜運算中的變量是以s開頭),能夠分別給s一、s二、s3指定爲一條波譜曲線,獲得的結果是一條波譜曲線(x值與s一、s二、s3同樣,y值是三者之和);也能夠s1是一個多波段圖像文件(實際上是每一個像素點的Z-剖面),s2和s3分別是兩條波譜曲線,獲得的結果是一個與輸入的多波段圖像同樣波段數和行列數的圖像。ide
圖1波譜運算示意圖工具
PIE SDK支持算法功能的執行,下面對波譜運算算法功能進行介紹。測試
第一步編碼 |
算法參數設置spa |
第二步code |
算法執行視頻 |
第三步blog |
結果顯示教程 |
C#算法名稱 |
PIE.CommonAlgo. BandSpecAlgo |
|
參數結構體 |
BandOper_Exchange_Info |
|
參數說明 |
||
StrExp |
String |
波段運算公式,如"(b4-b3)/(b4+b3)"; |
SelectFileBands |
IList<Int> |
選中的圖像對應的波段band編號(是波段編號而非波段索引),根據波段運算公式的波段大小前後順序b三、b4肯定順序。new List<int> {3, 4} |
SelectFileNames |
IList<String> |
選中的圖像對應的文件file名稱,根據波段運算公式的波段大小前後順序b三、b4肯定順序。new List<String> {b3對應文件路徑, b4對應文件路徑} |
OutputFilePath |
String |
輸出文件路徑 |
FileTypeCode |
String |
根據輸出類型得到文件編碼類型 .tif/.tiff——GTiff .img—————HFA 其餘—————ENVI |
FuncName |
String |
C#算法名稱 |
項目路徑 |
百度雲盤地址下/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 一、參數設置 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:\Data\World.tif", @"D:\Data\World.tif" }; 11 info.OutputFilePath = @"D:\Data\World4.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 //二、算法執行 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 ILayer layer = PIE.Carto.LayerFactory.CreateDefaultLayer(@"D:\Data\World4.tif"); 24 m_HookHelper.ActiveView.FocusMap.AddLayer(layer); m_HookHelper.ActiveView.PartialRefresh(ViewDrawPhaseType.ViewAll); 25 } |