【问题标题】:Linear Interpolation - shrinking a line线性插值 - 缩小一条线
【发布时间】:2018-01-21 22:18:20
【问题描述】:

假设我们有一个名为的一维数组,它由 9 个元素组成: 来源[0 到 8]

使用“线性插值”,我们希望将其缩小为更小的 4 点数组:Destination [0 到 3]

这是我对算法的理解:

  1. 计算两个数组长度之间的比率:9/4 = 2.5
  2. 遍历目标坐标并找到合适的源坐标:

目标 [0] = 0 * 2.5 = 源 [0] -> 成功!使用这个确切的值。

目标 [1] = 1 * 2.5 = 源 [2.5] -> 没有这样的元素!计算 Source[2] 和 Source[3] 的平均值。

目标 [2] = 2 * 2.5 = 源 [5] -> 成功!使用这个确切的值。

目标 [2] = 3 * 2.5 = 源 [7.5] -> 没有这样的元素!计算 Source[7] 和 Source[8] 的平均值。

这样对吗?

【问题讨论】:

    标签: image-processing signal-processing linear-interpolation


    【解决方案1】:

    几乎正确。 9/4 = 2.25。 ;-)

    无论如何,如果要保留端点值,则应将比率计算为 (9-1)/(4-1) = 2.666...(在点 0、1、2、3 之间只有三个段,因此长度等于 3。同样指的是 0...8)。

    如果您没有达到确切的值,请记住计算加权平均值,例如

    Destination[1] = 1 * 2.667 -> (3-2.667)*Source[2] + (2.667-2)*Source[3]
    

    这是来自等式,

    y = y0(x1-x) + y1(x-x0)
    

    在这种情况下,

    x=2.66
    x0=2
    x1=3
    y0=Source[2]
    y1=Source[3]
    

    【讨论】:

    • 感谢您的指正!关于你所说的:“无论如何,如果你想保留端点值,你应该计算比率为(9-1)/(4-1)”所以如果源头有 1024 个点,目的地有 512 个点- 实际比例应该是:(1024-1) / (512-1) ~ 2.002 ?
    • 是的,这是真的。但在这种情况下,您可能应该考虑最近邻插值?如果i<255,那么Dest[i]=Source[2*i],如果i>=255,那么Dest[i]=Source[2*i+1] 优点:没有新值,几乎没有计算。缺点:两者之间有差距。另一种选择:总是Dest[i]=Source[2*i]。然后最后一个元素不适合 (Dest[511]==Source[1022])。您必须选择最好的插值。
    • 我正在设计一个可以进行任何 m/n 缩放的 FPGA 块......因此我正在寻找通用的东西,而不是针对特定问题条件量身定制的东西。
    猜你喜欢
    • 1970-01-01
    • 2015-04-03
    • 1970-01-01
    • 2017-02-22
    • 1970-01-01
    • 2013-07-27
    • 2020-04-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多