转载于 数字图像处理(九)插值算法之二 数字图像处理(九)插值算法之二 在CFA去马赛克和图像旋转放大时都需要进行插值运算。在空间域内,插值是卷积计算。 当已知数据点位于整数格点上时,插值函数h(x)应该有:h(0)=1;h(n)=0; n是非零整数。 在频率域,以步长1采样的图像中如果含有高于1/2的频率分量将会产生混叠。空间域内的卷积对应在频率域内的相乘运算,可以从中判断插值算法的特性 这是几类插值函数在空间域的曲线: |
对应频率域的变换:
下面比较一下几类插值算法的特点。
1)邻域插值。即找离插值点最近的格点的值作为插值点的值。
插值函数是一个宽度为1的矩形脉冲。在频率域则是一个sinc函数。在-1/2和1/2的频率附近,sinc函数对原频谱中的高频分量进行衰减,使得插值图像变得模糊;而sinc函数在频率轴上向两端无限延伸,减弱缓慢,加入了新的高频分量,对应在插值图像中形成锯齿。
2)线性插值。权重由离插值点的距离线性决定。
插值函数是半宽为1的三角脉冲,即两个宽度为1的矩形脉冲的卷积,所以在频率域是一个sinc^2函数。与邻域插值相比,混入的高频有所减少,同时图像也变得模糊。
3)立方插值。
插值函数为:((A+2)x-(A+3))x^2+1 (0<x<1) ((Ax-5A)x+8A)x-4A (1<x<2)
(选自http://www.all-in-one.ee/~dersch/interpolator/interpolator.html)
插值函数的特点:第一个节点位于x=1,此处曲线的斜率是A。第二个节点位于x=2,斜率是0。
在频率域上可以看出,参数A越接近0,原图像中的高频分量衰减得越厉害;A越接近-1,原图像中的高频分量衰减得越少,甚至中间波段还有提升。因此参数可以用来调节图像的锐度。根据这个网页上的数据,认为PS的算法接近于A=-0.75的效果。
上面三种插值函数在+-1/2频率处的响应均降为0,从而抑制了混叠效应,同时模糊了图像。
4)sinc插值
sinc函数在频率域是一个矩形,看起来似乎最适合做内插。在+-1/2频点,矩形函数的值降低到1/2而非0,因此如果存在混叠则无法得到抑制。从实际来看,很难限制图像的带宽。因此使用sinc函数做插值在图像的边缘等地方会很敏感。另一方面,sinc函数做插值时收敛较慢,需要的采样点要多得多。在采样点较少时,在+-1/2频点会出现振荡,产生失真。
5)加窗sinc插值(选自http://www.all-in-one.ee/~dersch/interpolator/interpolator.html)
将两个不等宽矩形脉冲做卷积,得到梯形脉冲。使用这个函数在频域做乘积,则图像中的高频分量受到较少的衰减,图像细节被保留,而超出采样带宽较多的分量被阻断,不会产生类似振铃的效应。
在空间域,插值函数为sinc(x)*sinc(x/w),w是窗口宽度。与立方或线性插值相比,所需要的采样点多很多。
最后,比较一下各种插值方法的效果。原始图片如下,里面含有大反差边缘,纹理,高反差直线等特征,可以用来考查插值效果。
实际上单独一次插值操作结果的差别是较难观察的,受http://www.all-in-one.ee/~dersch/ interpolator/ interpolator.html 的内容启发,用连续旋转图像的方法使得插值效应累积起来以便于比较。原图转为ldf文件后,以18度角连续旋转10次,再做一次180度旋转。
图片的排列顺序
双线性 | 双立方(-0.75) | sinc(X) |
PS | 双立方(-0.60) | sinc(X)*sinc(X/8) |
可以看出,线性插值计算量最小(4个采样点),最为模糊。三次插值使用16个采样点,效果改善,a=-0.75时在边缘出现振铃效应,a=-0.6时综合效果最好。使用photoshop双立方插值旋转后的图像也作为比较。sinc插值保留了所有边缘的形状,但由于高频混叠未加抑制,边缘附近的纹理失真较大。加窗sinc的效果最佳,但需要48x48个采样点,计算代价极高。