OpenCV框架图像插值算法

  • 1.1 简介
  • 1.2 学习目标
  • 1.3 内容介绍
  • 1.4 算法理论介绍与推荐
  • 1.4.1 最近邻插值算法原理
  • 1.4.2 双线性插值


1.1 简介

在图像处理中,平移变换、旋转变换以及放缩变换是一些基础且常用的操作。这些几何变换并不改变图象的象素值,只是在图象平面上进行象素的重新排列。在一幅输入图象opencv一维插值算法 opencv图像插值_opencv一维插值算法中,灰度值仅在整数位置上有定义。然而,输出图象[x,y]的灰度值一般由处在非整数坐标上的opencv一维插值算法 opencv图像插值_算法原理_02值来决定。这就需要插值算法来进行处理,常见的插值算法有最近邻插值、双线性插值和三次样条插值。

1.2 学习目标

  • 了解插值算法与常见几何变换之间的关系
  • 理解插值算法的原理
  • 掌握OpenCV框架下插值算法API的使用

1.3 内容介绍

  • 插值算法原理介绍
  • 最近邻插值算法
  • 双线性插值算法
  • OpenCV代码实践
  • cv.resize()各项参数及含义
  • 动手实现(由读者自己完成)

1.4 算法理论介绍与推荐

1.4.1 最近邻插值算法原理

最近邻插值,是指将目标图像中的点,对应到源图像中后,找到最相邻的整数点,作为插值后的输出。

如上图所示,目标图像中的某点投影到原图像中的位置为点P,此时易知,opencv一维插值算法 opencv图像插值_插值_03.

一个例子:

如下图所示,将一幅3X3的图像放大到4X4,用opencv一维插值算法 opencv图像插值_opencv一维插值算法_04表示目标图像,opencv一维插值算法 opencv图像插值_插值_05表示原图像,我们有如下公式:

opencv一维插值算法 opencv图像插值_opencv一维插值算法_06

opencv一维插值算法 opencv图像插值_双线性插值_07

缺点: 用该方法作放大处理时,在图象中可能出现明显的块状效应

1.4.2 双线性插值

在讲双线性插值之前先看以一下线性插值,线性插值多项式为:

opencv一维插值算法 opencv图像插值_算法原理_08

opencv一维插值算法 opencv图像插值_算法原理_09

双线性插值就是线性插值在二维时的推广,在两个方向上做三次线性插值,具体操作如下图所示:

opencv一维插值算法 opencv图像插值_opencv一维插值算法_10为两个变量的函数,其在单位正方形顶点的值已知。假设我们希望通过插值得到正方形内任意点的函数值。则可由双线性方程: opencv一维插值算法 opencv图像插值_opencv一维插值算法_11

来定义的一个双曲抛物面与四个已知点拟合。

首先对上端的两个顶点进行线性插值得:

opencv一维插值算法 opencv图像插值_双线性插值_12

类似地,再对底端的两个顶点进行线性插值有: opencv一维插值算法 opencv图像插值_插值_13

最后,做垂直方向的线性插值,以确定:

opencv一维插值算法 opencv图像插值_插值_14

整理得:

opencv一维插值算法 opencv图像插值_双线性插值_15