Работает ли билинейная / бикубическая интерполяция на каждом цветовом канале независимо?
Я использую scipy.ndimage.interpolation.zoom
с билинейной или бикубической интерполяцией (порядок =1 или 3, если я прав).
https://docs.scipy.org/doc/scipy-0.15.1/reference/generated/scipy.ndimage.interpolation.zoom.html
При работе с RGB-изображением работают ли алгоритмы билинейной / бикубической интерполяции независимо для каждого цветового канала или есть какая-то зависимость между цветовыми каналами?
1 ответ
ndimage.interpolation.zoom
не имеет понятия каналов RGB; он увеличивает произвольный n-мерный массив без какого-либо особого значения для каждого измерения. Например, если у вас есть изображение, сохраненное в виде массива формы (20, 20, 3)
затем после zoom(image, 2)
это станет массивом формы (40, 40, 6)
что, конечно, нежелательно.
Предположительно вы будете использовать zoom(image, (2, 2, 1))
иметь 2-кратное увеличение в обоих измерениях и отсутствие "увеличения" в измерении канала. Если так, то между каналами не будет никакого побочного эффекта. Чтение С кода NI_ZoomShift
Я вижу, что увеличение достигается с помощью get_spline_interpolation_weights
который выполняет одномерную сплайн-интерполяцию (не билинейную или бикубическую). Это означает, что масштаб будет состоять из:
- Перебирая каждый 1D срез
image[:, c, ch]
и масштабирование его с помощью 1D-интерполяции (нет взаимодействия между срезами). - Перебирая каждый 1D срез
image[r, :, ch]
и масштабирование его с помощью 1D-интерполяции. - Перебирая каждый 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, т. Е. Выходные данные одинаковы до ошибок с плавающей запятой.