图像插值(双三次或双线性)。如果没有邻居像素怎么办?

时间:2012-08-16 16:33:59

标签: algorithm interpolation

由于JavaScript中没有本地实现插值(旁边是最近邻居),我正在尝试创建自己的方法。但考虑到双三次(或双线性)插值需要相邻像素(16或4),我应该怎样处理没有所需邻居数量的边缘像素?我应该忽略它们吗?但插值公式需要所有像素。

5 个答案:

答案 0 :(得分:5)

重复最近的像素。

不要使用白色或黑色,因为它会在边缘分别引入更浅或更暗的色调。

答案 1 :(得分:3)

如果一方没有邻居,那就是推断。如果你想要推断: http://en.wikipedia.org/wiki/Extrapolation

这是由拉格朗日的插值完成的: http://en.wikipedia.org/wiki/Lagrange_interpolation

答案 2 :(得分:2)

通常,您为虚边缘像素组成一个值。

最简单的方法是将所有边缘像素设置为白色或黑色,但将它们设置为最接近的真实像素的颜色非常容易。

答案 3 :(得分:1)

根据Don Lancaster的文章“一些图像像素插值算法的回顾”(link),用最接近的已知值代替是解决问题的可接受方式。文章提出(ab)使用线性插值来推断这些值作为替代 - 我个人发现应用最近邻完成后的结果更符合我的喜好。

答案 4 :(得分:1)

想要提供我的贡献,即使很久以前就提出了这个问题。

就像肯德尔所说,你通常会根据附近的值来计算点/像素的值。你应该如何做到这一点取决于你选择的插值。更具体地说,它由您的方法的插值多项​​式的顺序确定。 OP提到的方法如下:

  • 最近邻插值是0阶的多项式。函数本身是不连续的(包含跳跃),即:smoothness是C ^ 0;
  • 线性插值是一阶多项式。该函数是连续的(无跳转),但其衍生物不是。
  • 对于(bi)三次插值,使用的多项式为2阶;函数及其一阶导数是连续的(这确实是该方法所依据的标准)。这是' true'的三阶近似。功能; O(H ^ 3)。

遇到边缘问题时,您需要使用与所选算法相同的近似值来推断鬼点的值。对于OP询问的(bi)立方体情况,这如下。假设[x1 x2 x3 x4 x5]是您的输入值;您需要将x0计算为:

x0 = 3*x1 - 3*x2 + x3,同样地:x6 = 3*x5 - 3*x4 + x3