影像存儲格式轉換能夠實現柵格數據存儲格式的自由轉換,其中存儲格式能夠是 BSQ、 BIP、 BIL 三種格式。算法
遙感數字圖像數據的存儲與分發,一般採用如下三種數據格式:ide
BSQ( Band Sequential) ): 按照波段順序依次記錄圖像數據,數據排列遵循如下規律:第一波段位居第一,第二波段位居第二…第 n 波段位居第 n 位;在第一波段中,數據依據行號順序依次排列,每一行內,數據按像素號順序排列。其他波段依次類推。(即按照波段順序,當第一波段全部的數據存儲記錄結束後,纔開始記錄第二波段的數據。) BSQ 是最簡單的存儲格式,提供了最佳的空間處理能力。它先將圖像同一波段的數據逐行存儲下來,再以相同的方式存儲下一波段數據。若是要獲取圖像單個波普波段的空間點( X, Y)的信息,那麼採用 BSQ方式存儲是最佳的選擇。工具
BIP( Band Interleaved by Pixel): 按像元順序記錄圖像數據,即在一行中,每一個像元按波段次序交叉排列,屬各波段數據間(按像元)交叉記錄方式(即各波段數據間按列交叉排列方式)。數據排列遵循如下規律:在第一行中,第一波段的第一行第 1 個像素位居第一,第二波段的第一行第 1 個像素位居第二,第三波段的第一行第 1 個像素位居第三…第 n 波段的第一行第 1 個像素位居第 n 位,測試
而後爲第一波段第一行第 2 個像素位居第 n+1 位,第二波段的第一行第 2 個像素位居第 n+2 位…其他各波段第一行數據排列位置以此類推,其他各行數據的記錄排列順序也遵守此規律。 BIP 格式提供了最佳的波譜處理能力。編碼
BIL ( Band Interleaved by Pixel): 是逐行按波段次序排列的格式,即先記錄第一波段第一行、第二波段第一行,第三波段第一行…第 n 波段第一行;再記錄各波段第二行…其他數據記錄排列順序依次類推,屬於各波段數據間(按行)交叉記錄方式。 BIL 是介於空間處理和波譜處理之間的一種折中的存儲格式。spa
PIE支持算法功能的執行,下面對存儲格式轉換算法功能進行介紹。3d
第一步code |
算法參數設置orm |
第二步視頻 |
算法執行 |
第三步 |
結果顯示 |
C#算法DLL |
PIE.CommonAlgo.dll |
|
C#算法名稱 |
PIE.CommonAlgo.FormatTranAlgo |
|
參數結構體 |
FormatTran_Exchange_Info |
|
參數說明 |
||
strInFile |
String |
輸入柵格影像的路徑 必須輸入波段數大於1的影像 |
strOutFile |
String |
輸出影像的路徑 |
m_strFileType |
String |
根據輸出類型得到文件編碼類型 .tif/.tiff——GTiff .img—————HFA 其餘—————ENVI |
lOutDataType |
Int |
輸出文件存儲格式的類型 0表明BIP,1表明BSQ,2表明BIL; 注意: 輸出存儲格式不能和輸入文件的存儲格式相同; 輸出GeoTIFF數據不支持BIL存儲方式; 輸出ERDAS數據不支持BIL和BIP存儲方式; |
項目路徑 |
百度雲盤地址下/PIE示例程序/ FundamentalToolDemo.FormatTranDemo |
數據路徑 |
百度雲盤地址下/ PIE示例數據/柵格數據/04.World/World.tif |
視頻路徑 |
百度雲盤地址下/PIE視頻教程/10.算法調用/多功能工具/存儲格式轉換算法.avi |
示例代碼 |
|
![]() 1 /// <summary> 2 ///存儲格式轉換算法測試,本算法實現了將World.tif的存儲格式轉換爲BSQ存儲方式生成World1.img文件 3 /// </summary> 4 private void Test_KrigingInterpolationAlgo() 5 { 6 #region 一、參數設置 7 PIE.CommonAlgo.FormatTran_Exchange_Info info = new PIE.CommonAlgo.FormatTran_Exchange_Info(); 8 info.strInFile = @"D:\Data\World.tif"; 9 info.strOutFile = @"D:\Data\World1.img"; 10 info.m_strFileType = "HFA"; 11 info.lOutDataType = 1; 12 PIE.SystemAlgo.ISystemAlgo algo = PIE.SystemAlgo.AlgoFactory.Instance().CreateAlgo("PIE.CommonAlgo.dll", "PIE.CommonAlgo.FormatTranAlgo"); 13 if (algo == null) return; 14 #endregion 15 //二、算法執行 16 PIE.SystemAlgo.ISystemAlgoEvents algoEvents = algo as PIE.SystemAlgo.ISystemAlgoEvents; 17 algo.Name = "存儲格式轉換"; 18 algo.Params = info; 19 PIE.SystemAlgo.AlgoFactory.Instance().ExecuteAlgo(algo); 20 //三、結果顯示 21 ILayer layer = PIE.Carto.LayerFactory.CreateDefaultLayer(@"D:\Data\World1.img"); 22 m_HookHelper.ActiveView.FocusMap.AddLayer(layer); m_HookHelper.ActiveView.PartialRefresh(ViewDrawPhaseType.ViewAll); 23 } |