图像处理——插值算法
Posted mini梁翊洲MAX
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了图像处理——插值算法相关的知识,希望对你有一定的参考价值。
这一篇文章主要是介绍常用的插值算法,理解为主。插值最广泛的应用是在我们放大或缩小图像的时候。不知道大家有没有想过放大图像时,多出来的像素是如何决定的;缩小图像时,少的像素是怎么舍弃的。除此之外,插值的思想在后期网络设计上也有可能发挥奇效。比如,何大佬的mask rcnn,就是基于插值设计了ROI align,替代了faster rcnn 的ROI pooling。
我们根据resize函数里的参数 interpolation里的备选项来进行介绍。后续如果有遇到其他有意义的插值算法,也会在文章中补充。
最近邻插值
首先,我们应该明白缩放图像后的新图像各像素点对应的位置并不一定与原图像的位置重叠。
假设源图像A大小为m * n,缩放后的目标图像B的大小为M * N。那么根据上边提到的方法我们可以得到B(X,Y)在A上的对应坐标为A(x,y)=A(X * (m/M),Y * (n/N))。
最近邻插值法指的就是将B(X,Y)这个像素点的值赋予源图像A上离它最近的像素点的值。如图,b点像素的值将被赋予这个新点上。
由于最近邻插值忽略了很多信息,导致其结果产生失真。我们如果可以利用附近更多的点经过权值计算共同决定新像素的话,结果会好很多。以下的几个方法其实就是通过不同的方法确定各自的权值计算标准,大家也可以自行根据不同的标准进行设计。
双线性插值
线性插值是以距离为权重的一种插值方式。双线性插值利用源图像临近的四个点的像素值经过权值计算共同决定。
假设我们已知 Q11 = (x1, y1)、Q12 = (x1, y2), Q21 = (x2, y1) 以及 Q22 = (x2, y2) 四个点的值。P = (x, y)。f就是一个像素点的像素值。
虽说权重是基于距离决定的,但并不是直接计算出距离,而是用另一种方法表示距离的远近。比如线性插值就是利用对角的点与目标点围成的长方形面积除以四个旧点围成的面积来表示权值。
像素区域关系重采样
对于这个插值方法,我主要参考这篇文章。
我根据自己的理解进行简单的描述,如果有不对的请帮忙指正。
我们之前描述的像素都是一个个点,现在我们将它转化为一个个块。我们可以看新的块包围多个旧的块,有的快被全部包围有的只包围了部分。而加权计算中,各个旧块对应的权重是“它们被新块包围的面积”除以“新块的面积”。
也有人指出,它和平均池化层很像。如果知道的话就可以很快理解,如果不知道的话也没关系以后会说,这里挖个坑。
双三次插值
由名字我们就很容易知道,它是通过临近的16(4 * 4)个点来进行加权计算。其权值是基于BiCubic函数:
可能大家看到这一大堆东西就放弃了,但我们是以理解为主,我们观察一下这个函数的形状。根据这个图我们可以推测出这个插值方法权值分配的思想:首先,在一定范围内距离目标越近的权值越大,并根据距离疏远以一定规律下降。对于距离超过一定范围的点,我们认为其对目标并没有积极的影响,所以权值设为微弱的负值以使目标和这些点之间的差距明显一点。我还看到有文章说这个方法也考虑了变化率的影响,有明白的大佬欢迎评论区指正。
Lanczos插值
我看了一些文章,权值分布形状和BiCubic有点相像,根据它的系数a的取值不同会有变化。它参考的临近点拓展到了64(8*8) 。
“本站所有文章均为原创,欢迎转载,请注明文章出处:https://blog.csdn.net/kasami_/article/details/123802432。百度和各类采集站皆不可信,搜索请谨慎鉴别。技术类文章一般都有时效性,本人习惯不定期对自己的博文进行修正和更新,因此请访问出处以查看本文的最新版本。”
以上是关于图像处理——插值算法的主要内容,如果未能解决你的问题,请参考以下文章