OpenCV框架图像插值算法
- 1.1 简介
- 1.2 学习目标
- 1.3 内容介绍
- 1.4 算法理论介绍与推荐
- 1.4.1 最近邻插值算法原理
- 1.4.2 双线性插值
1.1 简介
在图像处理中,平移变换、旋转变换以及放缩变换是一些基础且常用的操作。这些几何变换并不改变图象的象素值,只是在图象平面上进行象素的重新排列。在一幅输入图象中,灰度值仅在整数位置上有定义。然而,输出图象[x,y]的灰度值一般由处在非整数坐标上的值来决定。这就需要插值算法来进行处理,常见的插值算法有最近邻插值、双线性插值和三次样条插值。
1.2 学习目标
- 了解插值算法与常见几何变换之间的关系
- 理解插值算法的原理
- 掌握OpenCV框架下插值算法API的使用
1.3 内容介绍
- 插值算法原理介绍
- 最近邻插值算法
- 双线性插值算法
- OpenCV代码实践
- cv.resize()各项参数及含义
- 动手实现(由读者自己完成)
1.4 算法理论介绍与推荐
1.4.1 最近邻插值算法原理
最近邻插值,是指将目标图像中的点,对应到源图像中后,找到最相邻的整数点,作为插值后的输出。
如上图所示,目标图像中的某点投影到原图像中的位置为点P,此时易知,.
一个例子:
如下图所示,将一幅3X3的图像放大到4X4,用表示目标图像,表示原图像,我们有如下公式:
缺点: 用该方法作放大处理时,在图象中可能出现明显的块状效应
1.4.2 双线性插值
在讲双线性插值之前先看以一下线性插值,线性插值多项式为:
双线性插值就是线性插值在二维时的推广,在两个方向上做三次线性插值,具体操作如下图所示:
令为两个变量的函数,其在单位正方形顶点的值已知。假设我们希望通过插值得到正方形内任意点的函数值。则可由双线性方程:
来定义的一个双曲抛物面与四个已知点拟合。
首先对上端的两个顶点进行线性插值得:
类似地,再对底端的两个顶点进行线性插值有:
最后,做垂直方向的线性插值,以确定:
整理得: