bilinear/bicubic 插值是否在每个颜色通道上独立运行?
Does bilinear/bicubic interpolation operate on each color channel independently?
我正在使用 scipy.ndimage.interpolation.zoom
双线性插值或双三次插值(如果我正确的话,阶数 = 1 或 3)。
https://docs.scipy.org/doc/scipy-0.15.1/reference/generated/scipy.ndimage.interpolation.zoom.html
处理 RGB 图像时,bilinear/bicubic 插值算法是在每个颜色通道上独立运行,还是在颜色通道之间存在某种依赖性?
ndimage.interpolation.zoom
没有RGB通道的概念;它缩放任意 n 维数组,对每个维度没有任何特殊意义。例如,如果您将图像存储为 (20, 20, 3)
形状的数组,那么在 zoom(image, 2)
之后它将变成 (40, 40, 6)
形状的数组,这当然是不可取的。
大概您将使用 zoom(image, (2, 2, 1))
在两个维度上进行 2 倍缩放,而在通道维度上没有 "zoom"。如果是这样,那么通道之间就没有溢出。阅读执行 一维 样条插值(不是双线性或双三次)的 NI_ZoomShift
I see that zoom is achieved using get_spline_interpolation_weights
的 C 代码。这意味着缩放将包括:
- 遍历每个一维切片
image[:, c, ch]
并通过一维插值对其进行缩放(切片之间无交互)。
- 遍历每个一维切片
image[r, :, ch]
并通过一维插值对其进行缩放。
- 遍历每个 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 左右,即输出是相同的,直到出现浮点错误。
我正在使用 scipy.ndimage.interpolation.zoom
双线性插值或双三次插值(如果我正确的话,阶数 = 1 或 3)。
https://docs.scipy.org/doc/scipy-0.15.1/reference/generated/scipy.ndimage.interpolation.zoom.html
处理 RGB 图像时,bilinear/bicubic 插值算法是在每个颜色通道上独立运行,还是在颜色通道之间存在某种依赖性?
ndimage.interpolation.zoom
没有RGB通道的概念;它缩放任意 n 维数组,对每个维度没有任何特殊意义。例如,如果您将图像存储为 (20, 20, 3)
形状的数组,那么在 zoom(image, 2)
之后它将变成 (40, 40, 6)
形状的数组,这当然是不可取的。
大概您将使用 zoom(image, (2, 2, 1))
在两个维度上进行 2 倍缩放,而在通道维度上没有 "zoom"。如果是这样,那么通道之间就没有溢出。阅读执行 一维 样条插值(不是双线性或双三次)的 NI_ZoomShift
I see that zoom is achieved using get_spline_interpolation_weights
的 C 代码。这意味着缩放将包括:
- 遍历每个一维切片
image[:, c, ch]
并通过一维插值对其进行缩放(切片之间无交互)。 - 遍历每个一维切片
image[r, :, ch]
并通过一维插值对其进行缩放。 - 遍历每个 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 左右,即输出是相同的,直到出现浮点错误。