zoom#
- scipy.ndimage.zoom(input, zoom, output=None, order=3, mode='constant', cval=0.0, prefilter=True, *, grid_mode=False)[source]#
縮放陣列。
陣列會使用所請求階數的 spline 插值進行縮放。
- 參數:
- inputarray_like
輸入陣列。
- zoomfloat 或 sequence
沿軸的縮放因子。如果為 float,則
zoom
對於每個軸都相同。如果為 sequence,則zoom
應包含每個軸的一個值。- outputarray 或 dtype,可選
要在其中放置輸出的陣列,或返回陣列的 dtype。預設情況下,將建立與輸入相同 dtype 的陣列。
- orderint,可選
spline 插值的階數,預設值為 3。階數必須在 0-5 的範圍內。
- mode{‘reflect’, ‘grid-mirror’, ‘constant’, ‘grid-constant’, ‘nearest’, ‘mirror’, ‘grid-wrap’, ‘wrap’},可選
mode 參數決定輸入陣列如何在其邊界之外延伸。預設值為 ‘constant’。每個有效值的行為如下(請參閱 邊界模式 上的其他圖表和詳細資訊)
- ‘reflect’ (d c b a | a b c d | d c b a)
輸入透過反射最後一個像素的邊緣來延伸。此模式有時也稱為半樣本對稱。
- ‘grid-mirror’
這是 ‘reflect’ 的同義詞。
- ‘constant’ (k k k k | a b c d | k k k k)
輸入透過用相同的常數值填充邊緣之外的所有值來延伸,常數值由 cval 參數定義。在輸入的邊緣之外不執行插值。
- ‘grid-constant’ (k k k k | a b c d | k k k k)
輸入透過用相同的常數值填充邊緣之外的所有值來延伸,常數值由 cval 參數定義。插值也發生在輸入範圍之外的樣本中。
- ‘nearest’ (a a a a | a b c d | d d d d)
輸入透過複製最後一個像素來延伸。
- ‘mirror’ (d c b | a b c d | c b a)
輸入透過反射最後一個像素的中心來延伸。此模式有時也稱為全樣本對稱。
- ‘grid-wrap’ (a b c d | a b c d | a b c d)
輸入透過環繞到相對的邊緣來延伸。
- ‘wrap’ (d b c d | a b c d | b c a b)
輸入透過環繞到相對的邊緣來延伸,但方式使得最後一點和初始點完全重疊。在這種情況下,在重疊點將選擇哪個樣本沒有明確定義。
- cvalscalar,可選
如果 mode 為 ‘constant’,則填充輸入邊緣之外的值。預設值為 0.0。
- prefilterbool,可選
決定是否在插值之前使用
spline_filter
預先篩選輸入陣列。預設值為 True,如果order > 1
,這將建立一個過濾值的臨時 float64 陣列。如果將此設定為 False,則當order > 1
時,輸出將會稍微模糊,除非輸入已預先篩選,也就是它是調用原始輸入上的spline_filter
的結果。- grid_modebool,可選
如果為 False,則縮放像素中心之間的距離。否則,使用包括完整像素範圍的距離。例如,當 grid_mode 為 False 時,長度為 5 的 1 維訊號被認為長度為 4,但當 grid_mode 為 True 時,長度為 5。請參閱以下視覺圖示
| pixel 1 | pixel 2 | pixel 3 | pixel 4 | pixel 5 | |<-------------------------------------->| vs. |<----------------------------------------------->|
上圖中箭頭的起點對應於每種模式下的座標位置 0。
- 返回:
- zoomndarray
縮放後的輸入。
註解
對於複數值 input,此函數會獨立縮放實部和虛部。
在版本 1.6.0 中新增:新增複數值支援。
範例
>>> from scipy import ndimage, datasets >>> import matplotlib.pyplot as plt
>>> fig = plt.figure() >>> ax1 = fig.add_subplot(121) # left side >>> ax2 = fig.add_subplot(122) # right side >>> ascent = datasets.ascent() >>> result = ndimage.zoom(ascent, 3.0) >>> ax1.imshow(ascent, vmin=0, vmax=255) >>> ax2.imshow(result, vmin=0, vmax=255) >>> plt.show()
>>> print(ascent.shape) (512, 512)
>>> print(result.shape) (1536, 1536)