二维图像插值算法实现

在做数字图像处理时,经常会碰到小数象素坐标的取值问题,这时就需要依据邻近象素的值来对该坐标进行插值。比如:做地图投影转换,对目标图像的一个象素进行坐标变换到源图像上对应的点时,变换出来的对应的坐标是一个小数,再比如做图像的几何校正,也会碰到同样的问题。看够了各种数学原理,直接上具体的实现步骤。no公式no理论,以下是对常用的三种数字图像插值 方法进行介绍。

1、最近邻插值法(Nearest Neighbour Interpolation)

这是最简单的一种插值方法,不需要计算,在待求象素的四邻象素中,将距离待求象素最近邻的像素灰度赋给待求象素。设i+u, j+v(i, j为正整数, u, v为大于零小于1的小数,下同)为待求象素坐标,则待求象素灰度的值 f(i+u, j+v) 如下图所示:

如果(i+u, j+v)落在A区,即u<0.5, v<0.5,则将左上角象素的灰度值赋给待求象素,同理,落在B区则赋予右上角的象素灰度值,落在C区则赋予左下角象素的灰度值,落在D区则赋予右下角象素的灰度值。

特点:最近邻插值法虽然计算量较小,但可能会造成插值生成的图像灰度上的不连续,在灰度变化的地方可能出现明显的锯齿状。

2、双线性插值法(Bilinear Interpolation)

双线性插值法的基本思想是根据点(u,v)的4个邻点灰度值,经过三次线性插值计算求出,如下图所示:

若用[S]表示不超过S的最大整数,则

S1:由f(u,v)、f(u+1,v)做第一次水平方向的插值计算,求得

S2:由f(u,v+1)、f(u+1,v+1)做第二次水平方向的插值计算,求得

S3:由做第三次垂直方向的插值计算,求得

本质:根据4个近邻像素点的灰度值做2个方向共3次线性插值

特点:双线性内插法的计算比最邻近点法复杂,计算量较大,但没有灰度不连续的缺点,结果基本令人满意。它具有低通滤波性质,使高频分量受损,图像轮廓可能会有一点模糊。

3、三次多项式插值法(Cubic Polynomial Interpolation)

对于二维医学图像插值需要考虑16个邻域点的灰度值的影响,如下图所示:

算法过程如下:

S1:定义两个中间变量

S2:在四条水平线上分别运用四次多项式插值计算a,b,c,d四点处的灰度值

S3:对a,b,c,d四点在垂直方向上再进行三次多项式插值,计算

其中,函数c(x)的定义如下:

特点:三次多项式插值法插值精度高,但是计算量较大

时间: 2024-10-10 07:01:19

二维图像插值算法实现的相关文章

二维图像到二维屏幕的投影 用例

说明 在默认的2D渲染中,渲染的X,Y轴的范围都是从[-1, 1],屏幕的中心点(0,0),所以鼠标点击的坐标,必须转换成世界地理坐标系,在2D环境下,默认Z轴坐标为0.0 假设屏幕宽800,高4800 屏幕坐标 地理坐标 左上角 0,0 -1,1 左下角  0,480 -1,-1 右上角  800,0           1,1 右下角  800,480         1,-1 现在通过gluOrtho2D函数将二维图像到二维屏幕上的投影,将坐标移动到左下角,方向刚好和屏幕坐标的Y轴相反 代

二维图像的投影和图像重建分析之傅里叶变换法

摘要:图像重建有变换法和迭代法,本文主要分析变换法.根据二维图像的投影,与其傅里叶变换之间的关系,得出图像重建的4种方法,直接傅里叶反变换.先反投影后滤波.先滤波后反投影.卷积反投影.直接傅里叶反变换法利用中心切片定理,先求投影数据的一维傅里叶变换,然后二维插值栅格化得到二维傅里叶变换数据,逆变换后得出目标图像.先反投影后滤波是将投影数据直接反投影,然后频域中通过二维锥形滤波,得到目标图像.先滤波后反投影时在反投影前对数据修正(滤波),卷积反投影与其类似,只是将频率中滤波拿到时域中做卷积运算.对

[理论基础]二维图像滤波处理的理论基础

两个信号在时域的卷积等于频域的乘积.而二维图像常用的滤波处理,就是二维图像与一个3*3或者5*5的滤波数组的卷积,对应于该二维图像与 滤波数组经过傅里叶变换到频域后数据的乘积.正式因为这个数学特征,使得我们在时域看起来很难处理的频率滤波,在频域非常容易得以实现. 通过下面的3张图,很容易理解图像数据里高频信号和低频信号的概念: 1.原图及傅里叶变换幅度(左下)与相位图(右下) 2.傅里叶变换幅度图中心圆外面部分(高频部分)全零与反傅里叶变换后的原图 3.傅里叶变换幅度图中心圆里面部分(低频部分)

用Matplotlib绘制二维图像

唠叨几句: 近期在做数据分析,需要对数据做可视化处理,也就是画图,一般是用Matlib来做,但Matlib安装文件太大,不太想直接用它,据说其代码运行效率也很低,在网上看到可以先用Java做数据处理,然后调用Matlib来画图,另外,还可以使用Matplotlib,它是用Python写的类似Matlib的库,能实现Matlib的功能,而且画图的质量很高,可用于做论文发表.找了一天的资料,终于出图了. Matplotlib需要配合numpy,scipy才能使用,具体安装步骤稍后补充. 正文: 用M

二维图像的三角形变换算法解释

http://blog.csdn.net/aqua_aqua/article/details/407660 对于二维图像的变形,最简单直接的方式就是将需要变形的不规则区域进行三角形划分,使复杂多边形由1到N个三角形组成,那么最终的变形动作也就转化为这些三角形变形. 三角形变形,就是将一个三角形通过某种变换变成另一个三角形,同时也要保证在源三角形中的点能够正确映射到目标三角形中合适的位置.如下图所示: 图中△ABC是源三角形,Z点是源三角形中的任意一点.△abc为目标三角形,而z点就是源三角形中Z

二维图像频谱中的两点表示什么

冈萨雷斯版<图像处理>里面的解释非常形象:一个恰当的比喻是将傅里叶变换比作一个玻璃棱镜.棱镜是可以将光分解为不同颜色的物理仪器,每个成分的颜色由波长(或频率)来决定. 傅里叶变换可以看作是数学上的棱镜,将函数基于频率分解为不同的成分.当我们考虑光时,讨论它的光谱或频率谱.同样, 傅立叶变换使我们能通过频率成分来分析一个函数. 图像傅立叶变换的物理意义 图像的频率是表征图像中灰度变化剧烈程度的指标,是灰度在平面空间上的梯度.如:大面积的沙漠在图像中是一片灰度变化缓慢的区域,对应的频率值很低:而对

python二维图像输出操作大全(非常全)!

//2019.07.141.matplotlib模块输出函数图像应用时主要用的是它的ptplot模块,因此在导入使用该模块时可以直接用以下语句:import matplotlib.pyplot as plt2.matplotlib模块输出图线时它得到坐标轴数值以及标题正常默认是英文形式,而如果需要在转换成为中文形式并且需要正常输出负号则需要用以下两句python语句设置一下,这样便可以正常输出中英文两种形式标题与带负号的坐标数值:plt.rcParams["font.sans-serif&quo

二维图像到二维屏幕的显示,对应屏幕坐标

说明 默认情况下,中心点在屏幕的中心,范围都是从[-1,1],所以物体的实际坐标映射到屏幕坐标需要一个转换过程,上文中描述到使用gluOrtho2D函数通过正投影,将物理坐标映射到屏幕坐标,但是坐标的原点在左下角,一般情况下,屏幕的原点都是从左上角开始,因此在上述的所有例子中,都需要重新计算Y轴的坐标,屏幕的高减去点Y轴分量.现在通过重新设置正射投影的左下角坐标和右上角的坐标,建立一一对应的关系,而不再需要进行任何的转换,类似于旋转相机,达到调整坐标系的作用 代码 #include <gl/gl

二维图形的矩阵变换(二)——WPF中的矩阵变换基础

在前文二维图形的矩阵变换(一)——基本概念中已经介绍过二维图像矩阵变换的一些基础知识,本文中主要介绍一下如何在WPF中进行矩阵变换. Matrix结构 在WPF中,用Matrix结构(struct类型)表示二维变换矩阵,它是一个3*3的数组,结构如下, 由于第三列是常量0,0,1,因此并不作为公开属性,可见的只有剩余六个属性. 构造变换 虽然Matrix类公开了这六个属性让我们设置,但是靠直接设置这六个属性来实现平移.旋转等变换对于我们来说实在太困难了,因此又增加了如下许多函数来帮助我们实现这一