现在的位置: 首页 > 综合 > 正文

对插值算法的理解

2019年11月12日 ⁄ 综合 ⁄ 共 3092字 ⁄ 字号 评论关闭

最邻近插值(近邻取样法):

最临近插值的的思想很简单。对于通过反向变换得到的的一个浮点坐标,对其进行简单的取整,得到一个整数型坐标,这个整数型坐标对应的像素值就是目的像素的像素值,也就是说,取浮点坐标最邻近的左上角点(对于DIB是右上角,因为它的扫描行是逆序存储的)对应的像素值。可见,最邻近插值简单且直观,但得到的图像质量不高

双线性内插值:

对于一个目的像素,设置坐标通过反向变换得到的浮点坐标为(i+u,j+v),其中ij均为非负整数,uv[0,1)区间的浮点数,则这个像素得值 f(i+u,j+v) 可由原图像中坐标为 (i,j)(i+1,j)(i,j+1)(i+1,j+1)所对应的周围四个像素的值决定,即:

f(i+u,j+v) = (1-u)(1-v)f(i,j) + (1-u)vf(i,j+1) + u(1-v)f(i+1,j) + uvf(i+1,j+1)

其中f(i,j)表示源图像(i,j)处的的像素值,以此类推。

双线性内插值法比最近邻插值方法计算量大,但缩放后图像质量高,不会出现像素值不连续的的情况。由于双线性插值具有低通滤波器的性质,使高频分量受损,所以可能会使图像轮廓在一定程度上变得模糊。

三次卷积插值:

三次卷积法能够克服以上两种算法的不足,计算精度高,但计算亮大,他考虑一个浮点坐标(i+u,j+v)周围的16个邻点,目的像素值f(i+u,j+v)可由如下插值公式得到:

    f(i+u,j+v) = [A] * [B] * [C]

[A]=[ S(u + 1) S(u + 0) S(u - 1) S(u - 2) ]

  ┏ f(i-1, j-1) f(i-1, j+0) f(i-1, j+1) f(i-1, j+2)
   

[B]=┃ f(i+0, j-1) f(i+0, j+0) f(i+0, j+1) f(i+0, j+2) ┃

  ┃ f(i+1, j-1) f(i+1, j+0) f(i+1, j+1) f(i+1, j+2) ┃

  ┗ f(i+2, j-1) f(i+2, j+0) f(i+2, j+1) f(i+2, j+2) ┛

  ┏ S(v + 1) ┓

[C]=┃ S(v + 0) ┃

  ┃ S(v - 1)  ┃

  ┗ S(v - 2)  ┛

   ┏ 1-2*Abs(x)^2+Abs(x)^3      , 0<=Abs(x)<1

S(x)={ 4-8*Abs(x)+5*Abs(x)^2-Abs(x)^3 , 1<=Abs(x)<2

   ┗ 0                , Abs(x)>=2

S(x)是对 Sin(x*Pi)/x 的逼近Pi是圆周率——π

图像缩放中的三次插值都要涉及到两个维度上的16个已有采样点。这并算不上真正的二维插值,只是相当于先后在两个维度上进行一维插值S(x)是插值的核函数,是关键所在。三次差值核函数跨度为4-2<x<2)。

Catmull-Rom样条插值:

1、一维的Catmull-Rom插值

Catmull-rom样条是为计算机图形学和辅助设计而设计的局部插值样条,它包含了控制数据点和在点上的切线。原理是一个点的值由它左右的控制点和控制点的切向量混合而成:

图像缩放中插值算法的理解(一) - 家树 - 远远的秋

一个控制点的切向量又是它的左右控制点的平均值,所以有:

图像缩放中插值算法的理解(一) - 家树 - 远远的秋

化简后有:

图像缩放中插值算法的理解(一) - 家树 - 远远的秋

其中t的范围是[0,1]。这样,两个连续的控制点PiPi+1(设参数分别为ti,ti+1)之间的参数值为x的点对应的值可以根据上式求出,其中,t=x-titi<=x<ti+1

2、在两个维度上进行Catmull-Rom插值

和三次卷积插值的形式一样,分别在两个维度上进行Catmull-Rom样条插值。形式可以写成

f(i+u,j+v) = [A] * [B] * [C]

[A]=[ S(u + 1) S(u + 0) S(u - 1) S(u - 2) ]

  ┏ f(i-1, j-1) f(i-1, j+0) f(i-1, j+1) f(i-1, j+2)
   

[B]=┃ f(i+0, j-1) f(i+0, j+0) f(i+0, j+1) f(i+0, j+2) ┃

  ┃ f(i+1, j-1) f(i+1, j+0) f(i+1, j+1) f(i+1, j+2) ┃

  ┗ f(i+2, j-1) f(i+2, j+0) f(i+2, j+1) f(i+2, j+2) ┛

  ┏ S(v + 1) ┓

[C]=┃ S(v + 0) ┃

  ┃ S(v - 1)  ┃

  ┗ S(v - 2)  ┛

[B]是控制点矩阵,很容易得到,但是[A][C]的含义是什么就需要计算了,S(x)是该插值方法的核函数。作如下推导(因为控制点是像素,所以设每个控制点之间的参数距离为1):

uv是所求点在横轴上和纵轴上到第二个控制点的参数距离。

图像缩放中插值算法的理解(一) - 家树 - 远远的秋

 

即:[A] = [ 1 , x , x2 ,x3 ] * [M]      [C] = [M] T* [ 1 , y , y, y3 ]

[A][C]又是由函数S(t)决定的,这个可以看做样条的基函数。现在在一维情况下推导函数S(t)

因为t的范围是01,表示插值点在中间两个控制点PiPi+1之间,而

P(t) = Pi-1 * F1(t) + Pi * F2(t) + Pi+1 * F3(t) + Pi+2 * F4(t) 。           (1

又有:[ F1 , F2 , F, F4 ] = [ 1 , t , t2 ,t3 ] * M。                                 
2

式(1)中的参数t范围是从01,要想转化成基函数S(x)时,需要对参数进行修改,因为基函数S(x)中的参数x是到控制点参数的距离,而4F函数中的t只是到第二个控制点的参数的距离。需要进行转化。

F1(t) = -1/2 * t * (t-1)2t为到Pi的参数ti的距离,转化成到Pi-1的参数ti-1的距离u

u = t +1 => t = u -1。于是转化成 f1(u) = -1/2 * ( u3 - 5u2 + 8u -4 )        1 < u <= 2

同理,对以F2(t)u = t => t = uf2(u) = 1/2 * ( 3u3 - 5u2 + 2 )        
   0 <= u <= 1

          F3(t)u = 1-t => t = 1-u, f3(u) = 1/2 * ( 3u3 - 5u2 + 2 )      
    0 <= u <= 1

          F4(t)u = 2-t => t = 2-uf4(u) = -1/2 * ( u3 - 5u2 + 8u -4 )        1 < u <= 2

于是推出Catmull-Rom样条的混合基函数为:

    
 3/2 * |t|3 - 5/2 * |t|2 + 1                            |t| <=1

S (t) =┃ 
-1/2 * |t|3 + 5/2 * |t|2 - 4 * |t| + 2    
   1 < |t| <=2

    
┗ 0                                                                |t| >2

http://jiashu.blog.163.com/blog/static/176579035201112310557223

【上篇】
【下篇】

抱歉!评论已关闭.