码迷,mamicode.com
首页 > 编程语言 > 详细

二维图像插值算法实现

时间:2016-05-12 17:10:05      阅读:318      评论:0      收藏:0      [点我收藏+]

标签:

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

技术分享

技术分享

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





二维图像插值算法实现

标签:

原文地址:http://blog.csdn.net/lfz_sau/article/details/51366700

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!