opencv中插值算法详解 |
您所在的位置:网站首页 › matlab中的插值函数有哪些 › opencv中插值算法详解 |
导读
做图像处理的同学应该经常都会用到图像的缩放,我们都知道图片存储的时候其实就是一个矩阵,所以在对图像进行缩放操作的时候,也就是在对矩阵进行操作,如果想要将图片放大,这里我们就需要用到过采样算法来扩大矩阵,利用欠采样来缩小图像。 在opencv中提供了一个resize函数用来调整图像的大小,里面提供了好几种不同的插值算法,如下图所示
如果大家觉得灰度图不方便观察,我们可以通过设置plt.imshow的cmap参数来控制颜色,matplotlib提供了几种不同的类别的色彩映射方式 cmap的类别 Sequential 通常使用单一的色调,逐渐增加亮度和颜色,可以用来表示有序的信息![]() ![]() ![]() ![]() ![]() ![]() 最近邻插值也称近端插值,是一种在一维或多维空间上进行多变元插值的简单方法。插值是一种通过已知的、离散的数据点,在范围内推求新数据点的过程或方法。最近邻插值算法选择距离所求数据点最近点的值,并且根本不考虑其他相邻点的值,从而产生一个分段常数的内插值来作为所求数据点的值。 这里的线性插值其实是指双线性插值,这种插值算法也是resize函数中默认使用的插值算法。 双线性插值,也被称为双线性内插。双线插值是对线性插值在二维坐标系上的扩展,用于对双变量函数进行插值,其核心思想是在两个方向上分别进行一次线性插值。 为了帮助大家更好的理解双线性插值算法,我们先来看线性插值 假设我们已知坐标
(
x
0
,
y
0
)
(x_0,y_0)
(x0,y0)与
(
x
1
,
y
1
)
(x_1,y_1)
(x1,y1),我们想要得到在区间
[
x
0
,
x
1
]
[x_0,x_1]
[x0,x1]上任意位置
x
x
x所对应
y
y
y的值,如下图所示 双三次插值是一种更加复杂的插值算法,是二维空间中最常用的插值算法,相对双线性插值的图像边缘更加平滑,函数
f
f
f在点
(
x
,
y
)
(x,y)
(x,y)的值可以通过矩形网格中最近的十六个采样点的加权平均得到,这里需要使用两个多项式插值三次函数,每个方向使用一个。 双三次插值通过以下公式进行计算:
∑
i
=
0
3
∑
j
=
0
3
a
i
j
x
i
y
j
\sum_{i=0}^{3}\sum_{j=0}^{3}a_{ij}x^{i}y^{j}
i=0∑3j=0∑3aijxiyj 计算系数
a
i
j
a_{ij}
aij的过程依赖于插值数据的特性。如果已知插值函数的导数,常用的方法就是使用四个顶点的高度以及每个顶点的三个导数。一阶导数
h
′
x
h'x
h′x与
h
′
y
h'y
h′y表示
x
x
x与
y
y
y方向的表面斜率,二阶相互导数
h
′
′
x
y
h''xy
h′′xy表示同时在
x
x
x与
y
y
y方向的斜率。这些值可以通过分别对
x
x
x与
y
y
y向量取微分得到。对于网格单元的每个顶点,将局部坐标
(
0
,
0
)
、
(
1
,
0
)
、
(
0
,
1
)
、
(
1
,
1
)
(0,0)、(1,0)、(0,1)、(1,1)
(0,0)、(1,0)、(0,1)、(1,1)代入这些方程,再解这16个方程。 看了上面这段话之后,貌似还是不太好理解,接下来我们看一个例子,双三次插值常用的BiCubic函数如下图 区域插值算法主要分两种情况,缩小图像和放大图像的工作原理并不相同。 缩小图像 如果图像缩小的比例是整数倍,在调用INTER_LINEAR_EXACT插值算法时,如果图像的宽和高的缩小比例都是2,而且图像的通道数不是2,实际上会调用INTER_AREA。在调用INTER_LINEAR时,如果图像的宽和高的缩小比例都是2,实际上是会调用INTER_AREA。 INTER_AREA实际上是个box filter,类似于均值滤波器。放大图像 如果放大图像的比例是整数倍,与最近邻插值相似。如果放大的比例不是整数倍,则会采用线性插值。 Lanczos插值Lanczos插值属于一种模板算法,需要通过计算模板中的权重信息来计算
x
x
x对应的值。 对于一维信息,假如我们输入的点集为
X
X
X,那么,Lanczos对应有个窗口模板Window,窗口中每个位置的权重计算如下: 对于不同的插值算法,在缩放因子不同的时候,耗时会有所区别,具体对照如下表所示 如果要缩小图像,推荐使用INTER_AREA插值效果最好,如果要放大图像,INTER_CUBIC效果最好,但是速度较慢,可以考虑使用INTER_LINEAR速度较快,效果也还不错。 参考: 1.http://www.1zlab.com/wiki/python-opencv-tutorial/opencv-interpolation-algrithm/ 2.维基百科线性插值 3.维基百科双三次插值 4.https://blog.csdn.net/nandina179/article/details/85330552 5.https://blog.csdn.net/qq_29058565/article/details/52769497 6.https://blog.csdn.net/u010555688/article/details/24352343 7.https://zhuanlan.zhihu.com/p/38493205 |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |