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


Python cucim.skimage.transform.warp用法及代碼示例

用法:

cucim.skimage.transform.warp(image, inverse_map, map_args={}, output_shape=None, order=None, mode='constant', cval=0.0, clip=True, preserve_range=False)

根據給定的坐標變換扭曲圖像。

參數

imagendarray

輸入圖像。

inverse_map轉換對象,可調用 cr = f(cr, **kwargs) 或 ndarray

逆坐標圖,將輸出圖像中的坐標轉換為輸入圖像中對應的坐標。

根據輸入圖像的維度,有許多不同的選項可以定義此映射。 2-D 圖像對於gray-scale 圖像可以具有 2 個維度,或者具有顏色信息的 3 個維度。

  • 對於二維圖像,您可以直接傳遞一個轉換對象,例如skimage.transform.SimilarityTransform ,或者它的倒數。

  • 對於二維圖像,您可以傳遞 (3, 3) 齊次變換矩陣,例如skimage.transform.SimilarityTransform.params

  • 對於 2-D 圖像,該函數將輸出圖像中的 (col, row) 坐標的 (M, 2) 數組轉換為輸入圖像中的相應坐標。可以通過 map_args 指定函數的額外參數。

  • 對於N-D 圖像,您可以直接傳遞坐標數組。第一個維度指定輸入圖像中的坐標,而後續維度確定輸出圖像中的位置。例如:對於二維圖像,您需要傳遞一個形狀為 (2, rows, cols) 的數組,其中 rowscols 確定輸出圖像的形狀,第一維包含輸入圖像中的 (row, col) 坐標.有關更多文檔,請參閱scipy.ndimage.map_coordinates

請注意,(3, 3) 矩陣被解釋為齊次變換矩陣,因此如果輸出的形狀為 (3,) ,則不能對 3-D 輸入中的值進行插值。

有關用法,請參見示例部分。

map_args字典,可選

傳遞給 inverse_map 的關鍵字參數。

output_shape元組(行,列),可選

生成的輸出圖像的形狀。默認情況下,輸入圖像的形狀被保留。請注意,即使對於多波段圖像,也隻需要指定行和列。

order整數,可選
插值的順序。順序必須在 0-5 範圍內:
  • 0:Nearest-neighbor
  • 1:Bi-linear(默認)
  • 2:Bi-quadratic
  • 3:Bi-cubic
  • 4:Bi-quartic
  • 5:Bi-quintic

如果 image.dtype 為 bool,則默認值為 0,否則為 1。

mode{‘constant’, ‘edge’, ‘symmetric’, ‘reflect’, ‘wrap’},可選

根據給定的模式填充輸入邊界之外的點。模式與 numpy.pad 的行為匹配。

cval浮點數,可選

與模式‘constant’(圖像邊界外的值)結合使用。

clip布爾型,可選

是否將輸出裁剪到輸入圖像的值範圍內。這是默認啟用的,因為高階插值可能會產生超出給定輸入範圍的值。

preserve_range布爾型,可選

是否保持原來的取值範圍。否則,輸入圖像將根據 img_as_float 的約定進行轉換。另見https://scikit-image.org/docs/dev/user_guide/data_types.html

返回

warped雙ndarray

扭曲的輸入圖像。

注意

  • 輸入圖像被轉換為double 圖像。
  • 在 [0, 3] 中的 SimilarityTransform , AffineTransformProjectiveTransformorder 的情況下,此函數使用基礎變換矩陣以更快的例程扭曲圖像。

例子

>>> from cucim.skimage.transform import warp
>>> from skimage import data
>>> image = cp.array(data.camera())

以下圖像扭曲都是相同的,但在執行時間上存在很大差異。圖像移至底部。

使用幾何變換來扭曲圖像(快速):

>>> from cucim.skimage.transform import SimilarityTransform
>>> tform = SimilarityTransform(translation=(0, -10))
>>> warped = warp(image, tform)

使用可調用(慢):

>>> def shift_down(xy):
...     xy[:, 1] -= 10
...     return xy
>>> warped = warp(image, shift_down)

使用變換矩陣扭曲圖像(快速):

>>> import cupy as cp
>>> matrix = cp.asarray([[1, 0, 0], [0, 1, -10], [0, 0, 1]])
>>> warped = warp(image, matrix)
>>> from cucim.skimage.transform import ProjectiveTransform, warp
>>> warped = warp(image, ProjectiveTransform(matrix=matrix))

您還可以使用幾何變換的逆(快速):

>>> warped = warp(image, tform.inverse)

對於N-D 圖像,您可以傳遞一個坐標數組,它為輸出圖像中的每個元素指定輸入圖像中的坐標。例如:如果你想重新調整一個 3-D 立方體,你可以這樣做:

>>> cube_shape = (30, 30, 30)
>>> cube = cp.random.rand(*cube_shape)

設置坐標數組,定義縮放:

>>> scale = 0.1
>>> output_shape = tuple(int(scale * s) for s in cube_shape)
>>> coords0, coords1, coords2 = cp.mgrid[:output_shape[0],
...                    :output_shape[1], :output_shape[2]]
>>> coords = cp.asarray([coords0, coords1, coords2])

假設立方體包含空間數據,其中第一個數組元素中心位於真實空間中的坐標 (0.5, 0.5, 0.5),即我們必須在縮放圖像時考慮這個額外的偏移量:

>>> coords = (coords + 0.5) / scale - 0.5
>>> warped = warp(cube, coords)

相關用法


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