distance_transform_cdt#
- scipy.ndimage.distance_transform_cdt(входные данные, метрика='chessboard', return_distances=True, return_indices=False, расстояния=None, индексы=None)[источник]#
Преобразование расстояния для преобразований типа шампфера.
Эта функция вычисляет преобразование расстояния входные данные, путём замены каждого элемента переднего плана (ненулевого) на его кратчайшее расстояние до фона (любого элемента с нулевым значением).
В дополнение к преобразованию расстояния можно вычислить преобразование признаков. В этом случае индекс ближайшего фонового элемента к каждому переднему элементу возвращается в отдельном массиве.
- Параметры:
- входные данныеarray_like
Входные данные. Значения 0 обрабатываются как фон.
- метрика{‘chessboard’, ‘taxicab’} или array_like, опционально
The метрика определяет тип скругления, которое выполняется. Если метрика равно 'такси' (taxicab), структура генерируется с использованием
generate_binary_structureс квадратом расстояния, равным 1. Если метрика равно 'chessboard', метрика генерируется с использованиемgenerate_binary_structureс квадратом расстояния, равным размерности массива. Эти варианты соответствуют обычным интерпретациям метрик расстояния «такси» и «шахматной доски» в двух измерениях. Пользовательская метрика может быть предоставлена в виде матрицы, где каждое измерение имеет длину три. «cityblock» и «manhattan» также допустимы и соответствуют «такси». По умолчанию используется «шахматная доска».- return_distancesbool, необязательно
Вычислять ли преобразование расстояния. По умолчанию True.
- return_indicesbool, необязательно
Следует ли вычислять преобразование признаков. По умолчанию: False.
- расстоянияint32 ndarray, опционально
Выходной массив для хранения вычисленного преобразования расстояния, вместо возврата его. return_distances должно быть True. Оно должно иметь ту же форму, что и входные данные.
- индексыint32 ndarray, опционально
Выходной массив для хранения вычисленного преобразования признаков вместо его возврата. return_indicies должно быть True. Его форма должна быть
(input.ndim,) + input.shape.
- Возвращает:
- расстоянияint32 ndarray, опционально
Рассчитанное преобразование расстояния. Возвращается только когда return_distances равно True, и расстояния не предоставлен. Он будет иметь ту же форму, что и входной массив.
- индексыint32 ndarray, опционально
Вычисленное преобразование признаков. Имеет массив формы входных данных для каждого измерения входных данных. См. документацию distance_transform_edt для примера. Возвращается только когда return_indices равно True, и индексы не предоставлен.
Смотрите также
distance_transform_edtБыстрое преобразование расстояния для евклидовой метрики
distance_transform_bfПреобразование расстояния для различных метрик с использованием более медленного алгоритма полного перебора
Примеры
Импорт необходимых модулей.
>>> import numpy as np >>> from scipy.ndimage import distance_transform_cdt >>> import matplotlib.pyplot as plt >>> from mpl_toolkits.axes_grid1 import ImageGrid
Сначала создадим тестовое бинарное изображение.
>>> def add_circle(center_x, center_y, radius, image, fillvalue=1): ... # fill circular area with 1 ... xx, yy = np.mgrid[:image.shape[0], :image.shape[1]] ... circle = (xx - center_x) ** 2 + (yy - center_y) ** 2 ... circle_shape = np.sqrt(circle) < radius ... image[circle_shape] = fillvalue ... return image >>> image = np.zeros((100, 100), dtype=np.uint8) >>> image[35:65, 20:80] = 1 >>> image = add_circle(28, 65, 10, image) >>> image = add_circle(37, 30, 10, image) >>> image = add_circle(70, 45, 20, image) >>> image = add_circle(45, 80, 10, image)
Далее мы настраиваем рисунок.
>>> fig = plt.figure(figsize=(5, 15)) >>> grid = ImageGrid(fig, 111, nrows_ncols=(3, 1), axes_pad=(0.5, 0.3), ... label_mode="1", share_all=True, ... cbar_location="right", cbar_mode="each", ... cbar_size="7%", cbar_pad="2%") >>> for ax in grid: ... ax.axis('off') >>> top, middle, bottom = grid >>> colorbar_ticks = [0, 10, 20]
Верхнее изображение содержит исходное бинарное изображение.
>>> binary_image = top.imshow(image, cmap='gray') >>> cbar_binary_image = top.cax.colorbar(binary_image) >>> cbar_binary_image.set_ticks([0, 1]) >>> top.set_title("Binary image: foreground in white")
Среднее изображение содержит преобразование расстояния с использованием
taxicabметрика.>>> distance_taxicab = distance_transform_cdt(image, metric="taxicab") >>> taxicab_transform = middle.imshow(distance_taxicab, cmap='gray') >>> cbar_taxicab = middle.cax.colorbar(taxicab_transform) >>> cbar_taxicab.set_ticks(colorbar_ticks) >>> middle.set_title("Taxicab metric")
Нижнее изображение содержит преобразование расстояния с использованием
chessboardметрика.>>> distance_chessboard = distance_transform_cdt(image, ... metric="chessboard") >>> chessboard_transform = bottom.imshow(distance_chessboard, cmap='gray') >>> cbar_chessboard = bottom.cax.colorbar(chessboard_transform) >>> cbar_chessboard.set_ticks(colorbar_ticks) >>> bottom.set_title("Chessboard metric") >>> plt.tight_layout() >>> plt.show()