AGG 插值器(Interpolator)

本文详细介绍了AGG库中的插值器和变换器,包括不同类型的插值器如span_interpolator_linear和变换器如trans_warp_magnifier,并通过实验代码展示了它们的应用效果。

插值器Interpolator

插值器的作用是连接目标位置和源位置,比如要填充一个8*8的图形,对应的填充源是一个4*4的图像,一种简单的线性插值器就要根据目标的位置线性计算得到源对应的位置,如目标点(4,4)、(4,5)、(5,4)、(5,5)这几个位置点对应到源的(2,2)点上。

头文件
  1. #include <agg_span_interpolator_linear.h>
  2. #include <agg_span_interpolator_persp.h>
  3. #include <agg_span_interpolator_trans.h>
类型
  1. template<class Transformer = trans_affine, unsigned SubpixelShift = 8>
  2. class agg::span_interpolator_linear
  3. template<class Transformer = trans_affine, unsigned SubpixelShift = 8>
  4. class agg::span_interpolator_linear_subdiv
  5. template<unsigned SubpixelShift = 8>
  6. class agg::span_interpolator_persp_exact
  7. template<unsigned SubpixelShift = 8>
  8. class agg::span_interpolator_persp_lerp
  9. template<class Transformer, unsigned SubpixelShift = 8>
  10. class agg::span_interpolator_trans

不同的插值器对于不同的变换有各自的优势,对于大部分应用来说,span_interpolator_linear是比较简单高效的。

实验代码,使用span_interpolator_persp_lerp

上面的演示代码里的interpolator_type改成span_interpolator_persp_lerp,这是一个透视变换的插值器,输入为源四个角的坐标和目标的四个角上的坐标。

  1. ...
  2. // 插值器
  3. //typedef agg::span_interpolator_linear<> interpolator_type; //插值器类型
  4. //agg::trans_affine img_mtx; // 变换矩阵不需要了
  5. //interpolator_type ip(img_mtx); // 插值器
  6. typedef agg::span_interpolator_persp_lerp<> interpolator_type; //插值器类型
  7. const double offset = 50; // 偏移
  8. const double scale = 0.5; // 缩放倍数
  9. double src[8]={offset+0,offset+0,
  10.      offset+pm_img.width()*scale,offset+0,
  11.      offset+pm_img.width()*scale,offset+pm_img.height()*scale,
  12.      offset+0,offset+pm_img.height()*scale
  13. }; //源四角坐标,按偏移和缩放倍数改变一哈
  14. double dst[8]={0,0,
  15.      pm_img.width(),0,
  16.      pm_img.width()+100,pm_img.height(),
  17.      100,pm_img.height()-100
  18. }; //目标四角坐标,左右乱扯一哈
  19. interpolator_type ip(src,dst);
  20. ...

最后别忘了把img_mtx相关代码注释掉:

  1. //img_mtx.scale(0.5);
  2. //img_mtx.translate(40,40);
  3. //img_mtx.invert(); //注意这里
显示效果:

变换器Transformer

注意一下我们前面用的span_interpolator_linear,以及曾经使用过的conv_transform,默认的模板参数Transformer为trans_affine。我们已经知道trans_affine是一个2*3的变换矩阵。在AGG中,变换器不仅仅只有矩阵,这里将要介绍的就是其它的一些变换器。

头文件
  1. #include <agg_trans_affine.h>
  2. #include <agg_trans_bilinear.h>
  3. #include <agg_trans_single_path.h>
  4. #include <agg_trans_double_path.h>
  5. #include <agg_trans_perspective.h>
  6. #include <agg_trans_viewport.h>
  7. #include <agg_trans_warp_magnifier.h>
类型
  1. agg::trans_affine
  2. agg::trans_bilinear
  3. agg::trans_single_path
  4. agg::trans_double_path
  5. agg::trans_perspective
  6. agg::trans_viewport
  7. agg::trans_warp_magnifier
实验代码,使用trans_warp_magnifier

同样把示例代码中的插值器部分改成下列代码

  1. ...
  2. // 插值器
  3. //typedef agg::span_interpolator_linear<> interpolator_type; //插值器类型
  4. //agg::trans_affine img_mtx; // 变换矩阵
  5. //interpolator_type ip(img_mtx); // 插值器
  6. typedef agg::span_interpolator_trans<
  7.      agg::trans_warp_magnifier // 使用trans_warp_magnifier
  8. > interpolator_type; //插值器类型
  9. agg::trans_warp_magnifier mag;
  10. interpolator_type ip(mag);
  11. mag.magnification(0.5);
  12. mag.center(100,100);
  13. mag.radius(50);
  14. ...

建议把后面的ras.add_path(ell)改成ras.add_path(ccell),画得大一点好看清效果,呵呵

显示效果


内容概要:本文介绍了一个基于MATLAB实现的无人机三维路径规划项目,采用蚁群算法(ACO)与多层感知机(MLP)相结合的混合模型(ACO-MLP)。该模型通过三维环境离散化建模,利用ACO进行全局路径搜索,并引入MLP对环境特征进行自适应学习与启发因子优化,实现路径的动态调整与多目标优化。项目解决了高维空间建模、动态障碍规避、局部最优陷阱、算法实时性及多目标权衡等关键技术难题,结合并行计算与参数自适应机制,提升了路径规划的智能性、安全性和工程适用性。文中提供了详细的模型架构、核心算法流程及MATLAB代码示例,涵盖空间建模、信息素更新、MLP训练与融合优化等关键步骤。; 适合人群:具备一定MATLAB编程基础,熟悉智能优化算法与神经网络的高校学生、科研人员及从事无人机路径规划相关工作的工程师;适合从事智能无人系统、自动驾驶、机器人导航等领域的研究人员; 使用场景及目标:①应用于复杂三维环境下的无人机路径规划,如城市物流、灾害救援、军事侦察等场景;②实现飞行安全、能耗优化、路径平滑与实时避障等多目标协同优化;③为智能无人系统的自主决策与环境适应能力提供算法支持; 阅读建议:此资源结合理论模型与MATLAB实践,建议读者在理解ACO与MLP基本原理的基础上,结合代码示例进行仿真调试,重点关注ACO-MLP融合机制、多目标优化函数设计及参数自适应策略的实现,以深入掌握混合智能算法在工程中的应用方法。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值