插值算法

用于图像缩放。

1、最近邻插值算法(零阶插值算法)

目标图像B(X,Y)通过同时求得源图像A(x+u,y+v)(u,v是<=1的小数),则对应在源图像上的坐标为A(x,y)=A(i,j),所以要找邻近的4个像素点:

如果 i+u, j+v(i落在 A区,即 u<0.5,v<0.5,则将左上角象素的灰度值赋给待求象素,同理落在B区则赋予右上角的象素灰度值,落在C区则赋予左下角象素的灰度值,落在D区则赋予右下角象素的灰度值。
最近邻插值法计算量较小,但可能会造成生的图像灰度上的不连续,在变化地方可能出现明显锯齿状。

近邻取样插值缩放简单、速度快,但是缩放出的图片质量比较差,当图片放大时,缺少的像素通过直接使用与之最近原有颜色生成,也就是说照搬旁边的像素这样做结果产生了明显可见的锯齿。效果不好的根源就是其简单的最临近插值方法引入了严重的图像失真,比如,当由目标图的坐标反推得到的源图的的坐标是一个浮点数的时候,采用了四舍五入的方法,直接采用了和这个浮点数最接近的象素的值,这种方法是很不科学的。

2、双线性(一阶插值法)

经过三次插值才能得到最终结果,是对最近邻的改进。先对两水平方向进行一阶线性插值,然后再在垂直方向上进行一阶线性插值。能创造出比双线性插值更平滑的图像边缘。

单线性插值

相当于在y=y0和y=y1这两个值上做了线性的插值。

双线性插值

双线性插值是有两个变量的插值函数的线性插值扩展,在两个方向分别进行一次线性插值。

假如想得到未知函数f在p点的值,已经知道了f在Q11 = (x1, y1)、Q12 = (x1, y2), Q21(x2, y1) 以及 Q22(x2, y2) 四个点的值。

首先在x方向进行两次线性插值:

然后在 y 方向进行一次线性插值:

图像双线性插值只会用相邻的4个点,opencv中用了一些优化手段,比如用整数计算代替float,源图像和目标图像几何中心的对齐。

假设源图像A大小为m*n,像素坐标为(x,y),缩放后的目标图像大小是M*N,依次求B(X,Y)每一个像素点的值,先找到B(X,Y)对应在A(x,y)的坐标:

x = X * (m/M)

y = Y * (n/N)

中心对齐(OpenCV也是如此): 

SrcX=(dstX+0.5) * (srcWidth/dstWidth) -0.5 
SrcY=(dstY+0.5) * (srcHeight/dstHeight)-0.5 

源图像和目标图像的原点(0,0)均选择左上角,假设你需要将一幅5x5的图像缩小成3x3,那么源图像和目标图像各个像素之间的对应关系如下。如果没有这个两个图像的几何中心对齐,根据基本公式去算,就会发现源图像中最右边和最下边上的像素没有参与运算,输出图像的像素点的灰度值相对于源图像偏,就会得到左边这样的结果;而用了对齐,就会得到右边的结果: 

效果分析

效果好于最近邻插值,计算量稍大,放缩后图像质量提高,基本克服了最近邻插值灰度值不连续的缺点,但是由于只考虑了相邻的4个点,没有考虑各个点之间灰度值的变化率的影响,因此具有低通滤波的作用,知道图像的高频分量受到影响,图像边缘在一定程度上变得模糊。

3、立方卷积插值算法(双三次、双立方)

是对双线性插值的改进,是一种较为复杂的插值方式,它不仅考虑到相邻的4*4像素点灰度值的影响,还考虑到它们灰度值变化率的影响。

卷积插值公式

假设P(x+u,y+v)点就是(x,y)对应在目标图像的位置,双立方差值就是通过bicubic基函数得到目标像素点周围的16个相邻像素目标像素点P的影响因子,该基函数(卷积插值公式)是:

a=-0.5时比较合适

x位在目标图像中相邻的16个像素到P的距离。

a=-1时

此时逼近的函数是y = sin(x*π)/(x*π):

当a=-0.5

此时逼近三次Hermite样条

对比图

过程

假设源图像A大小为m*n,像素坐标为(x,y),缩放后的目标图像大小是M*N,依次求B(X,Y)每一个像素点的值,先找到B(X,Y)对应在A的坐标(x+u,y+v),因为计算出来的不可能肯定是整数,所以这样表示,然后找找到最接近的点就是A(x,y),最终B(X,Y)的像素值就是由A(x,y)附近的16个像素点来决定,这十六个像素点的范围是:

 

设像素点的像素值的函数是f(x,y),那么目标图像B中对应的像素点(X,Y)的像素值为F(x+u,y+v):

S(x)就是卷积插值公式W(x)。

a取-0.5

矩阵形式:

效果分析

立方卷积插值不仅考虑到周围四个直接相邻像素点灰度值的影响,还考虑到它们灰度值变化率的影响。因此克服了前两种方法的不足之处,能够产生比双线性插值更为平滑的边缘,计算精度很高,处理后的图像像质损失最少,效果是最佳的。

4、基于像素区域关系

共分三种情况,图像放大时类似于双线性插值,图像缩小(x轴、y轴同时缩小)又分两种情况,此情况下可以避免波纹出现。

5、兰索斯插值

由相邻的8*8像素计算得出,公式类似于双线性,执行效率非常低。

 

posted @ 2019-08-12 22:13  Austin_anheqiao  阅读(4201)  评论(0编辑  收藏  举报