skimage.filters#

銳化、邊緣偵測、排序濾波器、閾值處理等。

apply_hysteresis_threshold

將遲滯閾值處理應用於 image

butterworth

套用巴特沃斯濾波器以增強高頻或低頻特徵。

correlate_sparse

計算 padded_arraykernel 的有效交叉相關。

difference_of_gaussians

找出大小介於 low_sigmahigh_sigma 之間的特徵。

farid

使用 Farid 轉換找出邊緣強度。

farid_h

使用 Farid 轉換找出影像的水平邊緣。

farid_v

使用 Farid 轉換找出影像的垂直邊緣。

filter_forward

將給定的濾波器套用於資料。

filter_inverse

將濾波器反向套用於給定的資料。

frangi

使用 Frangi 血管濾波器過濾影像。

gabor

傳回 Gabor 濾波器的實部和虛部響應。

gabor_kernel

傳回複數 2D Gabor 濾波器核心。

gaussian

多維高斯濾波器。

hessian

使用混合 Hessian 濾波器過濾影像。

laplace

使用拉普拉斯算子找出影像的邊緣。

median

傳回影像的局部中位數。

meijering

使用 Meijering 神經元濾波器過濾影像。

prewitt

使用 Prewitt 轉換找出邊緣強度。

prewitt_h

使用 Prewitt 轉換找出影像的水平邊緣。

prewitt_v

使用 Prewitt 轉換找出影像的垂直邊緣。

rank_order

傳回形狀相同的影像,其中每個像素都是 image 的唯一值以升序排列時,該像素值在其中的索引,也稱為排序值。

roberts

使用 Roberts' 交叉算子找出邊緣強度。

roberts_neg_diag

使用 Roberts' 交叉算子找出影像的交叉邊緣。

roberts_pos_diag

使用 Roberts' 交叉算子找出影像的交叉邊緣。

sato

使用 Sato 管狀濾波器過濾影像。

scharr

使用 Scharr 轉換找出邊緣強度。

scharr_h

使用 Scharr 轉換找出影像的水平邊緣。

scharr_v

使用 Scharr 轉換找出影像的垂直邊緣。

sobel

使用 Sobel 濾波器找出影像中的邊緣。

sobel_h

使用 Sobel 轉換找出影像的水平邊緣。

sobel_v

使用 Sobel 轉換找出影像的垂直邊緣。

threshold_isodata

傳回基於 ISODATA 方法的閾值。

threshold_li

透過 Li 的迭代最小交叉熵方法計算閾值。

threshold_local

根據局部像素鄰域計算閾值遮罩影像。

threshold_mean

傳回基於灰度值平均值的閾值。

threshold_minimum

傳回基於最小值方法的閾值。

threshold_multiotsu

產生 classes-1 個閾值,以根據 Otsu 的多類別方法分割 image 中的灰階。

threshold_niblack

將 Niblack 局部閾值套用於陣列。

threshold_otsu

傳回基於 Otsu 方法的閾值。

threshold_sauvola

將 Sauvola 局部閾值套用於陣列。

threshold_triangle

傳回基於三角形演算法的閾值。

threshold_yen

傳回基於 Yen 方法的閾值。

try_all_threshold

傳回比較不同閾值處理方法輸出的圖形。

unsharp_mask

非銳化遮罩濾波器。

wiener

最小均方誤差 (維納) 反向濾波器。

window

傳回給定大小和維度的 n 維視窗。

LPIFilter2D

線性位置不變濾波器(二維)

rank


skimage.filters.apply_hysteresis_threshold(image, low, high)[原始碼]#

將遲滯閾值處理應用於 image

此演算法會找出 image 大於 high,或 image 大於 low該區域連接到大於 high 的區域的位置。

參數:
image(M[, …]) ndarray

灰階輸入影像。

lowfloat,或與 image 形狀相同的陣列

較低閾值。

highfloat,或與 image 形狀相同的陣列

較高閾值。

傳回:
thresholded(M[, …]) 布林陣列

陣列中,True 表示 image 高於遲滯閾值的位置。

參考資料

[1]

J. Canny. A computational approach to edge detection. IEEE Transactions on Pattern Analysis and Machine Intelligence. 1986; vol. 8, pp.679-698. DOI:10.1109/TPAMI.1986.4767851

範例

>>> image = np.array([1, 2, 3, 2, 1, 2, 1, 3, 2])
>>> apply_hysteresis_threshold(image, 1.5, 2.5).astype(int)
array([0, 1, 1, 1, 0, 0, 0, 1, 1])

遲滯閾值處理

遲滯閾值處理

使用像素圖形尋找物件的測地中心

使用像素圖形尋找物件的測地中心

skimage.filters.butterworth(image, cutoff_frequency_ratio=0.005, high_pass=True, order=2.0, channel_axis=None, *, squared_butterworth=True, npad=0)[原始碼]#

套用巴特沃斯濾波器以增強高頻或低頻特徵。

此濾波器定義在傅立葉域中。

參數:
image(M[, N[, …, P]][, C]) ndarray

輸入影像。

cutoff_frequency_ratiofloat,選填

決定相對於 FFT 形狀的截止位置。接收介於 [0, 0.5] 之間的值。

high_passbool,選填

是否執行高通濾波器。若為 False,則執行低通濾波器。

orderfloat,選填

濾波器的階數,會影響截止附近的斜率。階數越高,頻率空間中的斜率越陡峭。

channel_axisint,選填

若有通道維度,請在此處提供索引。若為 None(預設值),則假設所有軸都是空間維度。

squared_butterworthbool,選填

若為 True,則使用巴特沃斯濾波器的平方。如需詳細資訊,請參閱以下注意事項。

npadint,選填

使用 numpy.padmode='edge' 擴充功能,將影像的每個邊緣使用 npad 像素進行填補。

傳回:
resultndarray

經過巴特沃斯濾波的影像。

注意事項

可透過結合高通和低通濾波器來達成帶通濾波器。若邊界出現假影,使用者可以增加 npad

影像處理教科書中使用的「巴特沃斯濾波器」(例如 [1][2])通常是 [3][4] 所述的傳統巴特沃斯濾波器的平方。若 squared_butterworth 設定為 True,則會在此處使用平方版本。低通平方巴特沃斯濾波器由以下低通情況的表達式給定

\[H_{low}(f) = \frac{1}{1 + \left(\frac{f}{c f_s}\right)^{2n}}\]

而高通情況由下式給定

\[H_{hi}(f) = 1 - H_{low}(f)\]

其中 \(f=\sqrt{\sum_{d=0}^{\mathrm{ndim}} f_{d}^{2}}\) 是空間頻率的絕對值,\(f_s\) 是取樣頻率,\(c\)cutoff_frequency_ratio,且 \(n\) 是濾波器的 order [1]。當 squared_butterworth=False 時,會改為使用上述表達式的平方根。

請注意,cutoff_frequency_ratio 是以取樣頻率 \(f_s\) 來定義的。FFT 頻譜涵蓋奈奎斯特範圍 (\([-f_s/2, f_s/2]\)),因此 cutoff_frequency_ratio 的值應介於 0 到 0.5 之間。當 squared_butterworth 為 true 時,截止頻率處的頻率響應(增益)為 0.5;當其為 false 時,頻率響應為 \(1/\sqrt{2}\)

參考資料

[1] (1,2)

Russ, John C., et al. The Image Processing Handbook, 3rd. Ed. 1999, CRC Press, LLC.

[2]

Birchfield, Stan. Image Processing and Analysis. 2018. Cengage Learning.

[3]

Butterworth, Stephen. “On the theory of filter amplifiers.” Wireless Engineer 7.6 (1930): 536-541.

範例

分別對灰階和彩色圖像應用高通和低通巴特沃斯濾波器

>>> from skimage.data import camera, astronaut
>>> from skimage.filters import butterworth
>>> high_pass = butterworth(camera(), 0.07, True, 8)
>>> low_pass = butterworth(astronaut(), 0.01, False, 4, channel_axis=-1)

巴特沃斯濾波器

巴特沃斯濾波器

skimage.filters.correlate_sparse(image, kernel, mode='reflect')[原始碼]#

計算 padded_arraykernel 的有效交叉相關。

kernel 很大且有許多零時,此函數會非常快

有關交叉相關的說明,請參閱 scipy.ndimage.correlate

參數:
imagendarray,dtype 為 float,形狀為 (M, N[, …], P)

輸入陣列。如果 mode 為 ‘valid’,則此陣列應已填補,因為會剝離與 kernel 形狀相同的邊距。

kernelndarray,dtype 為 float,形狀為 (Q, R[, …], S)

要進行相關的 kernel。必須與 padded_array 具有相同的維度數量。為了獲得高效能,它應該是稀疏的(非零條目很少)。

mode字串,可選

有關有效模式,請參閱 scipy.ndimage.correlate。此外,接受模式 ‘valid’,在這種情況下,不會應用填補,結果是針對 kernel 完全在原始資料內部的較小影像的結果。

傳回:
result浮點數陣列,形狀為 (M, N[, …], P)

imagekernel 進行交叉相關的結果。如果使用模式 ‘valid’,則結果形狀為 (M-Q+1, N-R+1[, …], P-S+1)。


skimage.filters.difference_of_gaussians(image, low_sigma, high_sigma=None, *, mode='nearest', cval=0, channel_axis=None, truncate=4.0)[原始碼]#

找出大小介於 low_sigmahigh_sigma 之間的特徵。

此函數使用高斯差分方法對多維陣列應用帶通濾波器。輸入陣列會使用兩個具有不同 sigma 的高斯 kernel 模糊化,以產生兩個中間的過濾影像。然後,從模糊較少的影像中減去模糊較多的影像。因此,最終輸出影像將因較小 sigma 的高斯而衰減高頻成分,並且由於它們存在於模糊較多的中間值中,因此會移除低頻成分。

參數:
imagendarray

要過濾的輸入陣列。

low_sigma純量或純量序列

具有跨所有軸較小 sigma 的高斯 kernel 的標準差。標準差以序列的形式為每個軸給出,或以單個數字的形式給出,在這種情況下,該單個數字用作所有軸的標準差值。

high_sigma純量或純量序列,可選 (預設為 None)

具有跨所有軸較大 sigma 的高斯 kernel 的標準差。標準差以序列的形式為每個軸給出,或以單個數字的形式給出,在這種情況下,該單個數字用作所有軸的標準差值。如果未提供 None (預設值),則所有軸的 sigma 計算為 1.6 * low_sigma。

mode{‘reflect’, ‘constant’, ‘nearest’, ‘mirror’, ‘wrap’},可選

mode 參數決定如何處理陣列邊界,其中 cval 是模式等於 'constant' 時的值。預設為 'nearest'。

cval純量,可選

如果 mode 為 ‘constant’,則用於填補輸入邊緣以外的值。預設值為 0.0

channel_axisint 或 None,可選

如果為 None,則假設影像為灰階(單通道)影像。否則,此參數指示陣列的哪個軸對應於通道。

在版本 0.19 中新增: channel_axis 在 0.19 中新增。

truncate浮點數,可選(預設值為 4.0)

在此標準差個數處截斷濾波器。

傳回:
filtered_imagendarray

過濾後的陣列。

注意事項

此函數將從使用 sigma 由 low_sigma 提供的高斯 kernel 過濾的陣列中,減去使用 sigma 由 high_sigma 提供的高斯 kernel 過濾的陣列。high_sigma 的值必須始終大於或等於 low_sigma 中對應的值,否則會引發 ValueError

high_sigma 為 None 時,high_sigma 的值將計算為 low_sigma 中對應值的 1.6 倍。此比率最初由 Marr 和 Hildreth (1980) [1] 提出,並且通常用於近似高斯的反拉普拉斯算子,該算子用於邊緣和斑點偵測。

輸入影像會根據 img_as_float 的慣例進行轉換。

除了 sigma 值之外,所有參數都用於兩個濾波器。

參考資料

[1]

Marr, D. and Hildreth, E. Theory of Edge Detection. Proc. R. Soc. Lond. Series B 207, 187-217 (1980). https://doi.org/10.1098/rspb.1980.0020

範例

對彩色影像套用簡單的高斯差分濾波器

>>> from skimage.data import astronaut
>>> from skimage.filters import difference_of_gaussians
>>> filtered_image = difference_of_gaussians(astronaut(), 2, 10,
...                                          channel_axis=-1)

套用高斯拉普拉斯濾波器,該濾波器近似於高斯差分濾波器

>>> filtered_image = difference_of_gaussians(astronaut(), 2,
...                                          channel_axis=-1)

使用每個軸的不同 sigma 值對灰階影像套用高斯差分濾波器

>>> from skimage.data import camera
>>> filtered_image = difference_of_gaussians(camera(), (2,5), (3,20))

使用極座標和對數極座標變換進行配準

使用極座標和對數極座標變換進行配準

高斯差分的帶通濾波

高斯差分的帶通濾波

skimage.filters.farid(image, mask=None, *, axis=None, mode='reflect', cval=0.0)[原始碼]#

使用 Farid 轉換找出邊緣強度。

參數:
image陣列

輸入影像。

mask布林值陣列,可選

將輸出影像剪輯到此遮罩。(mask=0 的值將設定為 0。)

axisint 或 int 序列,可選

沿此軸計算邊緣濾波器。如果未提供,則會計算邊緣幅度。其定義為

farid_mag = np.sqrt(sum([farid(image, axis=i)**2
                         for i in range(image.ndim)]) / image.ndim)

如果 axis 是序列,也會計算幅度。

modestr 或 str 序列,可選

捲積的邊界模式。有關模式的描述,請參閱 scipy.ndimage.convolve。這可以是單個邊界模式或每個軸一個邊界模式。

cval浮點數,可選

mode'constant' 時,這是用於影像資料邊界外的值的常數。

傳回:
output浮點數陣列

Farid 邊緣圖。

另請參閱

farid_hfarid_v

水平和垂直邊緣偵測。

scharrsobelprewittskimage.feature.canny

注意事項

取水平和垂直導數平方和的平方根,以獲得一個對方向不敏感的幅度值。與 Scharr 算子類似,此算子的設計具有旋轉不變性的約束。

參考資料

[1]

Farid, H. 和 Simoncelli, E. P., “離散多維訊號的微分”, IEEE Transactions on Image Processing 13(4): 496-508, 2004. DOI:10.1109/TIP.2004.823819

[2]

維基百科, “Farid and Simoncelli 導數”。網址:<https://en.wikipedia.org/wiki/Image_derivatives#Farid_and_Simoncelli_Derivatives>

範例

>>> from skimage import data
>>> camera = data.camera()
>>> from skimage import filters
>>> edges = filters.farid(camera)

skimage.filters.farid_h(image, *, mask=None)[原始碼]#

使用 Farid 轉換找出影像的水平邊緣。

參數:
image二維陣列

要處理的影像。

mask二維陣列,可選

一個可選的遮罩,用於限制應用到特定區域。請注意,遮罩區域周圍的像素也會被遮罩,以防止遮罩區域影響結果。

傳回:
output二維陣列

Farid 邊緣圖。

注意事項

該核心是使用 [1] 中的 5 抽頭權重構建的。

參考資料

[1]

Farid, H. 和 Simoncelli, E. P., “離散多維訊號的微分”, IEEE Transactions on Image Processing 13(4): 496-508, 2004. DOI:10.1109/TIP.2004.823819

[2]

Farid, H. 和 Simoncelli, E. P. “最佳旋轉等變方向導數核心”,發表於:第七屆國際影像與模式電腦分析會議,基爾,德國。1997 年 9 月。

邊緣運算子

邊緣運算子

skimage.filters.farid_v(image, *, mask=None)[原始碼]#

使用 Farid 轉換找出影像的垂直邊緣。

參數:
image二維陣列

要處理的影像。

mask二維陣列,可選

一個可選的遮罩,用於限制應用到特定區域。請注意,遮罩區域周圍的像素也會被遮罩,以防止遮罩區域影響結果。

傳回:
output二維陣列

Farid 邊緣圖。

注意事項

該核心是使用 [1] 中的 5 抽頭權重構建的。

參考資料

[1]

Farid, H. 和 Simoncelli, E. P., “離散多維訊號的微分”, IEEE Transactions on Image Processing 13(4): 496-508, 2004. DOI:10.1109/TIP.2004.823819

邊緣運算子

邊緣運算子

skimage.filters.filter_forward(data, impulse_response=None, filter_params=None, predefined_filter=None)[原始碼]#

將給定的濾波器套用於資料。

參數:
data(M, N) ndarray

輸入資料。

impulse_response可呼叫 f(r, c, **filter_params)

濾波器的脈衝響應。請參閱 LPIFilter2D.__init__。

filter_paramsdict,可選

脈衝響應函數的額外關鍵字參數。

其他參數:
predefined_filterLPIFilter2D

如果您需要對不同的影像多次應用相同的濾波器,請建構 LPIFilter2D 並在此處指定。

範例

無標準化的高斯濾波器

>>> def filt_func(r, c, sigma=1):
...     return np.exp(-(r**2 + c**2)/(2 * sigma**2))
>>>
>>> from skimage import data
>>> filtered = filter_forward(data.coins(), filt_func)

skimage.filters.filter_inverse(data, impulse_response=None, filter_params=None, max_gain=2, predefined_filter=None)[原始碼]#

將濾波器反向套用於給定的資料。

參數:
data(M, N) ndarray

輸入資料。

impulse_response可呼叫 f(r, c, **filter_params)

濾波器的脈衝響應。請參閱 LPIFilter2D。除非提供 predifined_filter,否則這是必要的參數。

filter_paramsdict,可選

脈衝響應函數的額外關鍵字參數。

max_gain浮點數,可選

限制濾波器增益。通常,濾波器包含零,這會導致逆濾波器具有無限增益。高增益會放大偽影,因此建議使用保守的限制。

其他參數:
predefined_filterLPIFilter2D,可選

如果您需要對不同的影像多次應用相同的濾波器,請建構 LPIFilter2D 並在此處指定。


skimage.filters.frangi(image, sigmas=range(1, 10, 2), scale_range=None, scale_step=None, alpha=0.5, beta=0.5, gamma=None, black_ridges=True, mode='reflect', cval=0)[原始碼]#

使用 Frangi 血管濾波器過濾影像。

此濾波器可用於偵測連續的脊狀結構,例如血管、皺紋、河流。它可用於計算包含此類物件的整個影像的比例。

僅針對二維和三維影像定義。根據 [1] 中描述的方法,計算 Hessian 的特徵值,以計算影像區域與血管的相似度。

參數:
image(M, N[, P]) ndarray

包含輸入影像資料的陣列。

sigmas浮點數的可迭代物件,可選

用作濾波器縮放比例的 sigmas,即 np.arange(scale_range[0], scale_range[1], scale_step)

scale_range浮點數的 2 元組,可選

使用的 sigmas 範圍。

scale_step浮點數,可選

sigmas 之間的步長大小。

alpha浮點數,可選

Frangi 校正常數,用於調整濾波器對偏離板狀結構的靈敏度。

beta浮點數,可選

Frangi 校正常數,用於調整濾波器對偏離球狀結構的靈敏度。

gamma浮點數,可選

Frangi 校正常數,用於調整濾波器對高變異數/紋理/結構區域的靈敏度。預設值 None 使用 Hessian 範數最大值的一半。

black_ridges布林值,可選

當為 True(預設值)時,濾波器會偵測黑色脊狀結構;當為 False 時,它會偵測白色脊狀結構。

mode{‘constant’、‘reflect’、‘wrap’、‘nearest’、‘mirror’},可選

如何處理影像邊界之外的值。

cval浮點數,可選

與模式 'constant' 結合使用時,影像邊界之外的值。

傳回:
out(M, N[, P]) ndarray

已濾波影像(所有尺度中像素的最大值)。

另請參閱

meijering
sato
hessian

注意事項

此濾波器的早期版本由 Marc Schrijver(2001 年 11 月)、D. J. Kroon,特溫特大學(2009 年 5 月)[2] 和 D. G. Ellis(2017 年 1 月)[3] 實作。

參考資料

[1]

Frangi, A. F., Niessen, W. J., Vincken, K. L., & Viergever, M. A. (1998,). 多尺度血管增強濾波。於國際醫學影像計算與電腦輔助介入會議 (頁 130-137)。Springer Berlin Heidelberg. DOI:10.1007/BFb0056195

[2]

Kroon, D. J.: 基於 Hessian 的 Frangi 血管濾波器。

[3]

Ellis, D. G.: ellisdg/frangi3d

脊狀運算子

脊狀運算子

skimage.filters.gabor(image, frequency, theta=0, bandwidth=1, sigma_x=None, sigma_y=None, n_stds=3, offset=0, mode='reflect', cval=0)[原始碼]#

傳回 Gabor 濾波器的實部和虛部響應。

Gabor 濾波器核心的實部和虛部會應用於影像,並將響應以一對陣列的形式返回。

Gabor 濾波器是一種線性濾波器,具有高斯核心,並由正弦平面波調製。Gabor 濾波器的頻率和方向表示與人類視覺系統相似。Gabor 濾波器組常被用於電腦視覺和影像處理。它們特別適用於邊緣檢測和紋理分類。

參數:
image二維陣列

輸入影像。

frequencyfloat

諧波函數的空間頻率。以像素為單位指定。

thetafloat,可選

以弧度為單位的方向。如果為 0,則諧波方向為 x 軸。

bandwidthfloat,可選

濾波器捕獲的頻寬。對於固定的頻寬,sigma_xsigma_y 會隨著頻率增加而減少。如果使用者設定了 sigma_xsigma_y,則此值會被忽略。

sigma_x, sigma_yfloat,可選

x 和 y 方向的標準差。這些方向適用於旋轉之前的核心。如果 theta = pi/2,則核心會旋轉 90 度,因此 sigma_x 控制垂直方向。

n_stds純量,可選

核心的線性大小為 n_stds(預設為 3)個標準差。

offsetfloat,可選

諧波函數的相位偏移(以弧度為單位)。

mode{‘constant’, ‘nearest’, ‘reflect’, ‘mirror’, ‘wrap’},可選

用來將影像與核心進行卷積的模式,會傳遞至 ndi.convolve

cval純量,可選

如果卷積的 mode 為 'constant',則用來填充輸入邊緣之外的值。此參數會傳遞至 ndi.convolve

傳回:
real, imag陣列

使用 Gabor 濾波器核心的實部和虛部進行濾波的影像。影像與輸入影像具有相同的尺寸。

參考資料

範例

>>> from skimage.filters import gabor
>>> from skimage import data
>>> from matplotlib import pyplot as plt  
>>> image = data.coins()
>>> # detecting edges in a coin image
>>> filt_real, filt_imag = gabor(image, frequency=0.6)
>>> fix, ax = plt.subplots()  
>>> ax.imshow(filt_real)      
>>> plt.show()                
>>> # less sensitivity to finer details with the lower frequency kernel
>>> filt_real, filt_imag = gabor(image, frequency=0.1)
>>> fig, ax = plt.subplots()  
>>> ax.imshow(filt_real)      
>>> plt.show()                

skimage.filters.gabor_kernel(frequency, theta=0, bandwidth=1, sigma_x=None, sigma_y=None, n_stds=3, offset=0, dtype=<class 'numpy.complex128'>)[原始碼]#

傳回複數 2D Gabor 濾波器核心。

Gabor 核心是一個由複數諧波函數調製的高斯核心。諧波函數由虛數正弦函數和實數餘弦函數組成。空間頻率與諧波波長和高斯核心的標準差成反比。頻寬也與標準差成反比。

參數:
frequencyfloat

諧波函數的空間頻率。以像素為單位指定。

thetafloat,可選

以弧度為單位的方向。如果為 0,則諧波方向為 x 軸。

bandwidthfloat,可選

濾波器捕獲的頻寬。對於固定的頻寬,sigma_xsigma_y 會隨著頻率增加而減少。如果使用者設定了 sigma_xsigma_y,則此值會被忽略。

sigma_x, sigma_yfloat,可選

x 和 y 方向的標準差。這些方向適用於旋轉之前的核心。如果 theta = pi/2,則核心會旋轉 90 度,因此 sigma_x 控制垂直方向。

n_stds純量,可選

核心的線性大小為 n_stds(預設為 3)個標準差

offsetfloat,可選

諧波函數的相位偏移(以弧度為單位)。

dtype{np.complex64, np.complex128}

指定濾波器是單精度還是雙精度複數。

傳回:
g複數陣列

複數濾波器核心。

參考資料

範例

>>> from skimage.filters import gabor_kernel
>>> from matplotlib import pyplot as plt  
>>> gk = gabor_kernel(frequency=0.2)
>>> fig, ax = plt.subplots()  
>>> ax.imshow(gk.real)        
>>> plt.show()                
>>> # more ripples (equivalent to increasing the size of the
>>> # Gaussian spread)
>>> gk = gabor_kernel(frequency=0.2, bandwidth=0.1)
>>> fig, ax = plt.suplots()  
>>> ax.imshow(gk.real)       
>>> plt.show()               

用於紋理分類的 Gabor 濾波器組

用於紋理分類的 Gabor 濾波器組

skimage.filters.gaussian(image, sigma=1, *, mode='nearest', cval=0, preserve_range=False, truncate=4.0, channel_axis=None, out=None)[原始碼]#

多維高斯濾波器。

參數:
imagendarray

要篩選的輸入影像(灰階或彩色)。

sigma純量或純量序列,可選

高斯核心的標準差。高斯濾波器的標準差會針對每個軸以序列或單一數字的方式給定,若是單一數字則表示所有軸都相同。

mode{‘reflect’, ‘constant’, ‘nearest’, ‘mirror’, ‘wrap’},可選

mode 參數決定如何處理陣列邊界,其中 cval 是模式等於 'constant' 時的值。預設為 'nearest'。

cval純量,可選

如果 mode 為 ‘constant’,則用於填補輸入邊緣以外的值。預設值為 0.0

preserve_rangebool,可選

如果為 True,則保留值的原始範圍。否則,會根據 img_as_float 的慣例轉換輸入 image(首先根據輸入的 dtype 正規化為值 [-1.0 ; 1.0] 或 [0 ; 1.0])。

如需更多資訊,請參閱:https://scikit-image.dev.org.tw/docs/dev/user_guide/data_types.html

truncatefloat,可選

在此標準差個數處截斷濾波器。

channel_axisint 或 None,可選

如果為 None,則假設影像為灰階(單通道)影像。否則,此參數指示陣列的哪個軸對應於通道。

在 0.19 版中新增: 在 0.19 版中新增了 channel_axis

outndarray,可選

如果給定,則篩選後的影像會儲存在此陣列中。

在 0.23 版中新增: 在 0.23 版中新增了 out

傳回:
filtered_imagendarray

已篩選的陣列

注意事項

此函式是 scipy.ndimage.gaussian_filter() 的包裝函式。

整數陣列會轉換為浮點數。

out 應為浮點數資料類型,因為 gaussian 會將輸入 image 轉換為浮點數。如果未提供 out,則會配置另一個陣列並將其傳回作為結果。

多維濾波器會實作為一維卷積濾波器的序列。中間陣列會以與輸出相同的資料類型儲存。因此,對於精度有限的輸出類型,結果可能不精確,因為中間結果可能以不夠精確的精度儲存。

範例

>>> import skimage as ski
>>> a = np.zeros((3, 3))
>>> a[1, 1] = 1
>>> a
array([[0., 0., 0.],
       [0., 1., 0.],
       [0., 0., 0.]])
>>> ski.filters.gaussian(a, sigma=0.4)  # mild smoothing
array([[0.00163116, 0.03712502, 0.00163116],
       [0.03712502, 0.84496158, 0.03712502],
       [0.00163116, 0.03712502, 0.00163116]])
>>> ski.filters.gaussian(a, sigma=1)  # more smoothing
array([[0.05855018, 0.09653293, 0.05855018],
       [0.09653293, 0.15915589, 0.09653293],
       [0.05855018, 0.09653293, 0.05855018]])
>>> # Several modes are possible for handling boundaries
>>> ski.filters.gaussian(a, sigma=1, mode='reflect')
array([[0.08767308, 0.12075024, 0.08767308],
       [0.12075024, 0.16630671, 0.12075024],
       [0.08767308, 0.12075024, 0.08767308]])
>>> # For RGB images, each is filtered separately
>>> image = ski.data.astronaut()
>>> filtered_img = ski.filters.gaussian(image, sigma=1, channel_axis=-1)

主動輪廓模型

主動輪廓模型

使用簡單的影像拼接來組裝影像

使用簡單的影像拼接來組裝影像

共定位指標

共定位指標

追蹤金屬合金的凝固過程

追蹤金屬合金的凝固過程

測量核膜上的螢光強度

測量核膜上的螢光強度

skimage.filters.hessian(image, sigmas=range(1, 10, 2), scale_range=None, scale_step=None, alpha=0.5, beta=0.5, gamma=15, black_ridges=True, mode='reflect', cval=0)[原始碼]#

使用混合 Hessian 濾波器過濾影像。

此濾波器可用於偵測連續邊緣,例如血管、皺紋、河流。它可用於計算包含此類物件的整個影像的比例。

僅針對 2D 和 3D 影像定義。幾乎等於 Frangi 濾波器,但使用另一種平滑方法。請參閱 [1] 以了解 Frangi 和 Hessian 濾波器之間的差異。

參數:
image(M, N[, P]) ndarray

包含輸入影像資料的陣列。

sigmas浮點數的可迭代物件,可選

用作濾波器縮放比例的 sigmas,即 np.arange(scale_range[0], scale_range[1], scale_step)

scale_range浮點數的 2 元組,可選

使用的 sigmas 範圍。

scale_step浮點數,可選

sigmas 之間的步長大小。

beta浮點數,可選

Frangi 校正常數,用於調整濾波器對偏離球狀結構的靈敏度。

gamma浮點數,可選

Frangi 校正常數會調整濾波器對高變異數/紋理/結構區域的敏感度。

black_ridges布林值,可選

當為 True(預設值)時,濾波器會偵測黑色脊狀結構;當為 False 時,它會偵測白色脊狀結構。

mode{‘constant’、‘reflect’、‘wrap’、‘nearest’、‘mirror’},可選

如何處理影像邊界之外的值。

cval浮點數,可選

與模式 'constant' 結合使用時,影像邊界之外的值。

傳回:
out(M, N[, P]) ndarray

已濾波影像(所有尺度中像素的最大值)。

另請參閱

meijering
sato
frangi

注意事項

由 Marc Schrijver 編寫(2001 年 11 月)由 D. J. Kroon 重新編寫(特溫特大學,2009 年 5 月)[2]

參考資料

[1]

Ng, C. C., Yap, M. H., Costen, N., & Li, B. (2014,). Automatic wrinkle detection using hybrid Hessian filter. In Asian Conference on Computer Vision (pp. 609-622). Springer International Publishing. DOI:10.1007/978-3-319-16811-1_40

[2]

Kroon, D. J.: 基於 Hessian 的 Frangi 血管濾波器。

脊狀運算子

脊狀運算子

skimage.filters.laplace(image, ksize=3, mask=None)[原始碼]#

使用拉普拉斯算子找出影像的邊緣。

參數:
imagendarray

要處理的影像。

ksizeint,選填

定義離散拉普拉斯算子的大小,使其大小為 (ksize,) * image.ndim。

maskndarray,選填

一個可選的遮罩,用於限制應用到特定區域。請注意,遮罩區域周圍的像素也會被遮罩,以防止遮罩區域影響結果。

傳回:
outputndarray

拉普拉斯邊緣圖。

注意事項

拉普拉斯算子使用函式 skimage.restoration.uft.laplacian() 產生。


skimage.filters.median(image, footprint=None, out=None, mode='nearest', cval=0.0, behavior='ndimage')[原始碼]#

傳回影像的局部中位數。

參數:
image類陣列 (array-like)

輸入影像。

footprintndarray,選填

如果 behavior=='rank'footprint 是由 1 和 0 組成的二維陣列。 如果 behavior=='ndimage'footprint 是與 image 具有相同維度的由 1 和 0 組成的 N 維陣列。 如果為 None,則 footprint 將為每個維度具有 3 個元素的 N 維陣列 (例如,向量、正方形、立方體等)。

outndarray,(與 image 具有相同的 dtype),選填

如果為 None,則會分配一個新的陣列。

mode{‘reflect’, ‘constant’, ‘nearest’, ‘mirror’,’‘wrap’},選填

mode 參數決定如何處理陣列邊界,其中 cval 是當 mode 等於 ‘constant’ 時的值。預設值為 ‘nearest’。

在 0.15 版中新增: behavior='ndimage' 時會使用 mode

cval純量,可選

如果 mode 為 ‘constant’,則用於填充輸入邊緣外部的值。預設值為 0.0

在 0.15 版中新增: cval 是在 0.15 版中加入的,當 behavior='ndimage' 時會使用。

behavior{‘ndimage’, ‘rank’},選填

決定使用舊的行為 (即 < 0.15) 或新的行為。 舊的行為將會呼叫 skimage.filters.rank.median()。新的行為將會呼叫 scipy.ndimage.median_filter()。預設值為 ‘ndimage’。

在 0.15 版中新增: behavior 是在 0.15 版中引入的

在 0.16 版中變更: 預設的 behavior 已從 ‘rank’ 變更為 ‘ndimage’

傳回:
out二維陣列 (與輸入影像具有相同的 dtype)

輸出影像。

另請參閱

skimage.filters.rank.median

中值濾波的基於秩的實作,提供更高的彈性以及額外的參數,但專用於無符號整數影像。

範例

>>> from skimage import data
>>> from skimage.morphology import disk
>>> from skimage.filters import median
>>> img = data.camera()
>>> med = median(img, disk(5))

skimage.filters.meijering(image, sigmas=range(1, 10, 2), alpha=None, black_ridges=True, mode='reflect', cval=0)[原始碼]#

使用 Meijering 神經元濾波器過濾影像。

此濾波器可用於偵測連續的脊,例如神經突、皺紋、河流。它可用於計算包含此類物件的整個影像的比例。

計算 Hessian 的特徵值,根據 [1] 中描述的方法,計算影像區域與神經突的相似性。

參數:
image(M, N[, …]) ndarray

包含輸入影像資料的陣列。

sigmas浮點數的可迭代物件,可選

用作濾波器尺度的 Sigma 值

alpha浮點數,可選

形狀濾波器常數,選擇最大平面拉長特徵。預設值 None 選擇最佳值 -1/(ndim+1)。

black_ridges布林值,可選

當為 True(預設值)時,濾波器會偵測黑色脊狀結構;當為 False 時,它會偵測白色脊狀結構。

mode{‘constant’、‘reflect’、‘wrap’、‘nearest’、‘mirror’},可選

如何處理影像邊界之外的值。

cval浮點數,可選

與模式 'constant' 結合使用時,影像邊界之外的值。

傳回:
out(M, N[, …]) ndarray

已濾波影像(所有尺度中像素的最大值)。

另請參閱

sato
frangi
hessian

參考資料

[1]

Meijering, E., Jacob, M., Sarria, J. C., Steiner, P., Hirling, H., Unser, M. (2004). Design and validation of a tool for neurite tracing and analysis in fluorescence microscopy images. Cytometry Part A, 58(2), 167-176. DOI:10.1002/cyto.a.20022

脊狀運算子

脊狀運算子

skimage.filters.prewitt(image, mask=None, *, axis=None, mode='reflect', cval=0.0)[原始碼]#

使用 Prewitt 轉換找出邊緣強度。

參數:
image陣列

輸入影像。

mask布林值陣列,可選

將輸出影像剪輯到此遮罩。(mask=0 的值將設定為 0。)

axisint 或 int 序列,可選

沿此軸計算邊緣濾波器。如果未提供,則會計算邊緣幅度。其定義為

prw_mag = np.sqrt(sum([prewitt(image, axis=i)**2
                       for i in range(image.ndim)]) / image.ndim)

如果 axis 是序列,也會計算幅度。

modestr 或 str 序列,可選

捲積的邊界模式。有關模式的描述,請參閱 scipy.ndimage.convolve。這可以是單個邊界模式或每個軸一個邊界模式。

cval浮點數,可選

mode'constant' 時,這是用於影像資料邊界外的值的常數。

傳回:
output浮點數陣列

Prewitt 邊緣圖。

另請參閱

prewitt_hprewitt_v

水平和垂直邊緣偵測。

sobelscharrfaridskimage.feature.canny

注意事項

邊緣強度會稍微依賴邊緣方向,因為 Prewitt 算子對梯度算子的近似並非完全旋轉不變。為了獲得更好的旋轉不變性,應使用 Scharr 算子。Sobel 算子具有比 Prewitt 算子更好的旋轉不變性,但比 Scharr 算子差。

範例

>>> from skimage import data
>>> from skimage import filters
>>> camera = data.camera()
>>> edges = filters.prewitt(camera)

邊緣運算子

邊緣運算子

skimage.filters.prewitt_h(image, mask=None)[原始碼]#

使用 Prewitt 轉換找出影像的水平邊緣。

參數:
image二維陣列

要處理的影像。

mask二維陣列,可選

一個可選的遮罩,用於限制應用到特定區域。請注意,遮罩區域周圍的像素也會被遮罩,以防止遮罩區域影響結果。

傳回:
output二維陣列

Prewitt 邊緣圖。

注意事項

我們使用以下核心 (kernel)

 1/3   1/3   1/3
  0     0     0
-1/3  -1/3  -1/3

邊緣運算子

邊緣運算子

skimage.filters.prewitt_v(image, mask=None)[原始碼]#

使用 Prewitt 轉換找出影像的垂直邊緣。

參數:
image二維陣列

要處理的影像。

mask二維陣列,可選

一個可選的遮罩,用於限制應用到特定區域。請注意,遮罩區域周圍的像素也會被遮罩,以防止遮罩區域影響結果。

傳回:
output二維陣列

Prewitt 邊緣圖。

注意事項

我們使用以下核心 (kernel)

1/3   0  -1/3
1/3   0  -1/3
1/3   0  -1/3

邊緣運算子

邊緣運算子

skimage.filters.rank_order(image)[原始碼]#

傳回形狀相同的影像,其中每個像素都是 image 的唯一值以升序排列時,該像素值在其中的索引,也稱為排序值。

參數:
imagendarray
傳回:
labels無符號整數的 ndarray,形狀為 image.shape

新的陣列,其中每個像素都具有 image 中對應像素的秩序值。像素值介於 0 到 n - 1 之間,其中 n 是 image 中不同唯一值的數量。此陣列的 dtype 將由 np.min_scalar_type(image.size) 決定。

original_values一維 ndarray

image 的唯一原始值。這將具有與 image 相同的 dtype。

範例

>>> a = np.array([[1, 4, 5], [4, 4, 1], [5, 1, 1]])
>>> a
array([[1, 4, 5],
       [4, 4, 1],
       [5, 1, 1]])
>>> rank_order(a)
(array([[0, 1, 2],
       [1, 1, 0],
       [2, 0, 0]], dtype=uint8), array([1, 4, 5]))
>>> b = np.array([-1., 2.5, 3.1, 2.5])
>>> rank_order(b)
(array([0, 1, 2, 1], dtype=uint8), array([-1. ,  2.5,  3.1]))

skimage.filters.roberts(image, mask=None)[原始碼]#

使用羅伯茲交叉算子尋找邊緣強度。

參數:
image二維陣列

要處理的影像。

mask二維陣列,可選

一個可選的遮罩,用於限制應用到特定區域。請注意,遮罩區域周圍的像素也會被遮罩,以防止遮罩區域影響結果。

傳回:
output二維陣列

羅伯茲交叉邊緣圖。

另請參閱

roberts_pos_diagroberts_neg_diag

對角邊緣偵測。

sobelscharrprewittskimage.feature.canny

範例

>>> from skimage import data
>>> camera = data.camera()
>>> from skimage import filters
>>> edges = filters.roberts(camera)

邊緣運算子

邊緣運算子

skimage.filters.roberts_neg_diag(image, mask=None)[原始碼]#

使用羅伯茲交叉算子尋找影像的交叉邊緣。

將核心應用於輸入影像,以產生一個方向的梯度分量的單獨測量值。

參數:
image二維陣列

要處理的影像。

mask二維陣列,可選

一個可選的遮罩,用於限制應用到特定區域。請注意,遮罩區域周圍的像素也會被遮罩,以防止遮罩區域影響結果。

傳回:
output二維陣列

羅伯茲邊緣圖。

注意事項

我們使用以下核心 (kernel)

 0   1
-1   0

skimage.filters.roberts_pos_diag(image, mask=None)[原始碼]#

使用羅伯茲交叉算子尋找影像的交叉邊緣。

將核心應用於輸入影像,以產生一個方向的梯度分量的單獨測量值。

參數:
image二維陣列

要處理的影像。

mask二維陣列,可選

一個可選的遮罩,用於限制應用到特定區域。請注意,遮罩區域周圍的像素也會被遮罩,以防止遮罩區域影響結果。

傳回:
output二維陣列

羅伯茲邊緣圖。

注意事項

我們使用以下核心 (kernel)

1   0
0  -1

skimage.filters.sato(image, sigmas=range(1, 10, 2), black_ridges=True, mode='reflect', cval=0)[原始碼]#

使用 Sato 管狀濾波器過濾影像。

此濾波器可用於檢測連續的脊,例如管狀結構、皺紋、河流。它可以計算包含此類物件的整個影像的比例。

僅針對 2-D 和 3-D 影像定義。根據 [1] 中描述的方法,計算 Hessian 的特徵值,以計算影像區域與管狀結構的相似性。

參數:
image(M, N[, P]) ndarray

包含輸入影像資料的陣列。

sigmas浮點數的可迭代物件,可選

用作濾波器尺度的 Sigmas。

black_ridges布林值,可選

當為 True(預設值)時,濾波器會偵測黑色脊狀結構;當為 False 時,它會偵測白色脊狀結構。

mode{‘constant’、‘reflect’、‘wrap’、‘nearest’、‘mirror’},可選

如何處理影像邊界之外的值。

cval浮點數,可選

與模式 'constant' 結合使用時,影像邊界之外的值。

傳回:
out(M, N[, P]) ndarray

已濾波影像(所有尺度中像素的最大值)。

另請參閱

meijering
frangi
hessian

參考資料

[1]

Sato, Y., Nakajima, S., Shiraga, N., Atsumi, H., Yoshida, S., Koller, T., …, Kikinis, R. (1998). Three-dimensional multi-scale line filter for segmentation and visualization of curvilinear structures in medical images. Medical image analysis, 2(2), 143-168. DOI:10.1016/S1361-8415(98)80009-1

脊狀運算子

脊狀運算子

使用像素圖形尋找物件的測地中心

使用像素圖形尋找物件的測地中心

skimage.filters.scharr(image, mask=None, *, axis=None, mode='reflect', cval=0.0)[原始碼]#

使用 Scharr 轉換找出邊緣強度。

參數:
image陣列

輸入影像。

mask布林值陣列,可選

將輸出影像剪輯到此遮罩。(mask=0 的值將設定為 0。)

axisint 或 int 序列,可選

沿此軸計算邊緣濾波器。如果未提供,則會計算邊緣幅度。其定義為

sch_mag = np.sqrt(sum([scharr(image, axis=i)**2
                       for i in range(image.ndim)]) / image.ndim)

如果 axis 是序列,也會計算幅度。

modestr 或 str 序列,可選

捲積的邊界模式。有關模式的描述,請參閱 scipy.ndimage.convolve。這可以是單個邊界模式或每個軸一個邊界模式。

cval浮點數,可選

mode'constant' 時,這是用於影像資料邊界外的值的常數。

傳回:
output浮點數陣列

夏爾邊緣圖。

另請參閱

scharr_hscharr_v

水平和垂直邊緣偵測。

sobelprewittfaridskimage.feature.canny

注意事項

Scharr 算子比其他邊緣濾波器(如 Sobel 或 Prewitt 算子)具有更好的旋轉不變性。

參考資料

[1]

D. Kroon, 2009, Short Paper University Twente, Numerical Optimization of Kernel Based Image Derivatives.

範例

>>> from skimage import data
>>> from skimage import filters
>>> camera = data.camera()
>>> edges = filters.scharr(camera)

邊緣運算子

邊緣運算子

skimage.filters.scharr_h(image, mask=None)[原始碼]#

使用 Scharr 轉換找出影像的水平邊緣。

參數:
image二維陣列

要處理的影像。

mask二維陣列,可選

一個可選的遮罩,用於限制應用到特定區域。請注意,遮罩區域周圍的像素也會被遮罩,以防止遮罩區域影響結果。

傳回:
output二維陣列

夏爾邊緣圖。

注意事項

我們使用以下核心 (kernel)

 3   10   3
 0    0   0
-3  -10  -3

參考資料

[1]

D. Kroon, 2009, Short Paper University Twente, Numerical Optimization of Kernel Based Image Derivatives.

邊緣運算子

邊緣運算子

skimage.filters.scharr_v(image, mask=None)[原始碼]#

使用 Scharr 轉換找出影像的垂直邊緣。

參數:
image二維陣列

要處理的影像

mask二維陣列,可選

一個可選的遮罩,用於限制應用到特定區域。請注意,遮罩區域周圍的像素也會被遮罩,以防止遮罩區域影響結果。

傳回:
output二維陣列

夏爾邊緣圖。

注意事項

我們使用以下核心 (kernel)

 3   0   -3
10   0  -10
 3   0   -3

參考資料

[1]

D. Kroon, 2009, Short Paper University Twente, Numerical Optimization of Kernel Based Image Derivatives.

邊緣運算子

邊緣運算子

skimage.filters.sobel(image, mask=None, *, axis=None, mode='reflect', cval=0.0)[原始碼]#

使用 Sobel 濾波器找出影像中的邊緣。

參數:
image陣列

輸入影像。

mask布林值陣列,可選

將輸出影像剪輯到此遮罩。(mask=0 的值將設定為 0。)

axisint 或 int 序列,可選

沿此軸計算邊緣濾波器。如果未提供,則會計算邊緣幅度。其定義為

sobel_mag = np.sqrt(sum([sobel(image, axis=i)**2
                         for i in range(image.ndim)]) / image.ndim)

如果 axis 是序列,也會計算幅度。

modestr 或 str 序列,可選

捲積的邊界模式。有關模式的描述,請參閱 scipy.ndimage.convolve。這可以是單個邊界模式或每個軸一個邊界模式。

cval浮點數,可選

mode'constant' 時,這是用於影像資料邊界外的值的常數。

傳回:
output浮點數陣列

索貝爾邊緣圖。

另請參閱

sobel_hsobel_v

水平和垂直邊緣偵測。

scharrprewittfaridskimage.feature.canny

參考資料

[1]

D. Kroon, 2009, Short Paper University Twente, Numerical Optimization of Kernel Based Image Derivatives.

範例

>>> from skimage import data
>>> from skimage import filters
>>> camera = data.camera()
>>> edges = filters.sobel(camera)

將灰階濾波器調整為 RGB 影像

將灰階濾波器調整為 RGB 影像

邊緣運算子

邊緣運算子

遲滯閾值處理

遲滯閾值處理

基於區域邊界的區域鄰接圖 (RAG)

基於區域邊界的區域鄰接圖 (RAG)

使用緊湊分水嶺尋找規則區段

使用緊湊分水嶺尋找規則區段

在不重疊的情況下擴展分割標籤

在不重疊的情況下擴展分割標籤

分割和超像素演算法的比較

分割和超像素演算法的比較

尋找兩個分割的交集

尋找兩個分割的交集

區域邊界 RAG 的階層式合併

區域邊界 RAG 的階層式合併

填滿

填滿

評估分割指標

評估分割指標

比較基於邊緣和基於區域的分割

比較基於邊緣和基於區域的分割

skimage.filters.sobel_h(image, mask=None)[原始碼]#

使用 Sobel 轉換找出影像的水平邊緣。

參數:
image二維陣列

要處理的影像。

mask二維陣列,可選

一個可選的遮罩,用於限制應用到特定區域。請注意,遮罩區域周圍的像素也會被遮罩,以防止遮罩區域影響結果。

傳回:
output二維陣列

索貝爾邊緣圖。

注意事項

我們使用以下核心 (kernel)

 1   2   1
 0   0   0
-1  -2  -1

邊緣運算子

邊緣運算子

skimage.filters.sobel_v(image, mask=None)[原始碼]#

使用 Sobel 轉換找出影像的垂直邊緣。

參數:
image二維陣列

要處理的影像。

mask二維陣列,可選

一個可選的遮罩,用於限制應用到特定區域。請注意,遮罩區域周圍的像素也會被遮罩,以防止遮罩區域影響結果。

傳回:
output二維陣列

索貝爾邊緣圖。

注意事項

我們使用以下核心 (kernel)

1   0  -1
2   0  -2
1   0  -1

邊緣運算子

邊緣運算子

skimage.filters.threshold_isodata(image=None, nbins=256, return_all=False, *, hist=None)[原始碼]#

傳回基於 ISODATA 方法的閾值。

基於直方圖的閾值,稱為 Ridler-Calvard 方法或中間均值。傳回的閾值滿足以下等式

threshold = (image[image <= threshold].mean() +
             image[image > threshold].mean()) / 2.0

也就是說,傳回的閾值是將影像分成兩組像素的強度,其中閾值強度位於這些組的平均強度之間的中間。

對於整數影像,上述等式在一個單位內成立;對於浮點影像,等式在直方圖箱寬內成立。

必須提供影像或 hist。如果提供 hist,則會忽略影像的實際直方圖。

參數:
image(M, N[, …]) ndarray

灰階輸入影像。

nbinsint,可選

用於計算直方圖的 bin 數量。對於整數陣列,此值會被忽略。

return_allbool,可選

如果為 False (預設值),則僅傳回滿足上述等式的最低閾值。如果為 True,則傳回所有有效的閾值。

hist陣列,或陣列的 2 個元組,可選

用於確定閾值的直方圖和相應的 bin 中心強度陣列。或者,只能傳遞直方圖。

傳回:
threshold浮點數或整數或陣列

閾值。

參考資料

[1]

Ridler, TW & Calvard, S (1978), “Picture thresholding using an iterative selection method” IEEE Transactions on Systems, Man and Cybernetics 8: 630-632, DOI:10.1109/TSMC.1978.4310039

[2]

Sezgin M. 和 Sankur B. (2004) “影像閾值技術與定量效能評估綜述”《電子影像期刊》,13(1): 146-165,http://www.busim.ee.boun.edu.tr/~sankur/SankurFolder/Threshold_survey.pdf DOI:10.1117/1.1631315

[3]

ImageJ 自動閾值程式碼,http://fiji.sc/wiki/index.php/Auto_Threshold

範例

>>> from skimage.data import coins
>>> image = coins()
>>> thresh = threshold_isodata(image)
>>> binary = image > thresh

skimage.filters.threshold_li(image, *, tolerance=None, initial_guess=None, iter_callback=None)[原始碼]#

透過李氏迭代最小交叉熵方法計算閾值。

參數:
image(M, N[, …]) ndarray

灰階輸入影像。

tolerance浮點數,選填

當迭代中閾值的變化小於此值時,完成計算。預設情況下,這是 image 中強度值之間最小差異的一半。

initial_guess浮點數或可呼叫物件 (Callable[[array[float]], float]),選填

李氏迭代方法使用梯度下降來尋找最佳閾值。如果影像強度直方圖包含兩個以上的模態(峰值),則梯度下降可能會陷入局部最佳解。迭代的初始猜測可以幫助演算法找到全域最佳閾值。浮點數值定義了一個特定的起點,而可呼叫物件應接收影像強度的陣列並回傳浮點數值。有效的可呼叫物件範例包括 numpy.mean (預設值)、lambda arr: numpy.quantile(arr, 0.95),甚至是 skimage.filters.threshold_otsu()

iter_callback可呼叫物件 (Callable[[float], Any]),選填

在演算法的每次迭代中,都會對閾值呼叫的函式。

傳回:
threshold浮點數

上限閾值。所有強度高於此值的像素都被視為前景。

參考資料

[1]

Li C.H. 和 Lee C.K. (1993) “最小交叉熵閾值化”《模式辨識》,26(4): 617-625 DOI:10.1016/0031-3203(93)90115-D

[2]

Li C.H. 和 Tam P.K.S. (1998) “最小交叉熵閾值化的迭代演算法”《模式辨識快報》,18(8): 771-776 DOI:10.1016/S0167-8655(98)00057-9

[3]

Sezgin M. 和 Sankur B. (2004) “影像閾值技術與定量效能評估綜述”《電子影像期刊》,13(1): 146-165 DOI:10.1117/1.1631315

[4]

ImageJ 自動閾值程式碼,http://fiji.sc/wiki/index.php/Auto_Threshold

範例

>>> from skimage.data import camera
>>> image = camera()
>>> thresh = threshold_li(image)
>>> binary = image > thresh

移除物件

移除物件

李氏閾值化

李氏閾值化

skimage.filters.threshold_local(image, block_size=3, method='gaussian', offset=0, mode='reflect', param=None, cval=0)[原始碼]#

根據局部像素鄰域計算閾值遮罩影像。

也稱為自適應或動態閾值化。閾值是像素局部鄰域的加權平均值減去一個常數。或者,可以使用 'generic' 方法透過給定的函式動態確定閾值。

參數:
image(M, N[, …]) ndarray

灰階輸入影像。

block_size整數或整數序列

用於計算閾值的像素鄰域的奇數大小(例如:3、5、7、…、21、…)。

method{‘generic’, ‘gaussian’, ‘mean’, ‘median’},選填

用於在加權平均影像中確定局部鄰域的自適應閾值的方法。

  • ‘generic’:使用自訂函式(請參閱 param 參數)

  • ‘gaussian’:套用高斯濾波器(請參閱 param 參數以取得自訂 sigma 值)

  • ‘mean’:套用算術平均濾波器

  • ‘median’:套用中值排序濾波器

預設情況下,使用 ‘gaussian’ 方法。

offsetfloat,可選

從鄰域的加權平均值中減去的常數,以計算局部閾值。預設偏移量為 0。

mode{‘reflect’, ‘constant’, ‘nearest’, ‘mirror’, ‘wrap’},可選

mode 參數決定如何處理陣列邊界,其中 cval 是 mode 等於 'constant' 時的值。預設值為 'reflect'。

param{整數、函式},選填

指定 ‘gaussian’ 方法的 sigma 或 ‘generic’ 方法的函式物件。此函式將局部鄰域的扁平陣列作為單一引數,並回傳中心像素的計算閾值。

cval浮點數,可選

如果 mode 為 ‘constant’,則填入輸入邊緣的值。

傳回:
threshold(M, N[, …]) ndarray

閾值影像。輸入影像中所有高於閾值影像中對應像素的像素都被視為前景。

參考資料

[1]

Gonzalez, R. C. 和 Wood, R. E. “數位影像處理(第二版)。”Prentice-Hall Inc., 2002: 600–612。ISBN: 0-201-18075-8

範例

>>> from skimage.data import camera
>>> image = camera()[:50, :50]
>>> binary_image1 = image > threshold_local(image, 15, 'mean')
>>> func = lambda arr: arr.mean()
>>> binary_image2 = image > threshold_local(image, 15, 'generic',
...                                         param=func)

使用影像修復還原斑點角膜影像

使用影像修復還原斑點角膜影像

閾值化

閾值化

skimage.filters.threshold_mean(image)[原始碼]#

傳回基於灰度值平均值的閾值。

參數:
image(M, N[, …]) ndarray

灰階輸入影像。

傳回:
threshold浮點數

上限閾值。所有強度高於此值的像素都被視為前景。

參考資料

[1]

C. A. Glasbey, “直方圖式閾值化演算法分析,”CVGIP: 圖形模型與影像處理,第 55 卷,第 532-537 頁,1993 年。DOI:10.1006/cgip.1993.1040

範例

>>> from skimage.data import camera
>>> image = camera()
>>> thresh = threshold_mean(image)
>>> binary = image > thresh

閾值化

閾值化

skimage.filters.threshold_minimum(image=None, nbins=256, max_num_iter=10000, *, hist=None)[原始碼]#

傳回基於最小值方法的閾值。

如果未提供,則會計算輸入 image 的直方圖,並進行平滑處理,直到只有兩個最大值。然後,兩者之間的最小值是閾值。

必須提供影像或 hist。如果提供 hist,則會忽略影像的實際直方圖。

參數:
image(M, N[, …]) ndarray,選填

灰階輸入影像。

nbinsint,可選

用於計算直方圖的 bin 數量。對於整數陣列,此值會被忽略。

max_num_iter整數,選填

平滑直方圖的最大迭代次數。

hist陣列,或陣列的 2 個元組,可選

用於確定閾值的直方圖和相應的 bin 中心強度陣列。或者,只能傳遞直方圖。

傳回:
threshold浮點數

上限閾值。所有強度高於此值的像素都被視為前景。

引發:
RuntimeError

如果無法在直方圖中找到兩個局部最大值,或平滑處理的迭代次數超過 1e4 次。

參考資料

[1]

C. A. Glasbey, “直方圖式閾值化演算法分析,”CVGIP: 圖形模型與影像處理,第 55 卷,第 532-537 頁,1993 年。

[2]

Prewitt, JMS & Mendelsohn, ML (1966), “細胞影像分析”,《紐約科學院年報》128: 1035-1053 DOI:10.1111/j.1749-6632.1965.tb11715.x

範例

>>> from skimage.data import camera
>>> image = camera()
>>> thresh = threshold_minimum(image)
>>> binary = image > thresh

閾值化

閾值化

追蹤金屬合金的凝固過程

追蹤金屬合金的凝固過程

skimage.filters.threshold_multiotsu(image=None, classes=3, nbins=256, *, hist=None)[原始碼]#

產生 classes-1 個閾值,以根據 Otsu 的多類別方法劃分 image 中的灰階。

選擇閾值以最大化閾值灰階類別之間成對變異數的總和。如需更多詳細資訊,請參閱註解和 [1]

必須提供影像或 hist。如果提供 hist,則會忽略影像的實際直方圖。

參數:
image(M, N[, …]) ndarray,選填

灰階輸入影像。

classes整數,選填

要閾值的類別數,即產生的區域數。

nbinsint,可選

用於計算直方圖的 bin 數。此值會被整數陣列忽略。

hist陣列,或陣列的 2 個元組,可選

從中確定閾值的直方圖,以及選擇性的 bin 中心強度對應陣列。如果未提供 hist,此函式將會從影像中計算它(請參閱註解)。

傳回:
thresh陣列

包含所需類別閾值的陣列。

引發:
ValueError

如果 image 包含的灰階值少於所需的類別數。

注意事項

此實作依賴於 Cython 函式,其複雜度為 \(O\left(\frac{Ch^{C-1}}{(C-1)!}\right)\),其中 \(h\) 是直方圖 bin 的數量,而 \(C\) 是所需的類別數。

如果未提供直方圖 (hist),此函數將使用 skimage.exposure.histogram,其行為與 np.histogram 不同。雖然兩者都允許,但為了行為一致,請使用前者。

輸入影像必須為灰階影像。

參考資料

[1]

Liao, P-S., Chen, T-S. 和 Chung, P-C., “A fast algorithm for multilevel thresholding”, Journal of Information Science and Engineering 17 (5): 713-727, 2001. 可於以下網址取得:<https://ftp.iis.sinica.edu.tw/JISE/2001/200109_01.pdf> DOI:10.6688/JISE.2001.17.5.1

[2]

Tosa, Y., “Multi-Otsu Threshold”, ImageJ 的 Java 外掛程式。可於以下網址取得:<http://imagej.net/plugins/download/Multi_OtsuThreshold.java>

範例

>>> from skimage.color import label2rgb
>>> from skimage import data
>>> image = data.camera()
>>> thresholds = threshold_multiotsu(image)
>>> regions = np.digitize(image, bins=thresholds)
>>> regions_colorized = label2rgb(regions)

多重 Otsu 閾值處理

多重 Otsu 閾值處理

使用像素圖形尋找物件的測地中心

使用像素圖形尋找物件的測地中心

分割人類細胞(有絲分裂中)

分割人類細胞(有絲分裂中)

skimage.filters.threshold_niblack(image, window_size=15, k=0.2)[原始碼]#

將 Niblack 局部閾值套用於陣列。

使用以下公式計算影像中每個像素的閾值 T

T = m(x,y) - k * s(x,y)

其中 m(x,y) 和 s(x,y) 是像素 (x,y) 周圍由大小為 w 乘以 w 的矩形視窗定義的鄰域的平均值和標準差。k 是可配置的參數,會加權標準差的影響。

參數:
image(M, N[, …]) ndarray

灰階輸入影像。

window_sizeint,或 int 的可迭代物件,選用

視窗大小指定為單一奇數整數 (3, 5, 7, …),或長度為 image.ndim 且僅包含奇數整數的可迭代物件(例如 (1, 5, 5))。

kfloat,選用

閾值公式中參數 k 的值。

傳回:
threshold(M, N[, …]) ndarray

閾值遮罩。所有強度高於此值的像素都假設為前景。

注意事項

此演算法最初設計用於文字辨識。

Bradley 閾值是 Niblack 閾值的特例,等同於

>>> from skimage import data
>>> image = data.page()
>>> q = 1
>>> threshold_image = threshold_niblack(image, k=0) * q

對於某些值 q。預設情況下,Bradley 和 Roth 使用 q=1

參考資料

[1]

W. Niblack, An introduction to Digital Image Processing, Prentice-Hall, 1986.

[2]

D. Bradley 和 G. Roth, “Adaptive thresholding using Integral Image”, Journal of Graphics Tools 12(2), pp. 13-21, 2007. DOI:10.1080/2151237X.2007.10129236

範例

>>> from skimage import data
>>> image = data.page()
>>> threshold_image = threshold_niblack(image, window_size=7, k=0.1)

Niblack 和 Sauvola 閾值處理

Niblack 和 Sauvola 閾值處理

skimage.filters.threshold_otsu(image=None, nbins=256, *, hist=None)[原始碼]#

根據 Otsu 方法傳回閾值。

必須提供影像或 hist。如果提供 hist,則會忽略影像的實際直方圖。

參數:
image(M, N[, …]) ndarray,選填

灰階輸入影像。

nbinsint,可選

用於計算直方圖的 bin 數量。對於整數陣列,此值會被忽略。

hist陣列,或陣列的 2 個元組,可選

用於決定閾值的直方圖,以及可選的對應的 bin 中心強度陣列。如果沒有提供直方圖,此函數將從影像計算直方圖。

傳回:
threshold浮點數

上限閾值。所有強度高於此值的像素都被視為前景。

注意事項

輸入影像必須為灰階影像。

參考資料

範例

>>> from skimage.data import camera
>>> image = camera()
>>> thresh = threshold_otsu(image)
>>> binary = image <= thresh

閾值化

閾值化

Niblack 和 Sauvola 閾值處理

Niblack 和 Sauvola 閾值處理

標記影像區域

標記影像區域

測量區域屬性

測量區域屬性

共定位指標

共定位指標

閾值化

閾值化

測量核膜上的螢光強度

測量核膜上的螢光強度

排序篩選器

排序篩選器

skimage.filters.threshold_sauvola(image, window_size=15, k=0.2, r=None)[原始碼]#

將 Sauvola 局部閾值套用至陣列。Sauvola 是 Niblack 技術的修改版本。

在原始方法中,使用以下公式計算影像中每個像素的閾值 T

T = m(x,y) * (1 + k * ((s(x,y) / R) - 1))

其中 m(x,y) 和 s(x,y) 是像素 (x,y) 周圍由大小為 w 乘以 w 的矩形視窗定義的鄰域的平均值和標準差。k 是可配置的參數,會加權標準差的影響。R 是灰階影像的最大標準差。

參數:
image(M, N[, …]) ndarray

灰階輸入影像。

window_sizeint,或 int 的可迭代物件,選用

視窗大小指定為單一奇數整數 (3, 5, 7, …),或長度為 image.ndim 且僅包含奇數整數的可迭代物件(例如 (1, 5, 5))。

kfloat,選用

正參數 k 的值。

rfloat,選用

R 的值,標準差的動態範圍。如果為 None,則設定為影像 dtype 範圍的一半。

傳回:
threshold(M, N[, …]) ndarray

閾值遮罩。所有強度高於此值的像素都假設為前景。

注意事項

此演算法最初設計用於文字辨識。

參考資料

[1]

J. Sauvola 和 M. Pietikainen, “Adaptive document image binarization,” Pattern Recognition 33(2), pp. 225-236, 2000. DOI:10.1016/S0031-3203(99)00055-2

範例

>>> from skimage import data
>>> image = data.page()
>>> t_sauvola = threshold_sauvola(image, window_size=15, k=0.2)
>>> binary_image = image > t_sauvola

Niblack 和 Sauvola 閾值處理

Niblack 和 Sauvola 閾值處理

skimage.filters.threshold_triangle(image, nbins=256)[原始碼]#

傳回基於三角形演算法的閾值。

參數:
image(M, N[, …]) ndarray

灰階輸入影像。

nbinsint,可選

用於計算直方圖的 bin 數量。對於整數陣列,此值會被忽略。

傳回:
threshold浮點數

上限閾值。所有強度高於此值的像素都被視為前景。

參考資料

[1]

Zack, G. W., Rogers, W. E. 和 Latt, S. A., 1977, Automatic Measurement of Sister Chromatid Exchange Frequency, Journal of Histochemistry and Cytochemistry 25 (7), pp. 741-753 DOI:10.1177/25.7.70454

[2]

ImageJ 自動閾值程式碼,http://fiji.sc/wiki/index.php/Auto_Threshold

範例

>>> from skimage.data import camera
>>> image = camera()
>>> thresh = threshold_triangle(image)
>>> binary = image > thresh

skimage.filters.threshold_yen(image=None, nbins=256, *, hist=None)[原始碼]#

根據 Yen 方法傳回閾值。必須提供影像或直方圖。如果提供直方圖,則會忽略影像的實際直方圖。

參數:
image(M, N[, …]) ndarray

灰階輸入影像。

nbinsint,可選

用於計算直方圖的 bin 數量。對於整數陣列,此值會被忽略。

hist陣列,或陣列的 2 個元組,可選

用於決定閾值的直方圖,以及可選的對應的 bin 中心強度陣列。此函數的另一個用途是僅傳遞直方圖。

傳回:
threshold浮點數

上限閾值。所有強度高於此值的像素都被視為前景。

參考資料

[1]

Yen J.C., Chang F.J., 和 Chang S. (1995) “A New Criterion for Automatic Multilevel Thresholding” IEEE Trans. on Image Processing, 4(3): 370-378. DOI:10.1109/83.366472

[2]

Sezgin M. 和 Sankur B. (2004) “Survey over Image Thresholding Techniques and Quantitative Performance Evaluation” Journal of Electronic Imaging, 13(1): 146-165, DOI:10.1117/1.1631315 http://www.busim.ee.boun.edu.tr/~sankur/SankurFolder/Threshold_survey.pdf

[3]

ImageJ 自動閾值程式碼,http://fiji.sc/wiki/index.php/Auto_Threshold

範例

>>> from skimage.data import camera
>>> image = camera()
>>> thresh = threshold_yen(image)
>>> binary = image <= thresh

skimage.filters.try_all_threshold(image, figsize=(8, 5), verbose=True)[原始碼]#

傳回比較不同閾值處理方法輸出的圖形。

參數:
image(M, N) ndarray

輸入影像。

figsizetuple,選用

圖形大小(以英吋為單位)。

verbosebool,選用

針對每個方法列印函數名稱。

傳回:
fig, axtuple

Matplotlib 圖形和軸。

注意事項

使用下列演算法

  • isodata

  • li

  • mean

  • minimum

  • otsu

  • triangle

  • yen

範例

>>> from skimage.data import text
>>> fig, ax = try_all_threshold(text(), figsize=(10, 6), verbose=False)

閾值化

閾值化

閾值化

閾值化

skimage.filters.unsharp_mask(image, radius=1.0, amount=1.0, preserve_range=False, *, channel_axis=None)[原始碼]#

非銳化遮罩濾波器。

銳利細節被識別為原始影像與其模糊版本之間的差異。然後會縮放這些細節,並加回原始影像。

參數:
image(M[, …][, C]) ndarray

輸入影像。

radius純量或純量序列,選用

如果提供純量,則其值會用於所有維度。如果提供序列,則除了多通道影像的最後一個維度之外,每個維度都必須有一個半徑。請注意,半徑 0 表示不模糊,且不允許負值。

amount純量,選用

細節將使用此因子放大。該因子可以是 0 或負數。通常,它是個小的正數,例如 1.0。

preserve_rangebool,可選

是否保留原始值範圍。否則,會根據 img_as_float 的慣例轉換輸入影像。另請參閱 https://scikit-image.dev.org.tw/docs/dev/user_guide/data_types.html

channel_axisint 或 None,可選

如果為 None,則假設影像為灰階(單通道)影像。否則,此參數指示陣列的哪個軸對應於通道。

在版本 0.19 中新增: channel_axis 在 0.19 中新增。

傳回:
output(M[, …][, C]) float 的 ndarray

套用非銳化遮罩的影像。

注意事項

非銳化遮罩是一種影像銳化技術。它是一種線性影像運算,且數值穩定,這與不適定問題的反摺積不同。由於這種穩定性,它通常比反摺積更受青睞。

主要概念如下:銳利細節被識別為原始影像與其模糊版本之間的差異。在縮放步驟後,這些細節會加回原始影像

增強影像 = 原始影像 + amount * (原始影像 - 模糊影像)

當將此濾鏡獨立應用於數個色彩圖層時,可能會發生色彩溢色(color bleeding)現象。若僅處理適當色彩空間(例如 HSV、HSL、YUV 或 YCbCr)中的亮度/明度/強度通道,則可獲得更視覺上令人愉悅的結果。

在大多數數位影像處理入門書籍中都有描述非銳化遮罩(Unsharp masking)。此實作基於 [1]

參考資料

[1]

Maria Petrou, Costas Petrou “Image Processing: The Fundamentals”, (2010), ed ii., page 357, ISBN 13: 9781119994398 DOI:10.1002/9781119994398

[2]

維基百科。非銳化遮罩 https://en.wikipedia.org/wiki/Unsharp_masking

範例

>>> array = np.ones(shape=(5,5), dtype=np.uint8)*100
>>> array[2,2] = 120
>>> array
array([[100, 100, 100, 100, 100],
       [100, 100, 100, 100, 100],
       [100, 100, 120, 100, 100],
       [100, 100, 100, 100, 100],
       [100, 100, 100, 100, 100]], dtype=uint8)
>>> np.around(unsharp_mask(array, radius=0.5, amount=2),2)
array([[0.39, 0.39, 0.39, 0.39, 0.39],
       [0.39, 0.39, 0.38, 0.39, 0.39],
       [0.39, 0.38, 0.53, 0.38, 0.39],
       [0.39, 0.39, 0.38, 0.39, 0.39],
       [0.39, 0.39, 0.39, 0.39, 0.39]])
>>> array = np.ones(shape=(5,5), dtype=np.int8)*100
>>> array[2,2] = 127
>>> np.around(unsharp_mask(array, radius=0.5, amount=2),2)
array([[0.79, 0.79, 0.79, 0.79, 0.79],
       [0.79, 0.78, 0.75, 0.78, 0.79],
       [0.79, 0.75, 1.  , 0.75, 0.79],
       [0.79, 0.78, 0.75, 0.78, 0.79],
       [0.79, 0.79, 0.79, 0.79, 0.79]])
>>> np.around(unsharp_mask(array, radius=0.5, amount=2, preserve_range=True), 2)
array([[100.  , 100.  ,  99.99, 100.  , 100.  ],
       [100.  ,  99.39,  95.48,  99.39, 100.  ],
       [ 99.99,  95.48, 147.59,  95.48,  99.99],
       [100.  ,  99.39,  95.48,  99.39, 100.  ],
       [100.  , 100.  ,  99.99, 100.  , 100.  ]])

非銳化遮罩

非銳化遮罩

skimage.filters.wiener(data, impulse_response=None, filter_params=None, K=0.25, predefined_filter=None)[原始碼]#

最小均方誤差 (維納) 反向濾波器。

參數:
data(M, N) ndarray

輸入資料。

Kfloat 或 (M, N) ndarray

雜訊功率譜與未降級影像的功率譜之比率。

impulse_response可呼叫 f(r, c, **filter_params)

濾波器的脈衝響應。請參閱 LPIFilter2D.__init__。

filter_paramsdict,可選

脈衝響應函數的額外關鍵字參數。

其他參數:
predefined_filterLPIFilter2D

如果您需要對不同的影像多次應用相同的濾波器,請建構 LPIFilter2D 並在此處指定。


skimage.filters.window(window_type, shape, warp_kwargs=None)[原始碼]#

傳回給定大小和維度的 n 維視窗。

參數:
window_type字串、浮點數或元組

要建立的視窗類型。此處允許使用 scipy.signal.get_window 支援的任何視窗類型。有關當前列表,請參閱下面的說明,或參閱您機器上 SciPy 版本的 SciPy 文件。

shape整數或整數元組

視窗沿每個軸的形狀。如果提供一個整數,則會產生一個 1D 視窗。

warp_kwargs字典

傳遞給 skimage.transform.warp 的關鍵字參數(例如,warp_kwargs={'order':3} 以更改插值方法)。

傳回:
nd_windowndarray

指定 shape 的視窗。dtypenp.float64

注意事項

此函數基於 scipy.signal.get_window,因此可以存取該函數可用的所有視窗類型(例如,"hann""boxcar")。請注意,某些視窗類型需要以元組形式與視窗名稱一起提供的參數(例如,("tukey", 0.8))。如果僅提供浮點數,則將其解釋為 Kaiser 視窗的 beta 參數。

有關更多詳細資訊,請參閱 https://scipy-docs.dev.org.tw/doc/scipy/reference/generated/scipy.signal.windows.get_window.html

請注意,此函數會產生指定 shape 的雙精度陣列,因此會產生佔用大量可用記憶體的非常大的陣列。

此處用於建立 nD 視窗的方法是首先計算從預期 nD 視窗的中心到陣列中每個位置的歐幾里得距離。該距離用於透過插值從 scipy.signal.get_window 傳回的 1D 視窗取樣。可以使用傳遞給 skimage.transform.warporder 關鍵字參數來更改插值方法。

輸出視窗中的某些座標將位於原始訊號之外;這些將用零填充。

視窗類型: - boxcar - triang - blackman - hamming - hann - bartlett - flattop - parzen - bohman - blackmanharris - nuttall - barthann - kaiser(需要 beta) - gaussian(需要標準差) - general_gaussian(需要功率、寬度) - slepian(需要寬度) - dpss(需要正規化的半頻寬) - chebwin(需要衰減) - exponential(需要衰減尺度) - tukey(需要錐形分數)

參考資料

[1]

二維視窗設計,維基百科,https://en.wikipedia.org/wiki/Two_dimensional_window_design

範例

傳回形狀為 (512, 512) 的 Hann 視窗

>>> from skimage.filters import window
>>> w = window('hann', (512, 512))

傳回 beta 參數為 16 且形狀為 (256, 256, 35) 的 Kaiser 視窗

>>> w = window(16, (256, 256, 35))

傳回 alpha 參數為 0.8 且形狀為 (100, 300) 的 Tukey 視窗

>>> w = window(('tukey', 0.8), (100, 300))

使用極座標和對數極座標變換進行配準

使用極座標和對數極座標變換進行配準

將視窗函數與影像一起使用

將視窗函數與影像一起使用

高斯差分的帶通濾波

高斯差分的帶通濾波
class skimage.filters.LPIFilter2D(impulse_response, **filter_params)[原始碼]#

基礎:object

線性位置不變濾波器(二維)

__init__(impulse_response, **filter_params)[原始碼]#
參數:
impulse_response可呼叫 f(r, c, **filter_params)

產生脈衝響應的函數。rc 是代表行和列位置的一維向量,換句話說,座標為 (r[0],c[0])、(r[0],c[1]) 等。**filter_params 會被傳遞。

換句話說,impulse_response 將會被這樣呼叫

>>> def impulse_response(r, c, **filter_params):
...     pass
>>>
>>> r = [0,0,0,1,1,1,2,2,2]
>>> c = [0,1,2,0,1,2,0,1,2]
>>> filter_params = {'kw1': 1, 'kw2': 2, 'kw3': 3}
>>> impulse_response(r, c, **filter_params)

範例

未標準化係數的高斯濾波器

>>> def filt_func(r, c, sigma=1):
...     return np.exp(-(r**2 + c**2)/(2 * sigma**2))
>>> filter = LPIFilter2D(filt_func)