zoukankan      html  css  js  c++  java
  • 双线性插值

    假设有一张4*4的图像.如下图:

    我们想缩放成3*3的图像,计算如下(以缩放后的像素点B为例):

     

    根据如下计算公式:

    srcX=dstX* (srcWidth/dstWidth)

    srcY = dstY * (srcHeight/dstHeight)

    以E点坐标为例计算坐标点在原图对坐标位置如下:

    取原图像的X坐标 = 1* (4/3)[公式]1.3

    取原图像的Y坐标 = 1* (4/3)[公式]1.3

     

    使用双线性插值法:

    对(1.3,1.3)坐标在原图像上进行投影,如下图:

    对于一个目的像素,设置坐标通过反向变换得到的浮点坐标为(i + u , j + v) (其中i、j均为浮点坐标的整数部分,u、v为浮点坐标的小数部分,是取值[0,1)区间的浮点数)。

    则这个像素得值 f(i + u , j + v) 可由原图像中坐标为 (i , j)、(i + 1 , j)、(i , j + 1)、(i + 1 , j + 1)所对应的周围四个像素的值决定。即:

    f(i + u , j + v) = (1 - u) ( 1 - v) f(i , j) + (1 - u) v f(i , j + 1) + u (1 - v) f(i + 1 , j) + u v f(i + 1 , j + 1)

    其中f(i , j)表示源图像(i , j)处的的像素值,以此类推。

    本例分析:

    i = 1 , j = 1 , u = 0.3 , v = 0.3

    f(1.3 , 1.3) 由(1 , 1) 、(2 , 1)、(1 , 2)、(2 , 2) 这四个像素的值决定,如下图红色框选的点:

     

    f(1.3 , 1.3) = 0.7 * 0.7 * f(1 , 1) + 0.7 * 0.3 * f(1 , 2) + 0.3 * 0.7 * f(2 , 1) + 0.3 * 0.3 * f(2 , 2)

    = 0.7 * 0.7 * 2 + 0.7 * 0.3 * 6 + 0.3 * 0.7 * 4 + 0.3 * 0.3 * 8

     

    从上图也可以看出,点2离目标点最近,其次4和6,最后是8,权重也是越近权重越大。

     

    计算原理:

    p点像素值决定于Q12、Q22、Q11、Q21这4个点点像素值。

    我们先在X轴方向做2次插值操作(分别为R1和R2),然后在Y轴方向做一次插值操作(P),当然我认为也可以先在Y轴做2次插值操作,然后在X轴做一次插值操作。

    [公式]

    [公式]

    [公式]

    其中 [公式] 、 [公式] 、 [公式] 、 [公式] 都是权重值。

    [公式] 点计算举例,假设 [公式] , [公式] , [公式] :

    [公式] 为总距离, [公式] 为 [公式] 与 [公式] 的距离, [公式] 为 [公式] 与 [公式] 的距离,[公式] 离 [公式]更近,对 [公式] 的影响应该更大,所以权重应该更大,应为 [公式] ,即为 [公式] 。

     

    这2次X轴插值操作和1次Y轴插值操作,合并成一个公式即为计算原理上面的步骤。

    来源:https://zhuanlan.zhihu.com/p/58991226

  • 相关阅读:
    (转载)什么时候需要用到try-catch
    直接打印Java的对象时输出的到底是什么
    关于图像语义分割的总结和感悟(转载)
    面经
    石家庄停车位在线预约平台16
    石家庄停车位在线预约平台15
    石家庄停车位在线预约平台14
    石家庄停车位在线预约平台13
    石家庄停车位在线预约平台12
    石家庄停车位在线预约平台11
  • 原文地址:https://www.cnblogs.com/yibeimingyue/p/11485732.html
Copyright © 2011-2022 走看看