图像插值-双线性插值与双三次插值
在现实生活中,我们经常会遇到把图像进行放大、几何空间变换的情况等等,这些操作都需要在源图像和目标图像之间建立一个映射规则
文章图片
,使得两图像像素坐标之间建立起一种对应关系,从而为目标图像的每一个像素赋值。
从源图像到目标图像的映射叫前向映射,但是这种映射方法可能会出现这样的两个问题:源图像的好几个像素点映射到目标图像中的位置是相同的;目标图像某些位置没有要赋值的像素。这样就要考虑如何把多个输出值转换成一个输出值和对目标图像中没有映射到的像素该如何赋值的问题。而我们经常采用的是后向映射,这种方法比前向映射更加有效,它是从目标图像到源图像的映射,即
文章图片
,这样就避免了前向映射中存在的问题,但也不可避免地存在着部分像素映射回源图像时坐标为浮点数的问题,而图像的像素值仅在整数坐标处有定义,这时候就要利用图像插值方法来给这个待求像素点赋值。
常用的插值算法有:最近邻插值,双线性插值,双三次插值方法等等。其中最近邻插值方法(零阶插值)最简单,运算量最小,但是效果很差,块效应非常明显。本书主要介绍双线性插值方法和双三次插值方法。
双线性插值与双三次插值
1、双线性插值:
双线性插值算法也叫一阶插值,它是利用了待求像素点在源图像中4个最近邻像素之间的相关性,通过两次线性插值得到待求像素点的值,假设映射回源图像中的待求像素坐标点为
文章图片
,其中
文章图片
,双线性插值方法利用该点周围四个相邻像素点
文章图片
计算得到,其中
文章图片
为图像在
文章图片
处的像素值,如下图所示。
文章图片
插值过程:先在水平方向上进行线性内插,由
文章图片
和
文章图片
内插得到
文章图片
点的值,即
文章图片
,由
文章图片
和
文章图片
内插得到
文章图片
点的值,即
文章图片
,再由
文章图片
和
文章图片
点在竖直方向上线性内插得到
文章图片
,即
文章图片
当然结果与插值顺序无关,即先在竖直方向插值,再在水平方向插值得到的结果是一样的。双线性插值得到的结果相对最近邻插值法的效果要好很多,因为最近邻插值法只利用了周围一个像素的相关性,而双线性插值法利用了周围四个像素的相关性,但随之而来的是计算量的增加。
2、双三次插值
双三次插值又叫立方卷积插值,它是利用了待求像素点在源图像中相邻的16个像素点的值,即这16个像素点的加权平均。
文章图片
每个像素值的权重由该点到待求像素点的距离确定,这个距离包括水平和竖直两个方向上的距离。以像素点为例,该点在竖直和水平方向上与待求像素点的距离分别是
文章图片
和
文章图片
,则该像素点的权重为
文章图片
。则待求点像素值
文章图片
的计算方法如下式所示。
文章图片
其中
文章图片
文章图片
文章图片
插值核
文章图片
为:
文章图片
其函数图像如下图所示
文章图片
我们来看一看三种方法的插值效果
下面展示了三种插值方法的效果
图(a)是原图,图(b)是经过下采样的图,图(c)是利用的是最近邻插值法,图(c)利用的是双线性插值法,图(e)利用的是双三次插值法
文章图片
文章图片
(a)原始图像(b)降采样后的图像
文章图片
文章图片
文章图片
(C)最近邻插值(d)双线性插值(e)双三次插值
在以上所介绍的插值方法当中,可以发现利用双三次插值法得到图像效果是最好的,但相对于原图来说,差距仍然很大。双三次插值法在保留细节方面比双线性插值法更好,它在源图像中利用的已知信息比最近邻插值法和双线性插值法多,所以比其他方法好也在意料之中,但同时它的算计成本是最高的。
【图像插值-双线性插值与双三次插值】其实双线性插值和双三次插值方法都是利用邻域像素的加权平均来求得待求像素点的值,这就使得它们具有低通滤波器的性质,所以可以看出这些方法其实都是基于图像在所有区域都具有区域平滑性的这一假设,但是这一假设对于图像当中的边缘和纹理这些地方来说是不成立的,所以插值方法会使得图像高频分量受损,引起图像模糊和边缘失真。
推荐阅读
- Java|Java OpenCV图像处理之SIFT角点检测详解
- ImageLoaders 加载图像
- JAVA图像处理系列(四)——噪声
- 使用交叉点观察器延迟加载图像以提高性能
- Figure|Figure 图像
- 【数组题】给定一个二进制矩阵|【数组题】给定一个二进制矩阵 A,我们想先水平翻转图像,然后反转图像并返回结果。
- opencv|图像处理之椒盐噪声的添加与去除
- ACDSee|ACDSee Photo Studio 5——数字图像处理软件
- 详解如何使用Python隐藏图像中的数据
- Pytorch图像分割实践|Pytorch自定义层或者模型类