二维图像插值算法实现

来源:互联网 发布:mac照片导入 编辑:程序博客网 时间:2024/05/16 14:06

       在做数字图像处理时,经常会碰到小数象素坐标的取值问题,这时就需要依据邻近象素的值来对该坐标进行插值。比如:做地图投影转换,对目标图像的一个象素进行坐标变换到源图像上对应的点时,变换出来的对应的坐标是一个小数,再比如做图像的几何校正,也会碰到同样的问题。看够了各种数学原理,直接上具体的实现步骤。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)的定义如下:



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





0 0
原创粉丝点击