• PIE SDK图像重采样算法


     1.算法功能简介

      图像重采样是指对采样后形成的由离散数据组成的数字图像按所需的像元位置或像元问距重新采样,以构成几何变换后的新图像。重采样过程本质上是图像恢复过程,它用输入的离散数字图像重建代表原始图像二维连续函数,再按新的像元间距和像元位置进行采样。其数学过程是根据重建的连续函数(曲面),用周围若干像元点的值估计或内插出新采样点的值。图像重采样在图像处理中应用非常广泛,如SIFT特征提取。

      图像重采样后图像的维数会发生改变。当重采样图像小于原图像维数时,称为降采样;当重采样图像维数大于原图像时,称为升采样。VTK中可以方便的对图像进行重采样。vtkImageShrink3D类实现图像降采样。降采样需要设置每个方向的采样率,降采样率越大,图像越模糊。升采样的原理与降采样原理一致,只是增加采样点数来增加图像的维数。VTK中vtkImageMagnify来实现图像的升采样。

      图像重采样算法方式有好几种,最近相邻插值算法/最近邻法、双线性内插法、立方卷积法等,具体概念查看链接

      PIE支持图像重采样算法功能的执行,下面对此算法功能进行介绍。

    2.算法功能实现说明

    2.1 实现步骤

    第一步

    算法参数设置

    第二步

    算法执行

    第三步

    结果显示

    2.2 算法参数

    算法名称

    图像重采样

    C#算法DLL

    PIE.CommonAlgo.dll

    C#算法名称

    PIE.CommonAlgo.ImageResampleAlgo

    参数结构体

    ImageResample_Exchange_Info

    参数说明

    InputFilePath

    String

    输入文件

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

    OutputFilePath

    String

    输出文件路径

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

    Mode

    Int

    重采样类型

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

    ListBands

    IList<Int>

    输入影像的波段(至少选择一个波段,{ 0, 1, 2, 3 })

    FuncName

    String

    功能名称

    FileTypeCode

    String

    根据输出类型获得文件编码类型

    .tif/.tiff——GTiff

    .img—————HFA

    其他—————ENVI

    OutWidth

    Int

    重采样宽

    OutHeight

    Int

    重采样高

    2.3 示例代码

    数据路径

    百度云盘地址下/ PIE示例数据/栅格数/04.World/World.tif

    示例代码

     1 /// <summary>
     2 /// 图像重采样
     3 /// </summary>
     4 public override void OnClick()
     5 {
     6      FrmImgClassReSample frmClassPostSieve = new FrmImgClassReSample(m_HookHelper);
     7     if (frmClassPostSieve.ShowDialog() != System.Windows.Forms.DialogResult.OK) return;
     8 
     9     // 重采样
    10     PIE.CommonAlgo.ImageResample_Exchange_Info info = frmClassPostSieve.ExChangeData;
    11     PIE.SystemAlgo.ISystemAlgo algo = PIE.SystemAlgo.AlgoFactory.Instance().CreateAlgo("PIE.CommonAlgo.dll", "PIE.CommonAlgo.ImageResampleAlgo");
    12     if (algo == null) return;
    13     algo.Name = "重采样";
    14     algo.Params = info;
    15     bool result = PIE.SystemAlgo.AlgoFactory.Instance().ExecuteAlgo(algo);
    16     if (result)
    17      {             
    18       MessageBox.Show("执行成功");
    19       ILayer layer = LayerFactory.CreateDefaultLayer(info.OutputFilePath);
    20       if (layer == null) return;
    21       m_HookHelper.ActiveView.FocusMap.AddLayer(layer);
    22       m_HookHelper.ActiveView.PartialRefresh(ViewDrawPhaseType.ViewAll);
    23       }}
    View Code

    2.4 示例截图

      

      总结:从上两幅图可以看到对world.tif进行重采样后,像素值发生了变化。

  • 相关阅读:
    两数之和等于目标值
    Atitit.软件仪表盘(0)--软件的子系统体系说明
    获取 exception 对象的字符串形式(接口服务返回给调用者)
    SELECT LAST_INSERT_ID() 的使用和注意事项
    @RequestParam 注解的使用
    Eclipse中修改SVN用户名和密码方法
    淘淘商城上传图片按钮不显示的问题
    spring集成webSocket实现服务端向前端推送消息
    Mybatis中jdbcType和javaType对应关系
    MySQL数据库中tinyint字段值为1,读取出来为true的问题
  • 原文地址:https://www.cnblogs.com/PIESat/p/11248473.html
Copyright © 2020-2023  润新知