當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


Python SciPy ndimage.distance_transform_cdt用法及代碼示例


本文簡要介紹 python 語言中 scipy.ndimage.distance_transform_cdt 的用法。

用法:

scipy.ndimage.distance_transform_cdt(input, metric='chessboard', return_distances=True, return_indices=False, distances=None, indices=None)#

倒角類型變換的距離變換。

此函數通過將每個前景(非零)元素替換為其到背景(任何 zero-valued 元素)的最短距離來計算輸入的距離變換。

除了距離變換,還可以計算特征變換。在這種情況下,最接近每個前景元素的背景元素的索引在單獨的數組中返回。

參數

input array_like

輸入。 0 值被視為背景。

metric {‘chessboard’, ‘taxicab’} 或 數組,可選

公製確定所完成的倒角類型。如果公製等於 ‘taxicab’ 使用生成的結構scipy.ndimage.generate_binary_structure距離的平方等於 1。如果公製等於‘chessboard’,a公製是使用生成的scipy.ndimage.generate_binary_structure距離的平方等於數組的維數。這些選擇對應於二維中 ‘taxicab’ 和 ‘chessboard’ 距離度量的常見解釋。可以以矩陣的形式提供自定義度量,其中每個維度的長度為三。 ‘cityblock’ 和‘manhattan’ 也有效,並映射到‘taxicab’。默認為‘chessboard’。

return_distances 布爾型,可選

是否計算距離變換。默認為真。

return_indices 布爾型,可選

是否計算特征變換。默認為假。

distances int32 ndarray,可選

一個輸出數組,用於存儲計算的距離變換,而不是返回它。 return_distances 必須為真。它必須與輸入的形狀相同。

indices int32 ndarray,可選

一個輸出數組,用於存儲計算的特征變換,而不是返回它。 return_indicies 必須為真。它的形狀必須是 (input.ndim,) + input.shape。

返回

distances int32 ndarray,可選

計算出的距離變換。僅當 return_distances 為 True 並且未提供距離時返回。它將具有與輸入數組相同的形狀。

indices int32 ndarray,可選

計算出的特征變換。對於輸入的每個維度,它都有一個 input-shaped 數組。有關示例,請參閱distance_transform_edt 文檔。僅當 return_indices 為 True 並且未提供索引時返回。

例子

導入必要的模塊。

>>> 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()
scipy-ndimage-distance_transform_cdt-1.png

相關用法


注:本文由純淨天空篩選整理自scipy.org大神的英文原創作品 scipy.ndimage.distance_transform_cdt。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。