scipy.ndimage.

convolve#

scipy.ndimage.convolve(входные данные, веса, вывод=None, mode='reflect', cval=0.0, origin=0, *, оси=None)[источник]#

Многомерная свёртка.

Массив свёртывается с заданным ядром.

Параметры:
входные данныеarray_like

Входной массив.

весаarray_like

Массив весов, с тем же количеством измерений, что и входные данные

выводмассив или dtype, опционально

Массив, в который будет помещен результат, или тип данных возвращаемого массива. По умолчанию будет создан массив того же типа данных, что и входной.

mode{‘reflect’, ‘constant’, ‘nearest’, ‘mirror’, ‘wrap’}, optional

The mode параметр определяет, как входной массив расширяется за пределы своих границ. По умолчанию 'reflect'. Поведение для каждого допустимого значения следующее:

‘reflect’ (d c b a | a b c d | d c b a)

Входные данные расширяются путем отражения относительно края последнего пикселя. Этот режим также иногда называют полувыборочной симметрией.

‘constant’ (k k k k | a b c d | k k k k)

Входные данные расширяются путем заполнения всех значений за границей одним и тем же постоянным значением, определенным cval параметр.

‘nearest’ (a a a a | a b c d | d d d d)

Входные данные расширяются путём репликации последнего пикселя.

‘mirror’ (d c b | a b c d | c b a)

Входные данные расширяются путем отражения относительно центра последнего пикселя. Этот режим также иногда называют симметрией целого образца.

‘wrap’ (a b c d | a b c d | a b c d)

Входные данные расширяются путём обёртывания вокруг противоположного края.

Для согласованности с функциями интерполяции можно также использовать следующие названия режимов:

'grid-mirror'

Это синоним для 'reflect'.

‘grid-constant’

Это синоним для 'constant'.

‘grid-wrap’

Это синоним для ‘wrap’.

cvalскаляр, опционально

Значение для заполнения за краями ввода, если mode равно 'constant'. По умолчанию равно 0.0

originint или sequence, optional

Управляет размещением фильтра на пикселях входного массива. Значение 0 (по умолчанию) центрирует фильтр над пикселем, при этом положительные значения сдвигают фильтр вправо, а отрицательные — влево. Передавая последовательность значений origin длиной, равной количеству измерений входного массива, можно задать разные сдвиги по каждой оси.

осикортеж из int или None, опционально

Если None, входные данные фильтруется по всем осям. В противном случае, входные данные фильтруется вдоль указанных осей. Когда оси если указан, любые кортежи, используемые для mode или origin должен соответствовать длине оси. i-й элемент в любом из этих кортежей соответствует i-му элементу в оси.

Возвращает:
результатndarray

Результат свертки входные данные с веса.

Смотрите также

correlate

Скоррелировать изображение с ядром.

Примечания

Каждое значение в результате \(C_i = \sum_j{I_{i+k-j} W_j}\), где W — это веса ядро, j — это N-мерный пространственный индекс по \(W\), I — это входные данные и k — координата центра W, заданная origin во входных параметрах.

Примеры

Возможно, самый простой случай для понимания — это mode='constant', cval=0.0, потому что в этом случае границы (т.е., где веса ядро, центрированное на любом значении, выходит за край входные данные) обрабатываются как нули.

>>> import numpy as np
>>> a = np.array([[1, 2, 0, 0],
...               [5, 3, 0, 4],
...               [0, 0, 0, 7],
...               [9, 3, 0, 0]])
>>> k = np.array([[1,1,1],[1,1,0],[1,0,0]])
>>> from scipy import ndimage
>>> ndimage.convolve(a, k, mode='constant', cval=0.0)
array([[11, 10,  7,  4],
       [10,  3, 11, 11],
       [15, 12, 14,  7],
       [12,  3,  7,  0]])

Установка cval=1.0 эквивалентно добавлению отступа к внешнему краю входные данные с единицами (а затем извлекая только исходную область результата).

>>> ndimage.convolve(a, k, mode='constant', cval=1.0)
array([[13, 11,  8,  7],
       [11,  3, 11, 14],
       [16, 12, 14, 10],
       [15,  6, 10,  5]])

С mode='reflect' (по умолчанию), внешние значения отражаются на краю входные данные для заполнения пропущенных значений.

>>> b = np.array([[2, 0, 0],
...               [1, 0, 0],
...               [0, 0, 0]])
>>> k = np.array([[0,1,0], [0,1,0], [0,1,0]])
>>> ndimage.convolve(b, k, mode='reflect')
array([[5, 0, 0],
       [3, 0, 0],
       [1, 0, 0]])

Это включает диагонали в углах.

>>> k = np.array([[1,0,0],[0,1,0],[0,0,1]])
>>> ndimage.convolve(b, k)
array([[4, 2, 0],
       [3, 2, 0],
       [1, 1, 0]])

С mode='nearest', единственное ближайшее значение к краю в входные данные повторяется столько раз, сколько необходимо для соответствия перекрывающимся веса.

>>> c = np.array([[2, 0, 1],
...               [1, 0, 0],
...               [0, 0, 0]])
>>> k = np.array([[0, 1, 0],
...               [0, 1, 0],
...               [0, 1, 0],
...               [0, 1, 0],
...               [0, 1, 0]])
>>> ndimage.convolve(c, k, mode='nearest')
array([[7, 0, 3],
       [5, 0, 2],
       [3, 0, 1]])