双线性插值是啥?
前言
今天看FASTER RCNN的pytorch实现源码,进行图像缩放时用到了双线性插值算法,记录一下自己的理解。
目的
当将一幅图像从100x100的尺寸放大到200x200时,势必要新增30000个像素点。那么这些新增的像素点的灰度值如何得到呢?
原理
双线性插值的做法是这样:
1. 建立坐标的对应关系
将放大前的图像A和放大后的图形B的几何中心对齐,然后有
如果按照上面公式计算出来是整数,就直接将原图中的对应位置的灰度值复制过来。如果是小数,说明原图像中没有对应点,就将x/y分别向上/下取整得到4个坐标。
其实也无所谓,一律按照下面方法计算即可,只不过是整数的时候取得是两个相同灰度值的均值,也就是还是他自己罢了。省的在这讨论,x整数y小数,x小数y整数这些问题了。
2. 用A上4个对应像素点的灰度值计算B上1个像素点的灰度值
双线性插值说白了就是先将这4个点分成两组在一个方向上进行线性插值,得到两个中间值,然后用这两个中间值再进行一次线性插值,得到最终结果。
即,先有
然后,有
其中,P为所求的B上$(x_B, y_B)$处的灰度值,$(x,y)$就是上面的$(x_A, y_A)$,四个Q就是A上四个对应像素点的灰度值,R为中间值。
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!