1.算法功能简介
图像裁剪的目的是获取选定的影像范围区域。图像裁切工具提供像素范围裁切、矢量裁切、栅格图像裁切和几何图元裁切四种方式。 像素范围裁切是基于像素坐标获取矩形裁切区域的裁切方式;矢量裁切是基于矢量地理坐标获取任意形状裁切区域的裁切方式; 栅格图像裁剪是基于栅格文件的坐标获取裁剪区域的裁剪方式; 几何图元裁切是基于交互方式在主视图上绘制多边形来获取裁切范围的裁切方式。
PIE支持算法功能的执行,下面对图像裁剪算法功能进行介绍。
2.算法功能实现说明
2.1. 实现步骤
2.2. 算法参数
|
算法名称
|
图像裁剪
|
|
C#算法DLL
|
PIE.CommonAlgo.dll
|
|
C#算法名称
|
PIE.CommonAlgo.ImageClipAlgo
|
|
参数结构体
|
DataPreImgClip_Exchange_Info
|
|
参数说明
|
|
InputFilePath
|
String
|
输入文件
(*.tif;*.tiff;*.bmp;*.img;*.jpg;*.ldf)
|
|
Type
|
Int
|
裁剪类型
0为以栅格来裁剪;1为用shp文件; 2为几何范围来裁剪
|
|
ShpFilePath
|
String
|
如果以shp文件裁剪,需要输入的shp文件路径
|
|
OutputFilePath
|
String
|
输出文件路径
(*.tif;*.tiff; *.img)
|
|
FileType
|
String
|
根据输出类型获得文件编码类型
.tif/.tiff——GTiff
.img—————HFA
其他—————ENVI
|
|
XStart
|
Int
|
裁剪范围起始X
|
|
XEnd
|
Int
|
裁剪范围终点X
|
|
YStart
|
Int
|
裁剪范围起始Y
|
|
YEnd
|
Int
|
裁剪范围终点Y
|
|
bInvalidValue
|
bool
|
是否设置无效值
|
|
InvalidValue
|
double
|
无效值
|
|
FuncName
|
String
|
功能名称
|
|
ListBands
|
IList<Int>
|
输出裁剪影像的波段
|
|
Geometry
|
IGeometry
|
裁剪几何形状
|
2.3. 示例代码
|
项目路径
|
百度云盘地址下/PIE示例程序/10.算法调用/图像预处理/ClipAlgoDemo.Form1
|
|
数据路径
|
百度云盘地址下/PIE示例数据/ 栅格数据/04.World/World.tif
百度云盘地址下/PIE示例数据/ 矢量数据/Shape/省级行政区.shp
|
|
视频路径
|
百度云盘地址下/PIE视频教程/10.算法调用/图像预处理/图像裁剪算法.avi
|
|
示例代码
|
//(一)通过栅格范围裁剪
/// <summary>
///图像裁剪算法测试,本算法实现了将World.tif根据起始点(0,0)到终止点(500,500)的矩形范围裁剪生成clip_xy.tif文件
/// </summary>
private void button_xy_Click ()
{
#region 1、参数设置
//Clip裁剪
PIE.CommonAlgo.DataPreImgClip_Exchange_Info info = new PIE.CommonAlgo.DataPreImgClip_Exchange_Info();
info.InputFilePath = @"D:\Data\World.tif"; //待裁剪影像
PIE.DataSource.IRasterDataset rDataset = PIE.DataSource.DatasetFactory.OpenRasterDataset(info.InputFilePath, PIE.DataSource.OpenMode.ReadOnly);
if (rDataset == null) return;
int count=rDataset.GetBandCount();
List<int> list = new List<int> { };
for (int i = ; i < count; i++) {
list.Add(i);
}
info.listBands = list;
info.XFactor = ;
info.YFactor = ;
info.bInvalidValue = false;
info.OutputFilePath = @"D:\Data\clip_xy.tif"; //裁剪保存结果
info.Type = ; // (等于0表示通过栅格范围裁剪)
info.XStart = ;
info.XEnd = ;
info.YStart = ;
info.YEnd = ;
info.FileType = "GTiff"; //Tiff数据的FileTypeCode为“GTiff”,IMG数据的FileTypeCode为"HFA",其他格式的为"ENVI"。;
PIE.SystemAlgo.ISystemAlgo algo = PIE.SystemAlgo.AlgoFactory.Instance().CreateAlgo("PIE.CommonAlgo.dll", "PIE.CommonAlgo.ImageClipAlgo");
if (algo == null) return;
#endregion
//2、算法执行
PIE.SystemAlgo.ISystemAlgoEvents algoEvents = algo as PIE.SystemAlgo.ISystemAlgoEvents;
algo.Name = "影像裁剪";
algo.Params = info;
//PIE.SystemAlgo.AlgoFactory.Instance().AsynExecuteAlgo(algo);
//bool OK = PIE.SystemAlgo.AlgoFactory.Instance().ExecuteAlgo(algo);
bool OK = algo.Execute();
MessageBox.Show("裁剪成功!");
}
//(二)使用shape文件裁剪
/// <summary>
///图像裁剪算法测试,本算法实现了将World.tif根据省级行政区.shp文件裁剪生成clip_shp.tif文件
/// </summary>
private void button_shp_Click ()
{
#region 1、参数设置
//Clip裁剪
PIE.CommonAlgo.DataPreImgClip_Exchange_Info info = new PIE.CommonAlgo.DataPreImgClip_Exchange_Info();
//参数设置
string featurePath = @"D:\Data\省级行政区.shp"; //裁剪的几何要素
info.InputFilePath = @"D:\Data\World.tif"; //待裁剪影像
PIE.DataSource.IRasterDataset rDataset = PIE.DataSource.DatasetFactory.OpenRasterDataset(info.InputFilePath, PIE.DataSource.OpenMode.ReadOnly);
if (rDataset == null) return;
int count = rDataset.GetBandCount();
List<int> list = new List<int> { };
for (int i = ; i < count; i++)
{
list.Add(i);
}
info.listBands = list;
info.bInvalidValue = false;
info.OutputFilePath = @"D:\Data\clip_shp.tif"; //裁剪保存结果
info.ShpFilePath = featurePath;
info.Type = ; // (等于1表示使用shape文件裁剪)
info.FileType = "GTiff"; //Tiff数据的FileTypeCode为“GTiff”,IMG数据的FileTypeCode为"HFA",其他格式的为"ENVI"。;
PIE.SystemAlgo.ISystemAlgo algo = PIE.SystemAlgo.AlgoFactory.Instance().CreateAlgo("PIE.CommonAlgo.dll", "PIE.CommonAlgo.ImageClipAlgo");
if (algo == null) return;
#endregion
//2、算法执行
PIE.SystemAlgo.ISystemAlgoEvents algoEvents = algo as PIE.SystemAlgo.ISystemAlgoEvents;
algo.Name = "影像裁剪";
algo.Params = info;
PIE.SystemAlgo.AlgoFactory.Instance().AsynExecuteAlgo(algo);
//bool OK = PIE.SystemAlgo.AlgoFactory.Instance().ExecuteAlgo(algo);
//bool OK = algo.Execute();
MessageBox.Show("裁剪成功!");
}
//(三)使用几何范围裁剪
/// <summary>
///图像裁剪算法测试,本算法实现了将World.tif根据省级行政区.shp文件中索引为0的geometry裁剪生成clip_shp.tif文件
/// </summary>
private void button_geometry_Click ()
{
#region 1、参数设置
//Clip裁剪
PIE.CommonAlgo.DataPreImgClip_Exchange_Info info = new PIE.CommonAlgo.DataPreImgClip_Exchange_Info();
//参数设置
string featurePath = @"D:\Data\省级行政区.shp"; //裁剪的几何要素
PIE.DataSource.IFeatureDataset fDataset = PIE.DataSource.DatasetFactory.OpenFeatureDataset(featurePath);
PIE.DataSource.IFeature feature = fDataset.GetNextFeature();
fDataset.ResetReading();
PIE.Geometry.IGeometry geometryClip = null;
while (feature != null)
{
geometryClip = feature.Geometry;
feature = fDataset.GetNextFeature();
break;
}
info.InputFilePath = @"D:\Data\World.tif"; //待裁剪影像
PIE.DataSource.IRasterDataset rDataset = PIE.DataSource.DatasetFactory.OpenRasterDataset(info.InputFilePath, PIE.DataSource.OpenMode.ReadOnly);
if (rDataset == null) return;
int count = rDataset.GetBandCount();
List<int> list = new List<int> { };
for (int i = ; i < count; i++)
{
list.Add(i);
}
info.listBands = list;
info.bInvalidValue = false;
info.OutputFilePath = @"D:\Data\clip_geometry.tif"; //裁剪保存结果
info.Type = ; // (等于2表示使用几何范围裁剪)
info.Geometry = geometryClip;
info.FileType = "GTiff"; //Tiff数据的FileTypeCode为“GTiff”,IMG数据的FileTypeCode为"HFA",其他格式的为"ENVI"。;
PIE.SystemAlgo.ISystemAlgo algo = PIE.SystemAlgo.AlgoFactory.Instance().CreateAlgo("PIE.CommonAlgo.dll", "PIE.CommonAlgo.ImageClipAlgo");
if (algo == null) return;
#endregion
//2、算法执行
PIE.SystemAlgo.ISystemAlgoEvents algoEvents = algo as PIE.SystemAlgo.ISystemAlgoEvents;
algo.Name = "影像裁剪";
algo.Params = info; PIE.SystemAlgo.AlgoFactory.Instance().AsynExecuteAlgo(algo);
//bool OK = PIE.SystemAlgo.AlgoFactory.Instance().ExecuteAlgo(algo);
//bool OK = algo.Execute();
MessageBox.Show("裁剪成功!");
}
|
2.4. 示例截图
(一)通过栅格范围裁剪

(二)使用shape文件裁剪

(三)使用几何范围裁剪

- PIE SDK图像重采样算法
1.算法功能简介 图像重采样是指对采样后形成的由离散数据组成的数字图像按所需的像元位置或像元问距重新采样,以构成几何变换后的新图像.重采样过程本质上是图像恢复过程,它用输入的离散数字图像重建代表原始图 ...
- PIE SDK图像镜像
1.算法功能简介 图像镜像可生成图像的水平镜像.垂直镜像和水平垂直镜像.水平镜像是图像以垂直中线为轴, 将图像左右半部对调:垂直镜像是图像以水平中线为轴,将图像上下半部对调. PIE支持算法功能的 ...
- PIE SDK图像旋转
1.算法功能简介 图像旋转可使图像以中心点为轴沿特定方向旋转指定的角度. PIESDK支持算法功能的执行,下面对图像旋转算法功能进行介绍. 2.算法功能实现说明 2.1 实现步骤 第一步 算法参数设置 ...
- PIE SDK 文章目录索引
1.PIE SDK介绍 1.1. PIE软件介绍 1.2. PIE SDK介绍 1.3. PIE支持项目介绍 1.4. PIE.NET-SDK插件式二次开发介绍 1.5. PIE.NET-S ...
- PIE SDK Command&&Tool工具命令一览表
PIE SDK Command&&Tool工具命令一览表 编号 模板 名称(中文) Command&Tool 程序集 备注 1 数据管理 加载栅格数据 PIE.Controls ...
- PIE SDK与IDL算法结合说明文档
1.功能简介 IDL是一门简单易用的科学计算和可视化语言,包含大量的图形图像处理函数,尤其是同ENVI结合集成了该软件的大量功能,因此被广泛用于遥感.地信领域. 本示例程序实现了IDL算法与PIESD ...
- PIE SDK与Python结合说明文档
1.功能简介 Python是一种跨平台语言.无论是在Windows.Linux.Unix还是Mac Os系统,我们都可以使用Python.甚至在Linux.Unix及Mac OS系统内已经集成了Pyt ...
- PIE SDK影像坏线修复
1.算法功能简介 坏条带的由来:2003年5月31日,Landsat-7ETM+机载扫描行校正器(SLC) 故障,导致此后获取的影像出现了数据条带丢失,严重影响了Landsat ETM遥感影像的使用. ...
- PIE SDK Command、Tool、Control的调用和拓展
1.功能简介 在一个项目中,是通过小组成员共同开发的,难以避免的是当项目功能集成的时候会出现很多兼容性问题,开发讲究高内聚低耦合,利用Command.Tool和Control的使用,可以提升集成的效率 ...
随机推荐
- glib hash库GHashTable的使用实例
前言 hash表是一种key-value访问的数据结构,hash表存储的数据能够很快捷和方便的去查询.在很多工程项目都需要使用到hash表来存储数据.对于hash表的详细说明这里就不进行阐述了,不了解 ...
- 半平面交 (poj 1279(第一道半平面NlogN)完整注释 )
半平面交的O(nlogn)算法(转载) 求n个半平面的交有三种做法: 第一种就是用每个平面去切割已有的凸多边形,复杂度O(n^2). 第二种就是传说中的分治算法.将n个半平面分成两个部分,分别求完交之 ...
- java实现wc功能
github项目地址:https://github.com/3216004717/ruanjiangongcheng.git 项目相关要求 基本要求 wc.exe -c file.c //返回文件 f ...
- 装饰(Decorator)模式
一. 装饰(Decorator)模式 装饰(Decorator)模式又名包装(Wrapper)模式[GOF95].装饰模式以对客户端透明的方式扩展对象的功能,是继承关系的一个替代方案. 二. 装饰模式 ...
- .netcore2.0 Startup 全局配置文件小技巧
- 警惕C#事件使用过程中的GC陷阱
关于C#中的事件,园里已经有大量的文章对其内在实现做过剖析,如果还不甚了解的可以阅读这篇文章 通过Demo来细看C#事件的内在机制 虽然比较早,但非常清楚地展示了事件的内部机制,总结一下就是 1.事件 ...
- 去掉html标签方法
public static string CleanHtml(string strHtml) { strHtml = Regex.Replace(strHtml, @"(\<scrip ...
- 谷歌Google浏览器去广告插件ABP插件安装与使用
---恢复内容开始--- 最新版本的 Chrome 浏览器,主版本号为 67,数字签名日期为 2018.05.30.对 Chrome 的扩展(俗称插件)安装策略进行了调整——只允许在 Chrome 应 ...
- [Algorithm]排序
一.排序算法 1.插入排序 1) 直接插入排序:(插入类) 1 void InsertSort( ElemType R[], int n ) 2 { 3 for ( int i = 2; i < ...
- NSKeyedArchiver数据归档
前言 在 OC 语言中,归档是一个过程,即用某种格式来保存一个或多个对象,以便以后还原这些对象. 通常,这个过程包括将(多个)对象写入文件中,以便以后读取该对象.可以使用归档的方法进行对象的深复制. ...