数字图像缩放算法

来源:互联网 发布:打车软件悄然涨价 编辑:程序博客网 时间:2024/04/20 22:51

一、最临近插值

      将缩放后的图像坐标通过反向变换得到的一个浮点坐标,对其进行简单的四舍五入的取整,得到一个整数型坐标,这个整数型坐标在原图像对应的像素值就是缩放后目的像素的像素值。最邻近插值简单且直观,但产生了明显可见的锯齿,得到的图像质量不高。

      设原图像为f(x,y),缩放后的图像为g(u,v),水平缩放系数为ZoomX,竖直缩放系数为ZoomY,则用下面的等式计算使用最临近插值法缩放后的像素值:


 g(u,v)= f([u/ZoomX],[v/ZoomY])


      其中[]符号表示对包络的数值取整数部分。

二、双线性插值

      将缩放后的图像坐标通过反向变换得到的一个浮点坐标,将浮点坐标在原图像应位置周围的4(2×2)个像素根据某种权值进行加权运算得到的像素值就是缩放后目的像素的像素值。双线性插值缩放后图像质量高,极大地消除了锯齿现象,不会出现像素值不连续的的情况,但由于其具有低通滤波器的性质,使高频分量受损,所以可能会使图像轮廓在一定程度上变得模糊。

      设原图像为f(x,y),缩放后的图像为g(u,v),水平缩放系数为ZoomX,竖直缩放系数为ZoomY,则使用下面的方法计算使用双线性插值法缩放后的像素值。


      令

x' = [u/ZoomX],y' = [v/ZoomY]

m = u/ZoomX - x',n = v/ZoomY - y'

      其中[]符号表示对括号包络的部分取整数部分。

      则有

g(u,v)= (1-m)×(1-n)× f(x',y')+ (1-m)×n× f(x',y'+1)+m×(1-n)× f(x'+1,y') + m×n×f(x'+1,y'+1)

 


 

三、三次卷积法

      三次卷积(内插)法能够克服以上两种算法的不足,是双线性插值算法的改进算法,它输出图像的每个像素都是原图16个像素(4×4)运算的结果。计算精度很高但计算量也很大。

      设原图像为f(x,y),缩放后的图像为g(u,v),水平缩放系数为ZoomX,竖直缩放系数为ZoomY,则使用下面的方法计算使用三次卷积插值法缩放后的像素值。


      令

x' = [u/ZoomX],y' = [v/ZoomY]

m = u/ZoomX - x',n = v/ZoomY - y'

      其中[]符号表示对括号包络的部分取整数部分。

      则有

g(u,v) =  [A][B][C](进行矩阵乘法运算,结果为一个关于u、v的函数)

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

       ┏ f(x'-1, y'-1)   f(x'-1, y'+0)   f(x'-1, y'+1)   f(x'-1, y'+2)   ┓
[B]=  ┃ f(x'+0, y'-1)  f(x'+0, y'+0)  f(x'+0, y'+1)  f(x'+0, y'+2) ┃
     ┃ f(x'+1, y'-1)  f(x'+1, y'+0)  f(x'+1, y'+1)  f(x'+1, y'+2) ┃
     ┗ f(x'+2, y'-1)  f(x'+2, y'+0)  f(x'+2, y'+1)  f(x'+2, y'+2) ┛

     ┏ S(n+1) ┓
[C]=  ┃ S(n+0) ┃
     ┃ S(n-1)   ┃
     ┗ S(n-2)   ┛

              1-2*|x|^2+|x|^3             , 0<=|x|<1

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

         0                                      , 其他


      网上关于图像缩放的算法不是很多,即使有多数描述的也不太清楚,最近做作业刚好在做,所以这里总结一下。