图像分辨率增强或者改变图像大小

来源:互联网 发布:linux 错误日志 编辑:程序博客网 时间:2024/06/06 03:11

     最近有一段时间做图像处理方面的东西,遇到了一些样张需要进行分辨率的增强或者说是放大图像,如何在图像不失真的情况下放大图像呢?总的来说就是插值,插值包括零阶插值、双线性插值(Bilinear Interpolation)、立方卷积法(Bicubic Interpolation)等方法。

     我实验了双线性插值和双三次插值,双三次插值的计算量比较大,但是效果也相对较好。有一篇叫“数字图像最佳插值算法研究”的中文论文中详细介绍了这三种方法的理论,还做了简单的比较。

     Bilinear Interpolation的公式很简单,就是一个线性插值,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),与(i,j)相邻的四个像素点乘以权值的加和即为插值后的灰度值。

     Bicubic Interpolation相对比较复杂,公式如下:    

         f(x,y) = A*B*C,其中:

 

    由此可以计算插值像素点的灰度值。该插值方法的C#代码如下:

    大家不一定有耐心去看懂它,双线性插值的方法也是这样写,只不过比这个要简单!