【问题标题】:Digital image processing bilinear interpolation数字图像处理双线性插值
【发布时间】:2018-02-08 20:27:18
【问题描述】:

如果在数字图像处理中,我使用双线性插值进行图像缩放,如果缩放因子是 1.5x,那么我如何在物理矩阵结构中表示第 1.5 列?

【问题讨论】:

  • 如果您询问使用什么矩阵来计算插值,那么这取决于您生成的输出的哪个像素。 1.5x 比例将每 3 个像素重复一次,但如果缩放比例不容易整除,则每个矩阵在整个图像中可能是唯一的。
  • 您能澄清一下您的问题吗?我不明白你有什么问题(其他人也没有,这就是为什么还没有答案)。也许添加一些关于您认为是双线性插值的解释,或者包含一些您认为如何计算的代码。
  • 对不起先生。根据这本书的定义,我尝试将 500*500 成像到 750*750 网格中。但问题是我不明白为了生成新的像素列/行,在多少旧列/行之后我应该生成一个新列还是行?

标签: image image-processing interpolation linear-interpolation


【解决方案1】:

这是插值工作原理的简图:

假设您要从大小为 NxN 的图像转换为大小为 MxM 的图像。

第 1 步:创建大小为 MxN 的中间图像。二维现在保持不变。我们只沿第一个维度进行插值。

所以对于每一行图像,输入是N个值,我们生成M个值。假设输入值的坐标是 0, 1, 2, 3, ... N-1。输出值的坐标将为 0、N/M、2*N/M、... N-1。这会为您提供分数坐标。

对于每个输出值,插入输入值。例如,第 4 个输出值为 3*N/M。在floor(3*N/M)ceil(3*N/M) 位置挑选输入值,并计算线性插值。

步骤 2:创建大小为 M*M 的输出图像,并沿第二维对每一行重复上述过程,再次从 N 个样本增长到 M 个样本。

如果一维插值是一个单独的函数,这个过程真的很容易实现。许多人会将双线性插值直接实现为 2D 操作,计算每个输出值的 2D 坐标。但是将其作为可分离的转换来实现有很多好处。例如,它可以很容易地将插值方法更改为三次、Lanczos 甚至 b 样条,因为它都是一维的。将过程从 2D 图像扩展到 3D 图像也很容易。

【讨论】:

  • 但是对于输入图像 NN 和中间图像 MN 我们将如何为输出图像生成 M 列
  • 那里已经解释过了。您可以通过从相应的输入图像行进行插值来找到每个图像行中的每个 M 值。
  • @SatyakiChatterjee :请编辑您的问题并发布一些代码,说明您认为如何实现此功能。这样我就可以看到你的心理障碍在哪里。知道的部分填写,不知道的部分添加cmets。
  • 先生,我几乎解决了我的困惑。只有我不明白的一件事我应该在 RGB 或 ARGB 或 R、G、B 上单独应用插值?
  • @SatyakiChatterjee 将其单独应用于每个频道。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-05-23
  • 1970-01-01
  • 2019-07-20
  • 1970-01-01
  • 2015-11-14
  • 2016-06-01
  • 1970-01-01
相关资源
最近更新 更多