1.算法功能简介
快速拼接是对若干幅互为邻接的遥感数字图像拼在一起,构成一幅整体影像的技术过程。PIE支持快速拼接算法功能的执行,下面对快速拼接算法功能进行介绍。
2.算法功能实现说明
2.1 实现步骤
2.2 算法参数
算法名称 | 快速拼接 |
C#算法DLL | PIE.CommonAlgo.dll |
C#算法名称 | PIE.CommonAlgo.ImageMosaicParamAlgo |
参数结构体 | PIE.CommonAlgo.buildMosaicFileVec |
参数说明 |
buildMosaicFileVec(生成镶嵌影像算法参数) |
bmfVec | IList<buildMosaicFileInfo> | 生成镶嵌结果所需参数 若IList<buildMosaicFileInfo>数量等于1 则为整幅输出镶嵌结果 若大于1 可设置分幅输出镶嵌结果 |
buildMosaicFileInfo |
sOutFilePath | String | 输出文件路径 |
EnvOut | IEnvelope | 设置镶嵌结果输出范围 |
iOutBandType | Int | 输出通道类型 0:3通道8位输出 1:原始数据格式 |
pSrcLyrs | IList<IRasterLayer> | 输入影像 存放原始数据栅格图层,数量不能小于2 |
2.3 示例代码
数据路径 | 实验中的例子是将一整幅World.tif分割成两个影像来进行快速拼接实验的 |
视频路径 | 百度云盘地址下/PIE视频教程/10.算法调用/图像预处理/快速拼接算法avi |
示例代码 |
/// <summary>
/// 快速拼接算法实现了波段相同的影像快速拼接在一起
/// </summary>
public override void OnClick()
{
//影像快速拼接
buildMosaicFileVec info = new buildMosaicFileVec();
List<buildMosaicFileInfo> bmfVec = new List<buildMosaicFileInfo>();
buildMosaicFileInfo item = new buildMosaicFileInfo();
//设置影像文件
IList<string> listFile = new List<string>();
string file1 = @"D:\data\图像mosaic拼接\world31.tif";
string file2 = @"D:\data\图像mosaic拼接\world33.tif";
listFile.Add(file1);
listFile.Add(file2);
int bandCount = ;
int count = ;
foreach (string file in listFile)
{
//判断拼接的图像的波段数是否一致
IRasterDataset tempDataset = DatasetFactory.OpenRasterDataset(file, OpenMode.ReadOnly);
if (tempDataset == null)
{
MessageBox.Show("打开数据集失败!" + file, "提示");
return;
}
if (count == )
{
bandCount = tempDataset.GetBandCount();
}
else
{
if (bandCount != tempDataset.GetBandCount())
{
MessageBox.Show("加入文件波段数不一致!", "提示");
(tempDataset as IDisposable).Dispose();
tempDataset = null;
return;
}
}
count++;
IRasterLayer rLayer = LayerFactory.CreateDefaultRasterLayer(tempDataset);
item.pSrcLyrs.Add(rLayer);
}
item.iOutBandType = ;
item.bFastMosaic = true;
item.sOutFilePath = @"D:\data\图像mosaic拼接\world_Mosia.tif";
bmfVec.Add(item);
info.bmfVec = bmfVec;
//创建算法
ISystemAlgo algo = SystemAlgo.AlgoFactory.Instance().CreateAlgo("PIE.CommonAlgo.dll", "PIE.CommonAlgo.ImageMosaicParamAlgo");
if (algo == null) return;
algo.Params = info;
bool result = AlgoFactory.Instance().ExecuteAlgo(algo);
if (result)
{
MessageBox.Show("算法执行成功");
ILayer layer = LayerFactory.CreateDefaultLayer(item.sOutFilePath);
if (layer == null) return;
m_HookHelper.ActiveView.FocusMap.AddLayer(layer);
m_HookHelper.ActiveView.PartialRefresh(ViewDrawPhaseType.ViewAll);
}
else
{
MessageBox.Show("算法执行失败!");
}
} |
2.4 示例截图