binary_propagation#
- scipy.ndimage.binary_propagation(входные данные, структура=None, маска=None, вывод=None, border_value=0, origin=0, *, оси=None)[источник]#
Многомерное бинарное распространение с заданным структурирующим элементом.
- Параметры:
- входные данныеarray_like
Бинарное изображение для распространения внутри маска.
- структураarray_like, необязательный
Структурирующий элемент, используемый в последовательных расширениях. Результат может зависеть от структурирующего элемента, особенно если маска имеет несколько связных компонентов. Если структурирующий элемент не предоставлен, элемент генерируется с квадратной связностью, равной единице.
- маскаarray_like, необязательный
Бинарная маска, определяющая область, в которую входные данные разрешено распространять.
- выводndarray, необязательно
Массив той же формы, что и входной, в который помещается результат. По умолчанию создаётся новый массив.
- border_valueint (приводится к 0 или 1), опционально
Значение на границе выходного массива.
- originint или кортеж ints, опционально
Размещение фильтра, по умолчанию 0.
- осикортеж int или None
Оси, по которым применяется фильтр. Если None, входные данные фильтруется по всем осям. Если origin Если предоставлен кортеж, его длина должна соответствовать количеству осей.
- Возвращает:
- binary_propagationndarray
Бинарное распространение входные данные внутри маска.
Примечания
Эта функция функционально эквивалентна вызову binary_dilation с числом итераций меньше единицы: итеративное расширение до тех пор, пока результат не перестанет меняться.
The succession of an erosion and propagation inside the original image can be used instead of an открытие для удаления мелких объектов, сохраняя контуры более крупных объектов нетронутыми.
Ссылки
[1]http://cmm.ensmp.fr/~serra/cours/pdf/en/ch6en.pdf, слайд 15.
[2]I.T. Young, J.J. Gerbrands, и L.J. van Vliet, "Основы обработки изображений", 1998 ftp://qiftp.tudelft.nl/DIPimage/docs/FIP2.3.pdf
Примеры
>>> from scipy import ndimage >>> import numpy as np >>> input = np.zeros((8, 8), dtype=int) >>> input[2, 2] = 1 >>> mask = np.zeros((8, 8), dtype=int) >>> mask[1:4, 1:4] = mask[4, 4] = mask[6:8, 6:8] = 1 >>> input array([[0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 1, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0]]) >>> mask array([[0, 0, 0, 0, 0, 0, 0, 0], [0, 1, 1, 1, 0, 0, 0, 0], [0, 1, 1, 1, 0, 0, 0, 0], [0, 1, 1, 1, 0, 0, 0, 0], [0, 0, 0, 0, 1, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 1, 1], [0, 0, 0, 0, 0, 0, 1, 1]]) >>> ndimage.binary_propagation(input, mask=mask).astype(int) array([[0, 0, 0, 0, 0, 0, 0, 0], [0, 1, 1, 1, 0, 0, 0, 0], [0, 1, 1, 1, 0, 0, 0, 0], [0, 1, 1, 1, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0]]) >>> ndimage.binary_propagation(input, mask=mask,\ ... structure=np.ones((3,3))).astype(int) array([[0, 0, 0, 0, 0, 0, 0, 0], [0, 1, 1, 1, 0, 0, 0, 0], [0, 1, 1, 1, 0, 0, 0, 0], [0, 1, 1, 1, 0, 0, 0, 0], [0, 0, 0, 0, 1, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0]])
>>> # Comparison between opening and erosion+propagation >>> a = np.zeros((6,6), dtype=int) >>> a[2:5, 2:5] = 1; a[0, 0] = 1; a[5, 5] = 1 >>> a array([[1, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0], [0, 0, 1, 1, 1, 0], [0, 0, 1, 1, 1, 0], [0, 0, 1, 1, 1, 0], [0, 0, 0, 0, 0, 1]]) >>> ndimage.binary_opening(a).astype(int) array([[0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0], [0, 0, 0, 1, 0, 0], [0, 0, 1, 1, 1, 0], [0, 0, 0, 1, 0, 0], [0, 0, 0, 0, 0, 0]]) >>> b = ndimage.binary_erosion(a) >>> b.astype(int) array([[0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0], [0, 0, 0, 1, 0, 0], [0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0]]) >>> ndimage.binary_propagation(b, mask=a).astype(int) array([[0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0], [0, 0, 1, 1, 1, 0], [0, 0, 1, 1, 1, 0], [0, 0, 1, 1, 1, 0], [0, 0, 0, 0, 0, 0]])