ImageWarping--反距离加权插值(IDW)方法实现及报告
反距离加权插值(IDW)
根据给定的控制点对和控制点的位移矢量(方向和距离),实现图像每一个像素点的位移。反距离加权插值的方法是通过得到每一个像素点和选定控制点对的逼近关系,以及相对应的权重关系,求得像素点相对应的变化关系,逼近函数可以理解为对像素点p的影响程度,而权重函数则可以看成是对距离的权重,距离越远,权重越小。
该函数f(p)传入一个像素点的坐标,通过已选定的控制点实现计算插值。f函数返回像素点坐标,fi函数为逼近函数,即
这里T的求解我未进行方程组的计算求解,T是一个2*2矩阵,T可以取近似值1。将控制点数据代入可以求出每一个局部插值函数。
而wi权重函数,理解为对距离越远,权重越小,这里通过
这里d(p,pi)为p和pi的距离,指数μ可以取>0的数,这里测试取2最优。通过公式求取权重函数,求和体现多组控制点共同产生影响。
部分代码
我通过c++对IDW方法进行编写,通过封装IDW类的方法实现。类的接口如下:
```
class ImW_IDW
{
public:ImW_IDW();ImW_IDW(vector<QPoint> &m_point_p, vector<QPoint> &m_point_q);public:QPoint f_func(QPoint p);private:double wi_func(QPoint p, int i);double delta(QPoint p, QPoint pi);double distance(QPoint p, QPoint pi);QPoint fi_func(QPoint p, int i);private:double u;vector<QPoint> p_points;vector<QPoint> q_points;};
对于各部分接口的实现:
#include "ImW_IDW.h"
#include <math.h>ImW_IDW::ImW_IDW()
{}ImW_IDW::ImW_IDW(vector<QPoint> &m_point_p, vector<QPoint> &m_point_q)
{u = 2.0;p_points = m_point_p;q_points = m_point_q;
}double ImW_IDW::wi_func(QPoint p, int i)
{double tmp_sum = 0;double result;if (p == p_points[i])return 1;for (size_t j=0; j < p_points.size(); j++){tmp_sum += delta(p, p_points[j]);}result = delta(p, p_points[i])/tmp_sum;return result;
}double ImW_IDW::distance(QPoint p, QPoint pi)
{double m_result;//在这里返回不开方的值精度会更高吧m_result =(p.rx()-pi.rx())*(p.rx()-pi.rx()) + (p.ry()-pi.ry())*(p.ry()-pi.ry()) ;return m_result;
}double ImW_IDW::delta(QPoint p, QPoint pi)
{double m_result;m_result = pow(1.0/distance(p, pi), u/2.0);return m_result;
}QPoint ImW_IDW::fi_func(QPoint p, int i)
{QPoint result = q_points[i];result.rx() += (p.rx()-p_points[i].rx());result.ry() += (p.ry()-p_points[i].ry());return result;
}QPoint ImW_IDW::f_func(QPoint p)
{QPoint result(0, 0);double x = 0, y = 0;for (size_t i=0; i < p_points.size(); i++){x += fi_func(p, i).rx() * wi_func(p, i); y += fi_func(p, i).ry() * wi_func(p, i);}result.rx() = x;result.ry() = y;return result;
}
有些需要注意的点,我在这里使用的是qt的编程,由于坐标点及像素点都是整数值,但我们计算时需要的步骤全是浮点型,所以一定要注意使用double型进行计算,如果出现图像结果非常模糊的情况,则需要检查你自己的函数中是否不小心使用了整形计算,导致精度丢失。
实现结果
挤压
拉伸
四角挤压
旋转
问题后期工作
这里出现像素丢失问题,我认为是计算上的误差以及未优化的问题。当然最重要的应该是图像拉伸时出现的像素丢失。这里后期需要我们用其他方法去补全所有像素,在后期的博客中会提到。
参考资料:C&G95_Image Warping with Scattered Data Interpolation
整个工作的完成基本上是参考如上论文的,从网上可以很方便找到他。由于我是初学者,实验报告的写作上还有很多问题,以及实现代码也有很多不够优的地方,希望谅解。也希望能多提意见,与我交流。
ImageWarping--反距离加权插值(IDW)方法实现及报告相关推荐
- GPU中实现反距离加权插值(IDW)
利用GPU实现IDW(反距离加权插值) IDW的实现比较简单,已知插值点位比较少的情况下,可以直接遍历所有插值点,来获取临近的几个点,进行插值运算.插值点较多时,需要可以使用kd-tree来加速临近点 ...
- 离散点插值反距离加权法IDW C#实现
看了很多插值方法,总体来看写的都太复杂,简单应用的时候效率提不上去,数学不太好,只能套公式 1.反距离权重 (IDW) 插值介绍 反距离权重 (IDW) 插值是一种常用而简便的空间插值方法,它以插值点 ...
- 反距离加权法IDW C#实现
public class PointXYZ{public double X;public double Y;public double Z;}public class Interpolation{// ...
- python实现反距离权重插值(IDW)
原文:https://mp.weixin.qq.com/s/2y13vGtqj55Fae-72YXY6g 1 什么叫反距离权重插值? 反距离权重:距离未知点最近的点分配的权重较大,且权重作为距离的函数 ...
- 反距离加权matlab算法,ImageWarping变形算法研究---反距离加权插值(IDW)
参考论文:Image Warping with Scattered Data Interpolation Inverse distance weighted interpolation算法(IDW)实 ...
- ImageWarping变形算法研究---反距离加权插值(IDW)
参考论文:Image Warping with Scattered Data Interpolation Inverse distance weighted interpolation算法(IDW)实 ...
- Python中ArcPy实现Excel时序数据读取、反距离加权IDW插值与批量掩膜
1 任务需求 首先,我们来明确一下本文所需实现的需求. 现有一个记录有北京市部分PM2.5浓度监测站点在2019年05月18日00时至23时(其中不含19时)等23个逐小时PM2.5浓度数据的 ...
- 基于MATLAB的全局多项式插值法(趋势面法)与逆距离加权(IDW)法插值与结果分析
基于MATLAB的全局多项式插值法(趋势面法)与逆距离加权(IDW)法插值与结果分析 1 背景知识 2 实际操作部分 2.1 空间数据读取 2.2 异常数据剔除 2.3 验证集筛选 2.4 最小二乘法 ...
- 反距离权重插值(IDW)的python实现
定义: 反距离加权法又称N-P法,是非规则分布点变成规则分布点常用的网格化方法之一.该方法的基本思想是离所估算的网格点距离越近的离散点对该网格点的影响越大,越远的离散点影响越小,甚至可以认为没有影响. ...
最新文章
- 拼音怎么写_老师:不会写的字用圈代替,看到孩子试卷,网友:人才
- 基于脑电和特征加权阶段训练的驾驶员疲劳状态估计
- phpcms分页查询
- hadoop自动提交脚本
- 使用C#在VS Code中编写Notebook
- 指令寻址方式与数据寻址方式
- 关于非阻塞的recv的时候返回的处理
- java adminlte 使用_AdminLTE2管理后台自定义
- 视差滚动教程、实现方法、源代码
- KD树(k-d tree)
- 雷军:小米MIX Alpha不是折叠屏手机,将会很震撼
- 解决linux服务器上matplotlib中文显示乱码问题
- 制作一个小型linux
- 【渝粤教育】国家开放大学2019年春季 1248公共部门人力资源管理 参考试题
- 【图像处理算法】Hough变换
- esp8266作为wifi中继固件 无线信号延展
- app软件怎么申请软件著作权?
- lsf服务器窗口显示,LSF指定进程提交到指定QUEUES中
- 硕士一般最高延期几年
- 仙道经、清心诀、静心决、冰心诀、定心心经
热门文章
- JS 异步编程的解决方案,以及回调地狱的解决方案
- 游戏设计模式-原型模式
- windows副本不是正版怎么解决_怎么才能创作出打动人的内容?解决别人的问题,而不是自己的问题...
- Linux系统安全及应用-grub菜单启用密码限制10
- IOS-内存泄漏检测工具Instruments中的Leaks
- hanlp自然语言处理包的基本使用--python
- 图解设计模式- Mediator 模式
- CRIE: An automated analyzer for Chinese texts翻译
- 把代码字体加大的办法
- Vue视频播放进行+水印的截图