计算机视觉(五)双三次插值(Bicubic Interpolation)算法介绍及opencv和matlab的代码实现及区别

超分辨率基础_插值算法简介

1.插值算法

数学的数值分析领域中,内插或称插值(英语:interpolation)是一种通过已知的、离散的数据点,在范围内推求新数据点的过程或方法。常见的三种插值算法为最近邻插值、双线性插值和双三次插值。

一组离散数据点在一个外延的插值。曲线中实际已知数据点是红色的;连接它们的蓝色曲线即为插值。

2.最近邻插值算法

最邻插值算法(Nearest Neighbor interpolation)是最简单的一种插值算法,当图片放大时,缺少的像素通过直接使用与之最近原有像素生成,原理就是选取距离插入的像素点(x+u, y+v)【注:x,y为整数, u,v为小数】最近的一个像素点,用它的像素点的灰度值代替插入的像素点。

i+u, j+v为待求像素坐标,如果 i+u, j+v落在A区,即 u<0.5,v<0.5,则将左上角像素的灰度值赋给待求像素,同理落在B区则赋予右上角的像素灰度值,落在C区则赋予左下角像素的灰度值,落在D区则赋予右下角像素的灰度值。

最近邻插值法计算量较小,但可能会造成生的图像灰度上的不连续,在变化地方可能出现明显锯齿状。

3.双线性插值算法

在数学上,双线性插值是有两个变量的插值函数的线形插值扩展,其核心思想是在两个方向分别进行一次线性插值。

以上是一维的,接下来看看二维中的双线性插值

首先在x方向上面线性插值,得到R2、R1

然后以R2,R1在y方向上面再次线性插值

如果选择一个坐标系统使得 f 的四个已知点坐标分别为 (0, 0)、(0, 1)、(1, 0) 和 (1, 1),那么插值公式就可以化简为

用矩阵表示

双线性内插法的计算比最邻近点法复杂,计算量较大但没有灰度不连续的缺点,结果基本令人满意。它具有低通滤波性质,使高频分量受损,图像轮廓可能会有一点模糊。

4.双三次插值算法(bicubic interpolation)

在数值分析这个数学分支中,双三次插值(英语:Bicubic interpolation)是二维空间中最常用的插值方法。在这种方法中,函数 f 在点 (x, y) 的值可以通过矩形网格中最近的十六个采样点的加权平均得到,在这里需要使用两个多项式插值三次函数,每个方向使用一个

双三次插值计算公式

那么这个a(i, j)便是介绍里面所说的加权系数了,所以关键是要把它求解出来。

求解加权系数的公式如下

相关论文

有适当的边界条件(boundary condition)和约束插值内核(constrains on the interpolation kernel)的时候,立方卷积是更好方式,并给出了这个式子:

当a=-0.5时比较合适

keys说rifman和bernstein给了他用这个模型的勇气,

bernstein说是riffman提出用sinx/x近似,啊哈就算这是源头吧。。但是还差个pi

keys又说hou那他得到了启发,嗯,搜了一下果然。。难道说这个欧米茄就是pi?

额,它不是。那大概认为大家都觉得乘上pi比较合适吧。
效果是这样的。

双三次曲线插值方法计算量较大,但后的图像效果最好。

5.代码实现

opencv

  1. import cv2 as cv
  2. img = cv.imread('automobile.png')
  3. # 放大图像,双三次插值
  4. enlarge = cv.resize(img, (0, 0), fx=4, fy=4, interpolation=cv.INTER_CUBIC)
  5. cv.imshow("Image", enlarge)
  6. cv.waitKey (0)
  7. cv.destroyAllWindows()

matlab 

  1. import cv2
  2. from matplotlib import pyplot as plt
  3. img = cv2.imread('yosemeti.jpg',0)
  4. plt.imshow(img,cmap='gray', interpolation='bicubic')
  5. plt.show()

6.区别

opencv和matlab的bicubic算法有什么区别?

 

来自Matlab的文档:

'bicubic':双立方插值(默认值);输出像素值是最近的4乘4邻域中像素的加权平均值。

来自OpenCV的文档:

INTER_CUBIC - 4x4像素邻域的双三次插值。

 

所以对此的唯一解释是他们使用不同的加权策略来获得平均值。

来自Matlab imresize.m source,您可以找到内核常量A (请参阅维基百科上的双立方插值)设置为 -0.5 ,而在OpenCV中设置为 -0.75 (请参阅imgproc/src/imgwarp.cpp,函数interpolateCubic()在github上)。这为卷积提供了不同的内核形状,因此最终插值图像的结果会略有不同。

参考

https://blog.csdn.net/nandina179/article/details/85330552

https://www.jianshu.com/p/8118e708b766

opencv和matlab的bicubic算法有什么区别?

(0)

相关推荐

  • 基于OpenCV Haar实战级联分类器的使用

    重磅干货,第一时间送达 近年来,对象检测引起了广泛的关注.从智能手机到交通监控,目标检测已遍及每个领域.时间和准确性是对象检测中的关键约束.目标检测算法的成功取决于其特征表示技术和学习算法,后者仅关注 ...

  • 用于数字成像的双三次插值技术​

    重磅干货,第一时间送达 双三次插值是使用三次或其他多项式技术的2D系统,通常用于锐化和放大数字图像.在图像放大.重新采样时,或是在软件中润饰和编辑图像时也会使到用它.当我们对图像进行插值时,实际上是在 ...

  • (2条消息) 计算机视觉

    源码:https://github.com/PacktPublishing/OpenCV3-Computer-Vision-Application-Programming-Cookbook-Third ...

  • 图像去马赛克:双线性插值VS高质量线性插值

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 推荐阅读 42个pycharm使用技巧,瞬间从黑铁变王者 Goog ...

  • python+opencv图像处理(九)

    图像缩放 下雨了... 图像是可以放大和缩小的,简称图像缩放. 不过不管放大还是缩小,都可以用resize. 1.缩小 如下图,左图为原图,中间图为将左图行和列均缩小一半的图,右图为缩小到四分之一的图 ...

  • 【OpenCV 4开发详解】图像连通域分析

    小白学视觉",选择"星标"公众号 重磅干货,第一时间送达 经过几个月的努力,小白终于完成了市面上第一本OpenCV 4入门书籍<OpenCV 4开发详解>.为 ...

  • 还原百年前的世界,AI 大牛将 1895 年老电影转换为 4K 高清!

    <火车到站>是电影史上最著名的电影之一.该片由法国导演奥古斯特和路易·卢米埃拍摄,在当时达到了前所未有的质量水平. 今天,卢米埃尔兄弟的杰作看起来充满颗粒状,浑浊,破旧.但一个名叫 Den ...

  • 【从零学习OpenCV 4】图像修复

    重磅干货,第一时间送达 经过几个月的努力,小白终于完成了市面上第一本OpenCV 4入门书籍<OpenCV 4开发详解>.为了更让小伙伴更早的了解最新版的OpenCV 4,小白与出版社沟通 ...

  • 使用Python中的OpenCV降噪功能增强图像的3个步骤

    重磅干货,第一时间送达 在本文中,我们将展示如何通过三个简单的步骤来实现降噪.我们将使用机器学习训练的降噪模型.这是我们找到的最好的降噪模型之一. 程序可以判断图像是否有噪点吗?这对于另一个项目可能是 ...

  • 【从零学习OpenCV 4】Canny算法

    小白学视觉",选择"星标"公众号 重磅干货,第一时间送达 经过几个月的努力,小白终于完成了市面上第一本OpenCV 4入门书籍<OpenCV 4开发详解>.为 ...

  • 【从零学习OpenCV 4】分割图像——Grabcut图像分割

    重磅干货,第一时间送达 经过几个月的努力,小白终于完成了市面上第一本OpenCV 4入门书籍<OpenCV 4开发详解>.为了更让小伙伴更早的了解最新版的OpenCV 4,小白与出版社沟通 ...