PIE SDK SFIM融合

 

1.算法功能简介

    SFIM 融合方法全称为基于平滑滤波的亮度变换。基本原理是将高分辨率影像通过低通滤波抑制其高频空间信息保留低频信息,再将原高分辨率影像与通过低通滤波的高分辨率影像进行比值运算,以抵消光谱及地形反差,增强纹理结构信息,最后将比值运算结果融入低分辨率影像中。

    PIE支持算法功能的执行,下面对SFIM融合算法功能进行介绍。

2.算法功能实现说明

2.1.实现步骤

第一步

算法参数设置

第二步

算法执行

第三步

结果显示

2.2.算法参数

算法名称

SFIM融合

C#算法DLL

PIE.CommonAlgo.dll

C#算法名称

PIE.CommonAlgo.CFusionAlgo

参数结构体

CFusion_Exchange_Info

参数说明

Type

String

融合类型

0 SFIM融合

1彩色标准化融合

LowResFile

IList<String>

输入的多光谱数据波段名称集合

LowBands

IList<int>

多光谱数据波段集合{0,1,2,3}

OutputFilePath

String

输出文件

(*.tif;*.tiff; *.img)

FileTypeCode

String

文件类型编码

.tif/.tiff——GTiff

.img—————HFA

其他—————ENVI

HighResNullValue

Int

融合所选择的高分辨率数据波段(0)

ResampleMode

Int

重采样类型

(最近邻点插值0/双线性插值1/三次卷积法插值2)

lMaxCache

Int

最大缓存(16)

FuncName

String

功能名称

BMultiThread

Bool

是否多线程(true) TRUE 是; FALSE 否

2.3.示例代码

项目路径

百度云盘地址下/PIE示例程序/ 10.算法调用/图像预处理/ PIE.ImagePreprocessing. CFusionAlgo

数据路径

百度云盘地址下/PIE示例数据/ 栅格数据/01.GF1/MS.tif

PAN.tif

视频路径

百度云盘地址下/PIE视频教程/ 10.算法调用/图像预处理/ SFIM融合算法avi

示例代码

 1 /// <summary>
 2 ///SFIM融合算法测试,本算法实现了将MS.tif和PAN.tif进行SFIM融合
 3 /// </summary>
 4 public override void OnClick()
 5 {
 6 #region 1、参数设置
 7 PIE.CommonAlgo.CFusion_Exchange_Info info = new PIE.CommonAlgo.CFusion_Exchange_Info();
 8 
 9 //info.Type = 1; //彩色标准化融合
10 info.Type = 0; //SFIM融合
11 string path1 = @"D:DataMS.tif";
12 string path2 = @"D:DataPAN.tif";
13 info.LowResFile = new List<String> { path1,path1,path1,path2 };
14 info.LowBands = new List<int> { 0, 1, 2,0 };
15 info.OutputFilePath = @"D:Data
esult7.tif";
16 info.FileTypeCode = "Gtiff";
17 info.ResampleMode = 0;
18 info.HighResNullValue = 0;
19 info.lMaxCache = 16;
20 info.BMultiThread = true;
21 
22 PIE.SystemAlgo.ISystemAlgo algo = PIE.SystemAlgo.AlgoFactory.Instance().CreateAlgo("PIE.CommonAlgo.dll", "PIE.CommonAlgo.CFusionAlgo");
23 if (algo == null) return;
24 #endregion
25 
26 //2、算法执行
27 PIE.SystemAlgo.ISystemAlgoEvents algoEvents = algo as PIE.SystemAlgo.ISystemAlgoEvents;
28 algo.Name = "SFIM融合";
29 algo.Params = info;
30 (algo as PIE.SystemAlgo.ISystemAlgoEvents).OnExecuteCompleted +=CFusionAlgo_OnExecuteCompleted;
31 (algo as PIE.SystemAlgo.ISystemAlgoEvents).OnProgressChanged += CFusionAlgo_OnProgressChanged;
32 
33 PIE.AxControls.IStatusBar statusBar = m_Application.StatusBar;
34 statusBar.ShowProgress(0, 100, "");
35 
36 PIE.SystemAlgo.AlgoFactory.Instance().AsynExecuteAlgo(algo);
37 }
38 int CFusionAlgo_OnProgressChanged(double complete, string msg, SystemAlgo.ISystemAlgo algo)
39 {
40 PIE.AxControls.IStatusBar statusBar = m_Application.StatusBar;
41 statusBar.UpdateProgress((int)complete, msg);
42 return 0;
43 }
44 
45 void CFusionAlgo_OnExecuteCompleted(SystemAlgo.ISystemAlgo algo)
46 {
47 PIE.AxControls.IStatusBar statusBar = m_Application.StatusBar;
48 statusBar.UpdateProgress(100, "");
49 statusBar.HideProgress();
50 //3、结果显示
51 ILayer layer = PIE.Carto.LayerFactory.CreateDefaultLayer(@"D:Data
esult7.tif");
52 m_HookHelper.ActiveView.FocusMap.AddLayer(layer);
53 m_HookHelper.ActiveView.PartialRefresh(ViewDrawPhaseType.ViewAll);
54 m_HookHelper.ActiveView.PartialRefresh(ViewDrawPhaseType.ViewAll);
55 (algo as PIE.SystemAlgo.ISystemAlgoEvents).OnExecuteCompleted -= CFusionAlgo_OnExecuteCompleted;
56 (algo as PIE.SystemAlgo.ISystemAlgoEvents).OnProgressChanged -= CFusionAlgo_OnProgressChanged;
57 }
View Code

2.4.示例截图

 

原文地址:https://www.cnblogs.com/PIESat/p/10190315.html