图像插值算法总结
最近邻域插值
变换后的目标图像某点像素值等于源图像中与变换前相应点最近的点的像素值。
在四邻像素中,将距离待求像素最近的邻像素灰度赋给待求像素。
双线性插值
原理:
假设源图像大小为mxn,目标图像为axb。那么两幅图像的边长比分别为:m/a和n/b。注意,通常这个比例不是整数,编程存储的时候要用浮点型。目标图像的第(dstX, dstY)个像素点可以根据如下公式对应回源图像:
假设得到的原图像对应坐标是(2.5, 4.5),那么最近的四个像素是(2, 4), (2, 5), (3, 4) 和 (3, 5)。
然后根据对应坐标与四个像素距离的远近得到四个像素对给坐标影响的权值,根据该权值计算对应坐标的像素值。
计算公式:
注意事项:
将浮点运算转换成整数运算
像素计算过程存在着大量的浮点数运算,对于图像这样大的计算用户来说,是一个较为耗时的过程。
考虑到图像的特殊性,像素值的计算结果需要落在0到255之间,最多只有256种结果,由上式可以看出,一般情况下,计算出的f(x,y)是个浮点数,我们还需要对该浮点数进行取整。因此,我们可以考虑将该过程中的所有类似于1-x、1-y的变量放大合适的倍数,得到对应的整数,最后再除以一个合适的整数作为插值的结果。
如何取这个合适的放大倍数呢,要从三个方面考虑,
第一:精度问题,如果这个数取得过小,那么经过计算后可能会导致结果出现较大的误差。
第二,这个数不能太大,太大会导致计算过程超过长整形所能表达的范围。
第三:速度考虑。假如放大倍数取为12,那么算式在最后的结果中应该需要除以12*12=144,但是如果取为16,则最后的除数为16*16=256,这个数字好,我们可以用右移来实现,而右移要比普通的整除快多了。
综合考虑上述三条,选择2048这个数比较合适。
源图像和目标图像几何中心的对齐
基准点的选取会导致目标图像往该基准点的方向偏移
立方插值(双三次插值算法)
两次立方插值算法不仅考虑到周围四个直接相邻像素点灰度值的影响,还考虑到它们灰度值变化率的影响。
在双立方插值法中,我们选取的是最近的16个像素点作为计算目标图像B(X,Y)处像素值的参数。
双立方插值的目的就是通过找到一种关系,或者说系数,可以把这16个像素对于P处像素值得影响因子找出来,从而根据这个影响因子来获得目标图像对应点的像素值,达到图像缩放的目的。
基函数:
Lanczos插值算法
基函数:
a取2或者3,a=2时,该算法适用于图像缩小插值;a=3时,该算法适用于放大插值。
Lanczos插值可以选取更多周围的像素参与权重计算。
以上都是线性插值算法。
线性图像插值算法在缩放过程使用了统一的数学模型,导致边缘部分的高频信息损失,造成图像物体边缘层次模糊。研究表明,人眼最为敏感的就是图像边界、纹理等区域,图像边界不仅能够传递图像大部分信息,而且能勾勒出物体的基本轮廓,是影响视觉效果的重要因素。
非线性插值算法:
基于小波变换的插值算法
小波变换 (DWT)的基本思想就是将信号分解到不同的尺度或者分辨率层上,这样可以在不同的尺度上独立的对信号进行研究和分析。正交小波分解不仅可将图像的高低频信息很好地分离,而且分解后各层子带之间具有相似性。分解后的低频信息中包含了图像的绝大部分能量;高频信息则对应图像的边缘信息。
基于边缘保持的灰度图像插值算法
由于边缘对人眼知觉系统的视觉重要性,有研究者提出了边缘引导的图像插值方法 来对图像边缘进行放大。基于边缘信息的图像插值方法的核心思想是对非边缘像素点采用无方向的传统插值方法进插值,而对于边缘像素点则采用有方向的插值方法。边缘像素及其方向判断的精准度对最后的图像插值结果有着决定性的影响。
参考链接:
https://blog.csdn.net/yi_tech_blog/article/details/52997234
https://blog.csdn.net/qq_37577735/article/details/80041586#1%E5%8E%9F%E7%90%86
https://www.iteye.com/blog/handspeaker-1545126
https://www.cnblogs.com/Imageshop/archive/2011/11/12/2246808.html
https://blog.csdn.net/jningwei/article/details/78822026
https://blog.csdn.net/baidu_38172402/article/details/88975109
https://blog.csdn.net/weixin_41311617/article/details/88943092