用法:
cucim.skimage.transform.warp(image, inverse_map, map_args={}, output_shape=None, order=None, mode='constant', cval=0.0, clip=True, preserve_range=False)
根據給定的坐標變換扭曲圖像。
- image:ndarray
輸入圖像。
- 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)
的數組,其中rows
和cols
確定輸出圖像的形狀,第一維包含輸入圖像中的(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
,AffineTransform
和ProjectiveTransform
和order
的情況下,此函數使用基礎變換矩陣以更快的例程扭曲圖像。
例子:
>>> 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)
相關用法
- Python cucim.skimage.transform.warp_polar用法及代碼示例
- Python cucim.skimage.transform.warp_coords用法及代碼示例
- Python cucim.skimage.transform.rescale用法及代碼示例
- Python cucim.skimage.transform.SimilarityTransform用法及代碼示例
- Python cucim.skimage.transform.AffineTransform用法及代碼示例
- Python cucim.skimage.transform.resize用法及代碼示例
- Python cucim.skimage.transform.PolynomialTransform用法及代碼示例
- Python cucim.skimage.transform.EuclideanTransform用法及代碼示例
- Python cucim.skimage.transform.rotate用法及代碼示例
- Python cucim.skimage.transform.PolynomialTransform.estimate用法及代碼示例
- Python cucim.skimage.transform.pyramid_laplacian用法及代碼示例
- Python cucim.skimage.transform.downscale_local_mean用法及代碼示例
- Python cucim.skimage.transform.ProjectiveTransform.estimate用法及代碼示例
- Python cucim.skimage.transform.ProjectiveTransform用法及代碼示例
- Python cucim.skimage.transform.integrate用法及代碼示例
- Python cucim.skimage.transform.estimate_transform用法及代碼示例
- Python cucim.skimage.feature.shape_index用法及代碼示例
- Python cucim.skimage.restoration.richardson_lucy用法及代碼示例
- Python cucim.skimage.util.invert用法及代碼示例
- Python cucim.skimage.data.binary_blobs用法及代碼示例
注:本文由純淨天空篩選整理自rapids.ai大神的英文原創作品 cucim.skimage.transform.warp。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。