双线性/双三次插值是否在每个颜色通道上独立运行?



我正在使用双线性插值或双三次插值的scipy.ndimage.interpolation.zoom(如果我是对的,顺序= 1或3(。

https://docs.scipy.org/doc/scipy-0.15.1/reference/generated/scipy.ndimage.interpolation.zoom.html

处理 RGB 图像时,双线性/双三次插值算法是否在每个颜色通道上独立运行,或者颜色通道之间是否存在某种依赖关系?

ndimage.interpolation.zoom

没有RGB通道的概念;它缩放任意的n维数组,对每个维度没有任何特定的含义。例如,如果您将图像存储为形状数组(20, 20, 3)那么zoom(image, 2)之后它将变成形状(40, 40, 6)数组,这当然是不可取的。

据推测,您将使用zoom(image, (2, 2, 1))在两个维度上都有 2 倍的缩放,而在通道维度上没有"缩放"。如果是这样,那么渠道之间就没有溢出效应。阅读NI_ZoomShift的 C 代码,我看到缩放是使用执行一维样条插值(不是双线性或双立方(的get_spline_interpolation_weights实现的。这意味着缩放将包括:

  1. 遍历每个 1D 切片image[:, c, ch]并通过 1D 插值(切片之间无交互(对其进行缩放。
  2. 遍历每个 1D 切片image[r, :, ch]并通过 1D 插值对其进行缩放。
  3. 遍历每个 1D 切片image[r, c, :]并通过 1D 插值对其进行缩放 - 缩放因子为 1 时,这些值将保持不变,直至机器精度。

上述测试:缩放整个图像与单独缩放每个通道。

import numpy as np
from scipy.ndimage.interpolation import zoom
image = np.random.uniform(size=(20, 20, 3))
output = zoom(image, (2, 2, 1))
for k in range(3):
output_channel = zoom(image[:, :, k], 2)
print(np.max(np.abs(output_channel - output[:, :, k])))

打印值约为 1e-15,即输出在浮点误差之前相同。

最新更新