首页 理论教育 灰度级插值方法及其应用

灰度级插值方法及其应用

时间:2023-06-20 理论教育 版权反馈
【摘要】:常用的灰度级插值方法有3种:最近邻插值法、双线性插值法和三次内插值法。图2-8 最邻近插值法的示意图例程2-7图2-9 例程2-7的运行结果a)输入的原始图像 b)最邻近插值后的图像双线性插值法双线性插值法是对最邻近插值法的一种改进,即用线性内插方法,根据点P的四个相邻点的灰度值,通过两次插值计算出灰度值f,如图2-10所示。

灰度级插值方法及其应用

在进行图像的比例缩放、旋转及复合变换时,原始图像的像素坐标(xy)为整数,而变换后目标图像的位置坐标并非整数,反之亦然。因此,在进行图像的几何变换时,除了要进行几何变换运算之外,还需要进行灰度级插值处理。常用的灰度级插值方法有3种:最近邻插值法、双线性插值法和三次内插值法。

(1)最近邻插值法

最近邻插值法是一种简单的插值方法,如图2-8所示,它是通过计算与点Px0y0)邻近的四个点,并将与点Px0y0)最近的整数坐标点(xy)的灰度值取为Px0y0)点灰度近似值。在Px0y0)点各相邻像素间灰度变化较小时,这种方法是一种简单快速的方法,但当Px0y0)点相邻像素间灰度值差异很大时,这种灰度估计值方法会产生较大的误差,甚至可能影响图像质量。

最邻近插值算法的MATLAB实现源程序如例程2-7所示,图2-9是例程2-7的运行结果。

978-7-111-42352-2-Chapter02-43.jpg

图2-8 最邻近插值法的示意图

例程2-7

978-7-111-42352-2-Chapter02-44.jpg

978-7-111-42352-2-Chapter02-45.jpg

图2-9 例程2-7的运行结果

a)输入的原始图像 b)最邻近插值后的图像

(2)双线性插值

双线性插值法是对最邻近插值法的一种改进,即用线性内插方法,根据点Px0y0)的四个相邻点的灰度值,通过两次插值计算出灰度值fx0y0),如图2-10所示。

具体计算情况如下:

1)计算αβ

978-7-111-42352-2-Chapter02-46.jpg

2)先根据fxy),fx+1,y)插值求fx0y

fx0y)=fxy)+α[fx+1,y)-f(xy)]

3)再根据fx0y+1),fx+1,y)插值求fx0y+1)

fx0y+1)=fxy+1)+α[fx+1,y+1)-f(xy+1)]

4)最后根据fx0y)及fx0y+1)插值求fx0y0

fx0y0)=fx0y)+β[fx0y+1)-fx0y)]=(1-α)(1-βfxy)+α(1-βfx+1,y)+(1-αβfxy+1)+βαfx+1,y+1)=fxy)+α[fx+1,y)-fxy)]+β[fxy+1)-fxy)]+βα[fx+1,y+1)+fxy)-fxy+1)-fx+1,y)]

式中,x=[x0];y=[y0]。

978-7-111-42352-2-Chapter02-47.jpg

图2-10 双线性插值示意图

由于双线性插值法已经考虑了点Px0y0)的直接邻点对它的影响,因此一般可以得到令人满意的插值效果。但这种方法具有低通滤波性质(图像滤波将在本书2.4节介绍),高频分量会受到损失,使图像因细节退化而变得轮廓模糊。在某些应用中,双线性插值的斜率不连续还可能会产生一些不期望的效果。

例程2-8是运用双线性插值对图像进行放大的MATLAB源程序,其运行过程如图2-11a所示,运行结果如图2-11b所示。

例程2-8

978-7-111-42352-2-Chapter02-48.jpg

978-7-111-42352-2-Chapter02-49.jpg

978-7-111-42352-2-Chapter02-50.jpg

图2-11 运用双线性插值放大图像

a)例程2-8的运行过程(www.xing528.com)

978-7-111-42352-2-Chapter02-51.jpg

图2-11 运用双线性插值放大图像(续)

b)例程2-8的原始图像及其运行结果

(3)三次内插值法

为了得到更精确的Px0y0)点的灰度值,在更高程度上保证几何变换后的图像质量,实现更精确的灰度插值效果,可采用三次内插值法等更高阶插值法,如三次样条函数、Legendre中心函数和sin(πx)/(πx)函数等,这时既要考虑Px0y0)点的直接邻点对它的影响,还应考虑该点周围16个邻点的灰度值对它的影响(见图2-12)。

978-7-111-42352-2-Chapter02-52.jpg

图2-12 三次内插值法的示意图

根据连续信号采样定理可知,若对采样值用插值函数sx)=sin(πx)/(πx)进行插值,当采样频率不低于信号频谱最高频率的2倍时可以准确地恢复原信号,并可准确地得到采样点间任意点的值。

sx)=sin(πx)/(πx)可以采用以下三次多项式近似。

978-7-111-42352-2-Chapter02-53.jpg

采用插值函数sin(πx)/(πx),可以按下述步骤差值算出fx0y0)。

1)计算s(1+α)、sα)、s(1-α)、s(2-α)以及s(1+β)、sβ)、s(1-β)、s(2-β)。

2)根据fx-1,y),fxy),fx+1,y),fx+2,y)计算fx0y)。

fx0y)=s(1+αfx-1,y)+sαfxy)+s(1-αfx+1,y)+s(2-αfx+2,y

3)按步骤2)求fx0y-1),fx0y+1),fx0y+2)。

4)根据fx0y-1),fx0y),fx0y+1),fx0y+2)计算fx0y0)。

fx0y0)=s(1+βfx0y-1)+sβfx0y)+s(1-βfx0y+1)+s(2-β)f(x0y+2)

上式计算过程可用矩阵表示为

A=(s(1+αsαs(1-αs(2-α))

978-7-111-42352-2-Chapter02-54.jpg

C=(s(1+βsβs(1-βs(2-β))T

在MATLAB数字图像处理工具箱提供了imresize函数,采用不同的插值方法可改变图像的大小,其调用格式如下。

978-7-111-42352-2-Chapter02-55.jpg

imresize函数使用由参数method指定的插值运算来改变图像的大小。method的几种可选值为:

978-7-111-42352-2-Chapter02-56.jpg

例程2-9是调用imrersize函数进行图像放缩的MATLAB程序,其运行结果如图2-13所示。

例程2-9

978-7-111-42352-2-Chapter02-57.jpg

978-7-111-42352-2-Chapter02-58.jpg

978-7-111-42352-2-Chapter02-59.jpg

图2-13例程2-9的运行效果

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈