双三次插值法

1. 双三次插值(BiCubic)法介绍

  双三次插值又叫双立方插值,用于在图像中“插值”(Interpolating)或增加“像素”(Pixel)数量/密度的一种方法。在这种方法中,函数f在点 (x,y) 的值可以通过矩形网格中最近的十六个采样点的加权平均得到,在这里需要使用两个多项式插值三次函数,每个方向使用一个。Adobe Photoshop CS 为用户提供了两种不同的双三次插值方法:双三次插值平滑化和双三次插值锐化。通过双三次插值可以得到一个连续的插值函数,它的一阶偏导数连续,并且交叉导数处处连续。它能比占主导地位的双线性滤波算法保留更好的细节质量。

2. 公式介绍

  常用的双三次插值函数有Bicubic、Mitchell、Lanczos等。这里介绍用的比较多的Bicubic函数:

 

  W参数X为所求像素点到附近点的距离(包括x方向与y方向)。 a值一般取1或-0.5。该函数的波形如下图所示: 

 

 

 

  对于插值的像素点(x,y)(x,y可为浮点数),选择附近的4x4个点进行加权求和。按如下公式进行计算:

 

 

 

 

3. 优缺点

  优点在于具有一阶、二阶导数收敛的性质,插值得到的结果更加平滑,缺点是运算量较大。

4. 代码测试

  此处像最近邻与双线性插值自己实现。这里借助opencv库函数直接看效果。

import cv2 as cv
srcimg=cv.imread('songshu.jpg')
#print(srcimg.shape)#打印出来是(300,300,3)
#srcimg.shape[0]、[1]、[2]分别表示高度,宽度,通道数
disimg=cv.resize(srcimg,(int(1.5*srcimg.shape[1]),int(1.5*srcimg.shape[0])),interpolation=cv.INTER_CUBIC) cv.imshow('srcimg',srcimg) cv.imshow('disimg',disimg) #使用无损的方式保存成PNG格式 cv.imwrite('songshudist.png', disimg, [cv.IMWRITE_PNG_COMPRESSION, 0]) cv.waitKey(0)

5. 效果

  下图分别是原图与放大1.5倍后的图像,效果不错。

 

 

 

 

 不足之处望指正,谢谢!

 

posted @ 2022-07-22 23:36  wancy  阅读(1905)  评论(0编辑  收藏  举报