图像升采样方法

双线性插值(Bilinear-interpolate)

参考链接:https://www.cnblogs.com/wxl845235800/p/9608736.html
尤其当显示分辨率过低时,在表现非水平或竖直的直线以及明显边缘时,离散的像素点间灰度值缺少过渡,会有很明显的锯齿。对于这种情况,我们需要对图像边缘进行柔化处理,使图像边缘看起来更平滑,更接近现实。同样的,依空间坐标变换方法,计算得到的对应点坐标通常不是整数,如果简单地使用取整或者最邻近插值的方法得到目标图像,目标图像会有比较明显的锯齿效应。对于这个问题,在处理过程中通常是采用双线性插值双三次插值

最近邻插值

最近邻插值算法又称零阶插值,它是一种比较容易实现且算法复杂度较低的插值算法,其原理是取待插值点周围4个相邻像素点中欧式距离最短的一个邻点的灰度值作为该点的灰度值。由于仅用对该插值点影响最大的(即最近的)像素的灰度值作为该点的值,没有考虑其他相邻像素的影响,因此插值后得到的图像容易产生块效应,造成图像模糊,放大效果一般不够理想。

双线性插值

双线性插值是有两个变量的插值函数的线性插值扩展,其核心思想是在两个方向分别进行一次线性插值。其原理是待插点像素值取原图像中与其相邻的4个点像素值的水平、垂直两个方向上的线性内插,即根据待采样点与周围4个邻点的距离确定相应的权重,从而计算出待采样点的像素值。
在这里插入图片描述
距离越大,权重越小,所以对于(0,0)和(1,0)这两点,要插值的点距离前者是dx,距离后者是1-dx,由于距离和权重成反比,所以交换距离值作为权重。
f ( d x , 0 ) = ( 1 − d x ) ∗ f ( 0 , 0 ) + d x ∗ f ( 1 , 0 ) f ( d x , 1 ) = ( 1 − d x ) ∗ f ( 0 , 1 ) + d x ∗ f ( 1 , 1 ) f(dx,0)=(1-dx)*f(0,0)+dx*f(1,0)\\ f(dx,1)=(1-dx)*f(0,1)+dx*f(1,1) f(dx,0)=(1dx)f(0,0)+dxf(1,0)f(dx,1)=(1dx)f(0,1)+dxf(1,1)
f ( d x , d y ) = ( 1 − d y ) ∗ f ( d x , 0 ) + d y ∗ f ( d x , 1 ) = ( 1 − d x ) ( 1 − d y ) f ( 0 , 0 ) + ( 1 − d y ) d x ∗ f ( 1 , 0 ) = d y ∗ ( 1 − d x ) f ( 0 , 1 ) + d y ∗ d x ∗ f ( 1 , 1 ) f(dx,dy)=(1-dy)*f(dx,0)+dy*f(dx,1)\\ =(1-dx)(1-dy)f(0,0)+(1-dy)dx*f(1,0)\\ =dy*(1-dx)f(0,1)+dy*dx*f(1,1) f(dx,dy)=(1dy)f(dx,0)+dyf(dx,1)=(1dx)(1dy)f(0,0)+(1dy)dxf(1,0)=dy(1dx)f(0,1)+dydxf(1,1)

尺度缩放

参考链接:https://blog.csdn.net/ggqhit/article/details/84302382
假设有原始3×3图像:
[ 1 2 3 4 5 6 7 8 9 ] \begin{bmatrix} 1 & 2 &3 \\ 4 & 5 &6 \\ 7 & 8 &9 \end{bmatrix} 147258369
进行插值为4×4图像,设源图像坐标 s s s,目标图像坐标为 t t t
s x = t x ∗ 3 4 s y = t y ∗ 3 4 s_x=t_x*\frac{3}{4}\\ s_y=t_y*\frac{3}{4} sx=tx43sy=ty43

最近邻插值

( t x , t y ) (t_x,t_{y}) (tx,ty)依次带入公式,然后四舍五入映射到源坐标 ( s x , s y ) (s_x,s_{y}) (sx,sy),得到最终结果:
[ 1 2 3 3 4 5 6 6 7 8 9 9 7 8 9 9 ] \begin{bmatrix} 1 & 2 &3&3 \\ 4 & 5 &6 &6\\ 7 & 8 &9 &9\\ 7 & 8 &9 &9 \end{bmatrix} 1477258836993699

双线性插值

( t x , t y ) (t_x,t_{y}) (tx,ty)依次带入公式,得到源浮点坐标表示为 ( i + u , j + v ) (i+u,j+v) (i+u,j+v),其中 i , j i,j i,j为整数部分, u , v u,v u,v为浮点数部分。那么像素值可以由源图像的的 ( i , j ) 、 ( i + 1 , j ) 、 ( i , j + 1 ) 、 ( i + 1 , j + 1 ) (i,j)、(i+1,j)、(i,j+1)、(i+1,j+1) (i,j)(i+1,j)(i,j+1)(i+1,j+1)进行双线性插值。

©️2020 CSDN 皮肤主题: 编程工作室 设计师:CSDN官方博客 返回首页