skimage.filters
#
将滞后阈值应用于 |
|
应用巴特沃斯滤波器以增强高频或低频特征。 |
|
计算 padded_array 和 kernel 的有效互相关。 |
|
查找大小在 |
|
使用法里德变换查找边缘幅度。 |
|
使用法里德变换查找图像的水平边缘。 |
|
使用法里德变换查找图像的垂直边缘。 |
|
将给定的滤波器应用于数据。 |
|
将滤波器反向应用于给定的数据。 |
|
使用 Frangi 血管度滤波器对图像进行滤波。 |
|
返回对 Gabor 滤波器的实部和虚部响应。 |
|
返回复数 2D Gabor 滤波器核。 |
|
多维高斯滤波器。 |
|
使用混合 Hessian 滤波器对图像进行滤波。 |
|
使用拉普拉斯算子查找图像的边缘。 |
|
返回图像的局部中值。 |
|
使用 Meijering 神经度滤波器对图像进行滤波。 |
|
使用 Prewitt 变换查找边缘幅度。 |
|
使用 Prewitt 变换查找图像的水平边缘。 |
|
使用 Prewitt 变换查找图像的垂直边缘。 |
|
返回一个与形状相同的图像,其中每个像素是像素值在 |
|
使用 Roberts 十字交叉算子查找边缘幅度。 |
|
使用 Roberts 十字交叉算子查找图像的交叉边缘。 |
|
使用 Roberts 十字交叉算子查找图像的交叉边缘。 |
|
使用 Sato 管状度滤波器对图像进行滤波。 |
|
使用 Scharr 变换查找边缘幅度。 |
|
使用 Scharr 变换查找图像的水平边缘。 |
|
使用 Scharr 变换查找图像的垂直边缘。 |
|
使用 Sobel 滤波器查找图像中的边缘。 |
|
使用 Sobel 变换查找图像的水平边缘。 |
|
使用 Sobel 变换查找图像的垂直边缘。 |
|
基于 ISODATA 方法返回阈值。 |
|
通过 Li 的迭代最小交叉熵方法计算阈值。 |
|
基于局部像素邻域计算阈值掩码图像。 |
|
基于灰度值的平均值返回阈值。 |
|
基于最小值方法返回阈值。 |
|
生成 classes-1 个阈值,以根据 Otsu 的多类方法划分 image 中的灰度级。 |
|
将 Niblack 局部阈值应用于数组。 |
|
基于 Otsu 方法返回阈值。 |
|
将 Sauvola 局部阈值应用于数组。 |
|
基于三角形算法返回阈值。 |
|
基于 Yen 的方法返回阈值。 |
|
返回一个比较不同阈值方法输出的图形。 |
|
锐化遮罩滤波器。 |
|
最小均方误差 (Wiener) 逆滤波器。 |
|
返回给定大小和维度的 n 维窗口。 |
|
线性位置不变滤波器 (二维) |
|
- skimage.filters.apply_hysteresis_threshold(image, low, high)[source]#
将滞后阈值应用于
image
。该算法查找
image
大于high
或image
大于low
且该区域连接到大于high
的区域的区域。- 参数:
- image(M[, …]) ndarray
灰度输入图像。
- lowfloat,或与
image
形状相同的数组 较低的阈值。
- highfloat,或与
image
形状相同的数组 较高的阈值。
- 返回:
- thresholded(M[, …]) bool 数组
数组中
True
指示image
超过滞后阈值的位置。
参考文献
[1]J. Canny。边缘检测的计算方法。IEEE 模式分析与机器智能汇刊。1986 年;第 8 卷,第 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)[source]#
应用巴特沃斯滤波器以增强高频或低频特征。
此滤波器在傅立叶域中定义。
- 参数:
- 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.pad
的mode='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\) 是滤波器的 阶数 [1]。当squared_butterworth=False
时,使用上述表达式的平方根。请注意,
cutoff_frequency_ratio
是根据采样频率 \(f_s\) 定义的。FFT 频谱覆盖奈奎斯特范围 (\([-f_s/2, f_s/2]\)),因此cutoff_frequency_ratio
的值应介于 0 到 0.5 之间。当squared_butterworth
为真时,截止频率的频率响应(增益)为 0.5,当为假时,频率响应(增益)为 \(1/\sqrt{2}\)。参考文献
[2]Birchfield,Stan。图像处理与分析。2018 年。Cengage 学习。
[3]Butterworth,Stephen。“关于滤波放大器理论的探讨”。《无线工程师》第 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')[source]#
计算 padded_array 和 kernel 的有效互相关。
当 kernel 很大且包含许多零时,此函数很快。
有关互相关的说明,请参见
scipy.ndimage.correlate
。- 参数:
- imagendarray,dtype 为浮点数,形状为 (M, N[, …], P)
输入数组。如果 mode 为 ‘valid’,则此数组应已填充,因为与 kernel 形状相同的边距将被剥离。
- kernelndarray,dtype 为浮点数,形状为 (Q, R[, …], S)
要关联的内核。必须与 padded_array 具有相同数量的维度。为了提高性能,它应该很稀疏(很少有非零条目)。
- mode字符串,可选
有关有效模式,请参见
scipy.ndimage.correlate
。此外,接受模式 ‘valid’,在这种情况下,不应用任何填充,结果是内核完全位于原始数据内的较小图像的结果。
- 返回:
- result浮点数数组,形状为 (M, N[, …], P)
image 与 kernel 进行互相关后的结果。如果使用模式 ‘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)[source]#
查找大小在
low_sigma
和high_sigma
之间的特征。此函数使用高斯差方法将带通滤波器应用于多维数组。输入数组用两个不同 sigma 的高斯内核进行模糊,以生成两个中间过滤图像。然后从较模糊的图像中减去更模糊的图像。因此,最终的输出图像将具有由较小 sigma 高斯衰减的高频分量,并且由于存在于更模糊的中间图像中,低频分量将被去除。
- 参数:
- imagendarray
要过滤的输入数组。
- low_sigma标量或标量序列
具有所有轴上较小 sigma 的高斯内核的标准差(序列)。标准差按序列或单个数字给出,在这种情况下,单个数字用作所有轴的标准差值。
- high_sigma标量或标量序列,可选(默认为 None)
具有所有轴上较大 sigma 的高斯内核的标准差(序列)。标准差按序列或单个数字给出,在这种情况下,单个数字用作所有轴的标准差值。如果给出 None(默认值),则所有轴的 sigma 将计算为 1.6 * low_sigma。
- mode{‘reflect’, ‘constant’, ‘nearest’, ‘mirror’, ‘wrap’},可选
mode
参数决定如何处理数组边界,其中cval
是 mode 等于 ‘constant’ 时的值。默认值为 ‘nearest’。- cval标量,可选
如果
mode
为 ‘constant’,则用于填充输入边缘以外的值。默认值为 0.0- channel_axisint 或 None,可选
如果为 None,则假定图像为灰度(单通道)图像。否则,此参数指示数组的哪个轴对应于通道。
在版本 0.19 中添加:
channel_axis
在 0.19 中添加。- truncate浮点数,可选(默认为 4.0)
在此标准差范围内截断滤波器。
- 返回:
- filtered_imagendarray
过滤后的数组。
说明
此函数将从使用
low_sigma
提供的 sigma 的高斯内核过滤的数组中减去使用high_sigma
给出的 sigma 的高斯内核过滤的数组。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. 和 Hildreth,E. 边缘检测理论。伦敦皇家学会会刊 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)[source]#
使用法里德变换查找边缘幅度。
- 参数:
- 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 边缘图。
说明
对水平和垂直方向的导数的平方和进行平方根运算,得到一个对方向不太敏感的幅度。类似于 Scharr 算子,该算子设计了一个旋转不变约束。
参考文献
[1]Farid, H. and Simoncelli, E. P., “Differentiation of discrete multidimensional signals”, 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)[source]#
使用法里德变换查找图像的水平边缘。
- 参数:
- image二维数组
要处理的图像。
- mask二维数组,可选
一个可选的掩码,用于将应用限制到特定区域。注意,围绕掩码区域的像素也被掩码,以防止掩码区域影响结果。
- 返回:
- output二维数组
Farid 边缘图。
说明
该核使用 [1] 中的 5 个抽头权重构建。
参考文献
[1]Farid, H. and Simoncelli, E. P., “Differentiation of discrete multidimensional signals”, IEEE Transactions on Image Processing 13(4): 496-508, 2004. DOI:10.1109/TIP.2004.823819
[2]Farid, H. and Simoncelli, E. P. “Optimally rotation-equivariant directional derivative kernels”, In: 7th International Conference on Computer Analysis of Images and Patterns, Kiel, Germany. Sep, 1997.
边缘算子
- skimage.filters.farid_v(image, *, mask=None)[source]#
使用法里德变换查找图像的垂直边缘。
- 参数:
- image二维数组
要处理的图像。
- mask二维数组,可选
一个可选的掩码,用于将应用限制到特定区域。注意,围绕掩码区域的像素也被掩码,以防止掩码区域影响结果。
- 返回:
- output二维数组
Farid 边缘图。
说明
该核使用 [1] 中的 5 个抽头权重构建。
参考文献
[1]Farid, H. and Simoncelli, E. P., “Differentiation of discrete multidimensional signals”, 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)[source]#
将给定的滤波器应用于数据。
- 参数:
- data(M, N) ndarray
输入数据。
- impulse_responsecallable f(r, c, **filter_params)
滤波器的脉冲响应。见 LPIFilter2D.__init__。
- filter_params字典,可选
传递给 impulse_response 函数的额外关键字参数。
- 其他参数::
- 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)[source]#
将滤波器反向应用于给定的数据。
- 参数:
- data(M, N) ndarray
输入数据。
- impulse_responsecallable f(r, c, **filter_params)
滤波器的脉冲响应。见
LPIFilter2D
。除非提供 predifined_filter,否则这是必需的参数。- filter_params字典,可选
传递给 impulse_response 函数的额外关键字参数。
- 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)[source]#
使用 Frangi 血管度滤波器对图像进行滤波。
该滤波器可用于检测连续脊,例如血管、皱纹、河流。它可用于计算包含此类对象的整个图像的比例。
仅针对二维和三维图像定义。根据 [1] 中描述的方法,计算 Hessian 的特征值以计算图像区域与血管的相似度。
- 参数:
- image(M, N[, P]) ndarray
包含输入图像数据的数组。
- sigmas浮点数的可迭代对象,可选
用作滤波器尺度的西格玛值,即 np.arange(scale_range[0], scale_range[1], scale_step)
- scale_range浮点数的二元组,可选
使用的西格玛值范围。
- scale_step浮点数,可选
西格玛值之间的步长。
- alpha浮点数,可选
Frangi 校正常数,用于调整滤波器对偏离板状结构的敏感度。
- beta浮点数,可选
Frangi 校正常数,用于调整滤波器对偏离 blob 状结构的敏感度。
- gamma浮点数,可选
Frangi 校正常数,用于调整滤波器对高方差/纹理/结构区域的敏感度。默认值 None 使用最大 Hessian 范数的一半。
- black_ridges布尔值,可选
如果为 True(默认值),则滤波器检测黑色脊;如果为 False,则检测白色脊。
- mode{‘constant’, ‘reflect’, ‘wrap’, ‘nearest’, ‘mirror’},可选
如何处理图像边界之外的值。
- cval浮点数,可选
与模式 ‘constant’ 一起使用时,图像边界之外的值。
- 返回:
- out(M, N[, P]) ndarray
滤波后的图像(所有尺度上的像素最大值)。
说明
该滤波器的早期版本由 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,). Multiscale vessel enhancement filtering. In International Conference on Medical Image Computing and Computer-Assisted Intervention (pp. 130-137). Springer Berlin Heidelberg. DOI:10.1007/BFb0056195
[2]Kroon, D. J.: Hessian based Frangi vesselness filter.
[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)[source]#
返回对 Gabor 滤波器的实部和虚部响应。
Gabor 滤波器核的实部和虚部被应用于图像,响应作为一对数组返回。
Gabor 滤波器是一种线性滤波器,其高斯核被正弦平面波调制。Gabor 滤波器的频率和方向表示与人类视觉系统的相似。Gabor 滤波器组通常用于计算机视觉和图像处理。它们特别适用于边缘检测和纹理分类。
- 参数:
- image二维数组
输入图像。
- frequencyfloat
谐波函数的空间频率。以像素为单位指定。
- thetafloat, optional
以弧度为单位的方向。如果为 0,则谐波位于 x 方向。
- bandwidthfloat, optional
滤波器捕获的带宽。对于固定带宽,
sigma_x
和sigma_y
随着频率的增加而减小。如果用户设置了sigma_x
和sigma_y
,则忽略此值。- sigma_x, sigma_yfloat, optional
x 和 y 方向的标准差。这些方向适用于旋转之前的内核。如果 theta = pi/2,则内核旋转 90 度,使
sigma_x
控制垂直方向。- n_stdsscalar, optional
内核的线性大小为 n_stds(默认值为 3)个标准差。
- offsetfloat, optional
谐波函数的相位偏移(以弧度为单位)。
- mode{‘constant’, ‘nearest’, ‘reflect’, ‘mirror’, ‘wrap’}, optional
用于将图像与内核进行卷积的模式,传递给 ndi.convolve
- cval标量,可选
如果卷积的
mode
为 'constant',则用于填充输入边缘的值。该参数传递给 ndi.convolve。
- 返回:
- real, imagarrays
使用 Gabor 滤波器内核的实部和虚部过滤的图像。图像与输入图像具有相同的尺寸。
参考文献
示例
>>> from skimage.filters import gabor >>> from skimage import data, io >>> from matplotlib import pyplot as plt
>>> image = data.coins() >>> # detecting edges in a coin image >>> filt_real, filt_imag = gabor(image, frequency=0.6) >>> plt.figure() >>> io.imshow(filt_real) >>> io.show()
>>> # less sensitivity to finer details with the lower frequency kernel >>> filt_real, filt_imag = gabor(image, frequency=0.1) >>> plt.figure() >>> io.imshow(filt_real) >>> io.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'>)[source]#
返回复数 2D Gabor 滤波器核。
Gabor 核是高斯核调制后的复谐波函数。谐波函数由虚正弦函数和实余弦函数组成。空间频率与谐波的波长和高斯核的标准差成反比。带宽也与标准差成反比。
- 参数:
- frequencyfloat
谐波函数的空间频率。以像素为单位指定。
- thetafloat, optional
以弧度为单位的方向。如果为 0,则谐波位于 x 方向。
- bandwidthfloat, optional
滤波器捕获的带宽。对于固定带宽,
sigma_x
和sigma_y
随着频率的增加而减小。如果用户设置了sigma_x
和sigma_y
,则忽略此值。- sigma_x, sigma_yfloat, optional
x 和 y 方向的标准差。这些方向适用于旋转之前的内核。如果 theta = pi/2,则内核旋转 90 度,使
sigma_x
控制垂直方向。- n_stdsscalar, optional
内核的线性大小为 n_stds(默认值为 3)个标准差
- offsetfloat, optional
谐波函数的相位偏移(以弧度为单位)。
- dtype{np.complex64, np.complex128}
指定滤波器是单精度还是双精度复数。
- 返回:
- gcomplex array
复滤波器内核。
参考文献
示例
>>> from skimage.filters import gabor_kernel >>> from skimage import io >>> from matplotlib import pyplot as plt
>>> gk = gabor_kernel(frequency=0.2) >>> plt.figure() >>> io.imshow(gk.real) >>> io.show()
>>> # more ripples (equivalent to increasing the size of the >>> # Gaussian spread) >>> gk = gabor_kernel(frequency=0.2, bandwidth=0.1) >>> plt.figure() >>> io.imshow(gk.real) >>> io.show()
用于纹理分类的 Gabor 滤波器组
- skimage.filters.gaussian(image, sigma=1, output=<DEPRECATED>, mode='nearest', cval=0, preserve_range=False, truncate=4.0, *, channel_axis=None, out=None)[source]#
多维高斯滤波器。
- 参数:
- imagendarray
要过滤的输入图像(灰度或彩色)。
- sigmascalar 或标量序列,可选
高斯核的标准差。高斯滤波器的标准差作为序列或单个数字给出,在这种情况下,所有轴的标准差都相等。
- mode{‘reflect’, ‘constant’, ‘nearest’, ‘mirror’, ‘wrap’},可选
mode
参数决定如何处理数组边界,其中cval
是 mode 等于 ‘constant’ 时的值。默认值为 ‘nearest’。- cval标量,可选
如果
mode
为 ‘constant’,则用于填充输入边缘以外的值。默认值为 0.0- preserve_rangebool, optional
如果为 True,则保留原始值范围。否则,输入
image
会根据img_as_float
的约定进行转换(根据输入类型的不同,首先归一化为 [-1.0 ; 1.0] 或 [0 ; 1.0] 的值)。有关更多信息,请参阅:https://scikit-image.cn/docs/dev/user_guide/data_types.html
- truncatefloat, optional
在此标准差范围内截断滤波器。
- channel_axisint 或 None,可选
如果为 None,则假定图像为灰度(单通道)图像。否则,此参数指示数组的哪个轴对应于通道。
在版本 0.19 中添加: channel_axis 在 0.19 中添加。
- outndarray, optional
如果给出,则过滤后的图像将存储在此数组中。
在版本 0.23 中添加: out 在 0.23 中添加。
- 返回:
- filtered_imagendarray
过滤后的数组
- 其他参数::
- outputDEPRECATED
已弃用,取而代之的是 out。
自版本 0.23 起已弃用。
说明
此函数是对
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)[source]#
使用混合 Hessian 滤波器对图像进行滤波。
此滤波器可用于检测连续边缘,例如血管、皱纹、河流。它可用于计算包含此类对象的整个图像的比例。
仅针对 2-D 和 3-D 图像定义。几乎等于 Frangi 滤波器,但使用替代的平滑方法。参考 [1] 以了解 Frangi 和 Hessian 滤波器之间的差异。
- 参数:
- image(M, N[, P]) ndarray
包含输入图像数据的数组。
- sigmas浮点数的可迭代对象,可选
用作滤波器尺度的西格玛值,即 np.arange(scale_range[0], scale_range[1], scale_step)
- scale_range浮点数的二元组,可选
使用的西格玛值范围。
- scale_step浮点数,可选
西格玛值之间的步长。
- beta浮点数,可选
Frangi 校正常数,用于调整滤波器对偏离 blob 状结构的敏感度。
- gamma浮点数,可选
Frangi 校正常数,用于调整滤波器对高方差/纹理/结构区域的敏感度。
- black_ridges布尔值,可选
如果为 True(默认值),则滤波器检测黑色脊;如果为 False,则检测白色脊。
- mode{‘constant’, ‘reflect’, ‘wrap’, ‘nearest’, ‘mirror’},可选
如何处理图像边界之外的值。
- cval浮点数,可选
与模式 ‘constant’ 一起使用时,图像边界之外的值。
- 返回:
- out(M, N[, P]) ndarray
滤波后的图像(所有尺度上的像素最大值)。
说明
由 Marc Schrijver 编写(2001 年 11 月)由 D. J. Kroon 重新编写(2009 年 5 月)[2]
参考文献
[1]Ng, C. C., Yap, M. H., Costen, N., & Li, B. (2014,). 自动皱纹检测使用混合 Hessian 滤波器。在亚洲计算机视觉会议 (pp. 609-622) 中。施普林格国际出版公司。 DOI:10.1007/978-3-319-16811-1_40
[2]Kroon, D. J.: Hessian based Frangi vesselness filter.
脊算子
- skimage.filters.laplace(image, ksize=3, mask=None)[source]#
使用拉普拉斯算子查找图像的边缘。
- 参数:
- imagendarray
要处理的图像。
- ksizeint, optional
定义离散拉普拉斯算子的尺寸,使其具有 (ksize,) * image.ndim 的尺寸。
- maskndarray, optional
一个可选的掩码,用于将应用限制到特定区域。注意,围绕掩码区域的像素也被掩码,以防止掩码区域影响结果。
- 返回:
- outputndarray
拉普拉斯边缘图。
说明
拉普拉斯算子使用 skimage.restoration.uft.laplacian() 函数生成。
- skimage.filters.median(image, footprint=None, out=None, mode='nearest', cval=0.0, behavior='ndimage')[source]#
返回图像的局部中值。
- 参数:
- imagearray-like
输入图像。
- footprintndarray, optional
如果
behavior=='rank'
,footprint
是一个由 1 和 0 组成的二维数组。如果behavior=='ndimage'
,footprint
是一个由 1 和 0 组成的 N 维数组,其维度与image
相同。如果为 None,footprint
将是一个 N 维数组,每个维度有 3 个元素(例如,向量、正方形、立方体等)。- outndarray,(与图像具有相同的数据类型),可选
如果为 None,则分配一个新数组。
- mode{‘reflect’, ‘constant’, ‘nearest’, ‘mirror’,’‘wrap’}, 可选
mode 参数决定了如何处理数组边界,其中
cval
是 mode 等于 ‘constant’ 时的值。默认值为 ‘nearest’。版本 0.15 中新增:
mode
用于behavior='ndimage'
。- 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二维数组(与输入图像具有相同的数据类型)
输出图像。
另请参见
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)[source]#
使用 Meijering 神经度滤波器对图像进行滤波。
此过滤器可用于检测连续脊线,例如神经突、皱纹、河流。它可用于计算包含此类对象的整个图像的比例。
根据 [1] 中描述的方法,计算 Hessian 的特征值以计算图像区域与神经突的相似度。
- 参数:
- 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
滤波后的图像(所有尺度上的像素最大值)。
参考文献
[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)[source]#
使用 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 算子对梯度算子的近似值并非完全旋转不变。为了获得更好的旋转不变性,应使用 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)[source]#
使用 Prewitt 变换查找图像的水平边缘。
- 参数:
- image二维数组
要处理的图像。
- mask二维数组,可选
一个可选的掩码,用于将应用限制到特定区域。注意,围绕掩码区域的像素也被掩码,以防止掩码区域影响结果。
- 返回:
- output二维数组
Prewitt 边缘图。
说明
我们使用以下内核
1/3 1/3 1/3 0 0 0 -1/3 -1/3 -1/3
边缘算子
- skimage.filters.prewitt_v(image, mask=None)[source]#
使用 Prewitt 变换查找图像的垂直边缘。
- 参数:
- image二维数组
要处理的图像。
- mask二维数组,可选
一个可选的掩码,用于将应用限制到特定区域。注意,围绕掩码区域的像素也被掩码,以防止掩码区域影响结果。
- 返回:
- output二维数组
Prewitt 边缘图。
说明
我们使用以下内核
1/3 0 -1/3 1/3 0 -1/3 1/3 0 -1/3
边缘算子
- skimage.filters.rank_order(image)[source]#
返回一个与形状相同的图像,其中每个像素是像素值在
image
的唯一值的升序中的索引,也称为秩序值。- 参数:
- imagendarray
- 返回:
- labels形状为 image.shape 的无符号整型 ndarray
新的数组,其中每个像素都具有
image
中对应像素的秩序值。像素值介于 0 和 n - 1 之间,其中 n 是image
中不同唯一值的个数。此数组的数据类型将由np.min_scalar_type(image.size)
确定。- original_values一维 ndarray
image
的唯一原始值。这将与image
具有相同的数据类型。
示例
>>> 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)[source]#
使用 Roberts 交叉算子查找边缘幅度。
- 参数:
- image二维数组
要处理的图像。
- mask二维数组,可选
一个可选的掩码,用于将应用限制到特定区域。注意,围绕掩码区域的像素也被掩码,以防止掩码区域影响结果。
- 返回:
- output二维数组
Roberts 交叉边缘图。
另请参见
示例
>>> from skimage import data >>> camera = data.camera() >>> from skimage import filters >>> edges = filters.roberts(camera)
边缘算子
- skimage.filters.roberts_neg_diag(image, mask=None)[source]#
使用 Roberts 交叉算子查找图像的交叉边缘。
内核应用于输入图像,以生成一个方向的梯度分量。的独立测量值
- 参数:
- image二维数组
要处理的图像。
- mask二维数组,可选
一个可选的掩码,用于将应用限制到特定区域。注意,围绕掩码区域的像素也被掩码,以防止掩码区域影响结果。
- 返回:
- output二维数组
罗伯茨边缘图。
说明
我们使用以下内核
0 1 -1 0
- skimage.filters.roberts_pos_diag(image, mask=None)[source]#
使用罗伯茨交叉算子查找图像的交叉边缘。
内核应用于输入图像,以生成一个方向的梯度分量。的独立测量值
- 参数:
- image二维数组
要处理的图像。
- mask二维数组,可选
一个可选的掩码,用于将应用限制到特定区域。注意,围绕掩码区域的像素也被掩码,以防止掩码区域影响结果。
- 返回:
- output二维数组
罗伯茨边缘图。
说明
我们使用以下内核
1 0 0 -1
- skimage.filters.sato(image, sigmas=range(1, 10, 2), black_ridges=True, mode='reflect', cval=0)[source]#
使用 Sato 管状度滤波器对图像进行滤波。
此过滤器可用于检测连续脊线,例如管子、皱纹、河流。 它可用于计算包含此类对象的整个图像的比例。
仅针对 2-D 和 3-D 图像定义。 根据文献 [1] 中描述的方法,计算 Hessian 的特征值以计算图像区域与管子的相似度。
- 参数:
- image(M, N[, P]) ndarray
包含输入图像数据的数组。
- sigmas浮点数的可迭代对象,可选
用作滤波器尺度的 Sigma。
- black_ridges布尔值,可选
如果为 True(默认值),则滤波器检测黑色脊;如果为 False,则检测白色脊。
- mode{‘constant’, ‘reflect’, ‘wrap’, ‘nearest’, ‘mirror’},可选
如何处理图像边界之外的值。
- cval浮点数,可选
与模式 ‘constant’ 一起使用时,图像边界之外的值。
- 返回:
- out(M, N[, P]) ndarray
滤波后的图像(所有尺度上的像素最大值)。
参考文献
[1]Sato, Y., Nakajima, S., Shiraga, N., Atsumi, H., Yoshida, S., Koller, T., …, Kikinis, R. (1998). 用于医学图像中曲线结构分割和可视化的三维多尺度线过滤器。 医学图像分析,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)[source]#
使用 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 边缘图。
说明
与其他边缘过滤器(如 Sobel 或 Prewitt 算子)相比,Scharr 算子具有更好的旋转不变性。
参考文献
[1]D. Kroon,2009,特文特大学简短论文,基于核的图像导数的数值优化。
示例
>>> from skimage import data >>> from skimage import filters >>> camera = data.camera() >>> edges = filters.scharr(camera)
边缘算子
- skimage.filters.scharr_h(image, mask=None)[source]#
使用 Scharr 变换查找图像的水平边缘。
- 参数:
- image二维数组
要处理的图像。
- mask二维数组,可选
一个可选的掩码,用于将应用限制到特定区域。注意,围绕掩码区域的像素也被掩码,以防止掩码区域影响结果。
- 返回:
- output二维数组
Scharr 边缘图。
说明
我们使用以下内核
3 10 3 0 0 0 -3 -10 -3
参考文献
[1]D. Kroon,2009,特文特大学简短论文,基于核的图像导数的数值优化。
边缘算子
- skimage.filters.scharr_v(image, mask=None)[source]#
使用 Scharr 变换查找图像的垂直边缘。
- 参数:
- image二维数组
要处理的图像
- mask二维数组,可选
一个可选的掩码,用于将应用限制到特定区域。注意,围绕掩码区域的像素也被掩码,以防止掩码区域影响结果。
- 返回:
- output二维数组
Scharr 边缘图。
说明
我们使用以下内核
3 0 -3 10 0 -10 3 0 -3
参考文献
[1]D. Kroon,2009,特文特大学简短论文,基于核的图像导数的数值优化。
边缘算子
- skimage.filters.sobel(image, mask=None, *, axis=None, mode='reflect', cval=0.0)[source]#
使用 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 边缘图。
参考文献
[1]D. Kroon,2009,特文特大学简短论文,基于核的图像导数的数值优化。
示例
>>> from skimage import data >>> from skimage import filters >>> camera = data.camera() >>> edges = filters.sobel(camera)
将灰度过滤器应用于 RGB 图像边缘算子滞后阈值基于区域边界的区域邻接图 (RAG)使用紧凑型分水岭查找规则段扩展分割标签而不重叠比较分割和超像素算法查找两个分割的交集区域边界 RAG 的分层合并泛洪填充评估分割指标比较基于边缘的分割和基于区域的分割
- skimage.filters.sobel_h(image, mask=None)[source]#
使用 Sobel 变换查找图像的水平边缘。
- 参数:
- image二维数组
要处理的图像。
- mask二维数组,可选
一个可选的掩码,用于将应用限制到特定区域。注意,围绕掩码区域的像素也被掩码,以防止掩码区域影响结果。
- 返回:
- output二维数组
Sobel 边缘图。
说明
我们使用以下内核
1 2 1 0 0 0 -1 -2 -1
边缘算子
- skimage.filters.sobel_v(image, mask=None)[source]#
使用 Sobel 变换查找图像的垂直边缘。
- 参数:
- image二维数组
要处理的图像。
- mask二维数组,可选
一个可选的掩码,用于将应用限制到特定区域。注意,围绕掩码区域的像素也被掩码,以防止掩码区域影响结果。
- 返回:
- output二维数组
Sobel 边缘图。
说明
我们使用以下内核
1 0 -1 2 0 -2 1 0 -1
边缘算子
- skimage.filters.threshold_isodata(image=None, nbins=256, return_all=False, *, hist=None)[source]#
基于 ISODATA 方法返回阈值。
基于直方图的阈值,称为 Ridler-Calvard 方法或均值间方法。 返回的阈值满足以下等式
threshold = (image[image <= threshold].mean() + image[image > threshold].mean()) / 2.0
也就是说,返回的阈值是将图像分成两组像素的强度,其中阈值强度是这两组像素的平均强度的中间值。
对于整数图像,上述等式在 1 之内成立;对于浮点数图像,等式在直方图 bin 宽度内成立。
必须提供图像或 hist 之一。如果给出了 hist,则会忽略图像的实际直方图。
- 参数:
- image(M, N[, …]) ndarray
灰度输入图像。
- nbinsint,可选
用于计算直方图的 bin 数。此值对于整数数组将被忽略。
- return_allbool,可选
如果为 False(默认值),则仅返回满足上述等式的最低阈值。如果为 True,则返回所有有效阈值。
- hist数组,或包含两个数组的 2 元组,可选
用于确定阈值的直方图和相应的 bin 中心强度数组。或者,可以只传递直方图。
- 返回:
- thresholdfloat 或 int 或数组
阈值。
参考文献
[1]Ridler, TW & Calvard, S (1978),“使用迭代选择方法进行图像阈值分割” IEEE 系统、人机系统与控制学报 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)[source]#
使用李迭代最小交叉熵法计算阈值。
- 参数:
- image(M, N[, …]) ndarray
灰度输入图像。
- tolerancefloat, 可选
当迭代中阈值的改变小于此值时,结束计算。默认情况下,此值为
image
中强度值之间最小差值的二分之一。- initial_guessfloat 或 Callable[[array[float]], float], 可选
李的迭代方法使用梯度下降法来寻找最佳阈值。如果图像强度直方图包含两个以上的模式(峰值),梯度下降法可能会陷入局部最优。迭代的初始猜测可以帮助算法找到全局最优阈值。浮点数定义了一个特定的起点,而可调用对象应该接收一个图像强度数组,并返回一个浮点数。示例有效可调用对象包括
numpy.mean
(默认值)、lambda arr: numpy.quantile(arr, 0.95)
,甚至skimage.filters.threshold_otsu()
。- iter_callbackCallable[[float], Any], 可选
一个函数,将在算法的每次迭代中对阈值进行调用。
- 返回:
- thresholdfloat
上阈值。所有强度高于此值的像素都被认为是前景。
参考文献
[1]Li C.H. 和 Lee C.K. (1993) “Minimum Cross Entropy Thresholding” 模式识别, 26(4): 617-625 DOI:10.1016/0031-3203(93)90115-D
[2]Li C.H. 和 Tam P.K.S. (1998) “An Iterative Algorithm for Minimum Cross Entropy Thresholding” 模式识别快报, 18(8): 771-776 DOI:10.1016/S0167-8655(98)00057-9
[3]Sezgin M. 和 Sankur B. (2004) “Survey over Image Thresholding Techniques and Quantitative Performance Evaluation” 电子成像杂志, 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)[source]#
基于局部像素邻域计算阈值掩码图像。
也称为自适应阈值或动态阈值。阈值是像素局部邻域的加权平均值减去一个常数。或者,可以使用 ‘generic’ 方法通过给定函数动态确定阈值。
- 参数:
- image(M, N[, …]) ndarray
灰度输入图像。
- block_sizeint 或 int 序列
用于计算阈值的像素邻域的奇数大小(例如 3、5、7、…、21、…)。
- method{‘generic’, ‘gaussian’, ‘mean’, ‘median’}, 可选
用于确定加权平均图像中局部邻域的自适应阈值的方法。
‘generic’: 使用自定义函数(参见
param
参数)‘gaussian’: 应用高斯滤波器(参见
param
参数以获取自定义 sigma 值)‘mean’: 应用算术平均滤波器
‘median’: 应用中值排序滤波器
默认情况下,使用 ‘gaussian’ 方法。
- offsetfloat, optional
从邻域的加权平均值中减去的常数,用于计算局部阈值。默认偏移量为 0。
- mode{‘reflect’, ‘constant’, ‘nearest’, ‘mirror’, ‘wrap’},可选
mode 参数决定如何处理数组边界,其中 cval 是 mode 等于 ‘constant’ 时的值。默认值为 ‘reflect’。
- param{int, 函数}, 可选
指定 ‘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)
使用 inpainting 修复有斑点的角膜图像阈值化
- skimage.filters.threshold_mean(image)[source]#
基于灰度值的平均值返回阈值。
- 参数:
- image(M, N[, …]) ndarray
灰度输入图像。
- 返回:
- thresholdfloat
上阈值。所有强度高于此值的像素都被认为是前景。
参考文献
[1]C. A. Glasbey,“An analysis of histogram-based thresholding algorithms”,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)[source]#
基于最小值方法返回阈值。
如果未提供输入
image
的直方图,则计算该直方图,并对其进行平滑处理,直到只有两个最大值。然后,两者之间的最小值即为阈值。必须提供图像或 hist 之一。如果给出了 hist,则会忽略图像的实际直方图。
- 参数:
- image(M, N[, …]) ndarray, 可选
灰度输入图像。
- nbinsint,可选
用于计算直方图的 bin 数。此值对于整数数组将被忽略。
- max_num_iterint, 可选
平滑直方图的最大迭代次数。
- hist数组,或包含两个数组的 2 元组,可选
用于确定阈值的直方图和相应的 bin 中心强度数组。或者,可以只传递直方图。
- 返回:
- thresholdfloat
上阈值。所有强度高于此值的像素都被认为是前景。
- 引发:
- RuntimeError
如果无法在直方图中找到两个局部最大值,或者平滑过程超过 1e4 次迭代。
参考文献
[1]C. A. Glasbey,“An analysis of histogram-based thresholding algorithms”,CVGIP: 图形模型和图像处理,第 55 卷,第 532-537 页,1993 年。
[2]Prewitt, JMS & Mendelsohn, ML (1966), “The analysis of cell images”, Annals of the New York Academy of Sciences 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)[source]#
根据多类别的 Otsu 方法,生成 classes-1 个阈值来划分 image 中的灰度级。
阈值的选择是为了最大化阈值化后的灰度级类别之间成对方差的总和。有关更多详细信息,请参见说明和 [1]。
必须提供 image 或 hist。如果提供了 hist,则会忽略图像的实际直方图。
- 参数:
- image(M, N[, …]) ndarray, 可选
灰度输入图像。
- classesint, 可选
要阈值化的类别数,即结果区域数。
- nbinsint,可选
用于计算直方图的 bin 数。对于整数数组,此值将被忽略。
- hist数组,或包含两个数组的 2 元组,可选
用于确定阈值的直方图,以及可选的对应 bin 中心强度数组。如果没有提供 hist,则此函数将从图像中计算它(参见说明)。
- 返回:
- thresharray
包含所需类别的阈值的数组。
- 引发:
- 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”,信息科学与工程杂志 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)
- skimage.filters.threshold_niblack(image, window_size=15, k=0.2)[source]#
将 Niblack 局部阈值应用于数组。
对于图像中的每个像素,使用以下公式计算阈值 T
T = m(x,y) - k * s(x,y)
其中 m(x,y) 和 s(x,y) 是以像素 (x,y) 为中心,大小为 w 乘以 w 的矩形窗口定义的像素 (x,y) 邻域的均值和标准差。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,数字图像处理导论,Prentice-Hall,1986。
[2]D. Bradley 和 G. Roth,“使用积分图像的自适应阈值化”,图形工具杂志 12(2),第 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 阈值化
- skimage.filters.threshold_otsu(image=None, nbins=256, *, hist=None)[source]#
根据大津法返回阈值。
必须提供 image 或 hist。如果提供了 hist,则会忽略图像的实际直方图。
- 参数:
- image(M, N[, …]) ndarray, 可选
灰度输入图像。
- nbinsint,可选
用于计算直方图的 bin 数。此值对于整数数组将被忽略。
- hist数组,或包含两个数组的 2 元组,可选
用于确定阈值的直方图,以及可选的对应 bin 中心强度数组。如果没有提供 hist,则此函数将从图像中计算它。
- 返回:
- thresholdfloat
上阈值。所有强度高于此值的像素都被认为是前景。
说明
输入图像必须是灰度图像。
参考文献
示例
>>> from skimage.data import camera >>> image = camera() >>> thresh = threshold_otsu(image) >>> binary = image <= thresh
- skimage.filters.threshold_sauvola(image, window_size=15, k=0.2, r=None)[source]#
将 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 的矩形窗口定义的像素 (x,y) 邻域的均值和标准差。k 是一个可配置参数,用于加权标准差的影响。R 是灰度图像的最大标准差。
- 参数:
- image(M, N[, …]) ndarray
灰度输入图像。
- window_sizeint,或 int 的可迭代对象,可选
窗口大小指定为单个奇数整数(3、5、7、…),或长度为
image.ndim
的可迭代对象,其中只包含奇数整数(例如(1, 5, 5)
)。- kfloat,可选
正参数 k 的值。
- rfloat,可选
R 的值,即标准差的动态范围。如果为 None,则设置为图像数据类型范围的一半。
- 返回:
- threshold(M, N[, …]) ndarray
阈值掩码。所有强度高于此值的像素都被认为是前景。
说明
该算法最初是为文本识别而设计的。
参考文献
[1]J. Sauvola 和 M. Pietikainen,“自适应文档图像二值化”,模式识别 33(2),第 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 阈值化
- skimage.filters.threshold_triangle(image, nbins=256)[source]#
基于三角形算法返回阈值。
- 参数:
- image(M, N[, …]) ndarray
灰度输入图像。
- nbinsint,可选
用于计算直方图的 bin 数。此值对于整数数组将被忽略。
- 返回:
- thresholdfloat
上阈值。所有强度高于此值的像素都被认为是前景。
参考文献
[1]Zack,G. W.,Rogers,W. E. 和 Latt,S. A.,1977,姐妹染色单体交换频率的自动测量,组织化学和细胞化学杂志 25 (7),第 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)[source]#
根据 Yen 的方法返回阈值。必须提供 image 或 hist。如果给出 hist,则忽略图像的实际直方图。
- 参数:
- image(M, N[, …]) ndarray
灰度输入图像。
- nbinsint,可选
用于计算直方图的 bin 数。此值对于整数数组将被忽略。
- hist数组,或包含两个数组的 2 元组,可选
用于确定阈值的直方图,以及可选的对应 bin 中心强度数组。此函数的另一种使用方法是只传递 hist。
- 返回:
- thresholdfloat
上阈值。所有强度高于此值的像素都被认为是前景。
参考文献
[1]Yen J.C.,Chang F.J. 和 Chang S. (1995) “自动多级阈值化的新标准” IEEE 图像处理学报,4(3): 370-378。 DOI:10.1109/83.366472
[2]Sezgin M. 和 Sankur B. (2004) “图像阈值化技术综述和定量性能评估” 电子成像杂志,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)[source]#
返回一个比较不同阈值方法输出的图形。
- 参数:
- image(M, N) ndarray
输入图像。
- figsize元组,可选
图形大小(以英寸为单位)。
- verbosebool,可选
为每种方法打印函数名称。
- 返回:
- fig, ax元组
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)[source]#
锐化遮罩滤波器。
锐利细节被识别为原始图像与其模糊版本之间的差异。然后对这些细节进行缩放,并将其添加回原始图像。
- 参数:
- image(M[, …][, C]) ndarray
输入图像。
- radius标量或标量序列,可选
如果给定标量,则其值用于所有维度。如果给定序列,则每个维度必须恰好有一个半径,除了多通道图像的最后一个维度。注意,半径为 0 表示没有模糊,不允许负值。
- amount标量,可选
细节将使用此因子放大。因子可以是 0 或负数。通常,它是一个小的正数,例如 1.0。
- preserve_rangebool, optional
是否保留原始值的范围。否则,将根据
img_as_float
的约定转换输入图像。另请参阅 https://scikit-image.cn/docs/dev/user_guide/data_types.html- channel_axisint 或 None,可选
如果为 None,则假定图像为灰度(单通道)图像。否则,此参数指示数组的哪个轴对应于通道。
在版本 0.19 中添加:
channel_axis
在 0.19 中添加。
- 返回:
- output(M[, …][, C]) ndarray of float
应用了不锐化掩码的图像。
说明
不锐化掩码是一种图像锐化技术。它是一种线性图像运算,并且数值稳定,不像反卷积那样是一个病态问题。由于这种稳定性,它通常比反卷积更受青睐。
主要思想如下:锐利细节被识别为原始图像与其模糊版本之间的差异。这些细节在缩放步骤后被添加回原始图像
增强图像 = 原始图像 + 数量 * (原始图像 - 模糊图像)
当独立地将此滤波器应用于多个颜色层时,可能会出现颜色溢出。通过仅处理合适的颜色空间(如 HSV、HSL、YUV 或 YCbCr)中的亮度/亮度/强度通道,可以获得更令人愉悦的结果。
不锐化掩码在大多数介绍性数字图像处理书籍中都有描述。此实现基于 [1].
参考文献
[1]Maria Petrou,Costas Petrou “图像处理:基础”,(2010),第二版,第 357 页,ISBN 13: 9781119994398 DOI:10.1002/9781119994398
[2]示例
>>> 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)[source]#
最小均方误差 (Wiener) 逆滤波器。
- 参数:
- data(M, N) ndarray
输入数据。
- Kfloat 或 (M, N) ndarray
噪声功率谱与未降级图像功率谱之比。
- impulse_responsecallable f(r, c, **filter_params)
滤波器的脉冲响应。见 LPIFilter2D.__init__。
- filter_params字典,可选
传递给 impulse_response 函数的额外关键字参数。
- 其他参数::
- predefined_filterLPIFilter2D
如果您需要对不同的图像多次应用相同的滤波器,请构造 LPIFilter2D 并在此处指定它。
- skimage.filters.window(window_type, shape, warp_kwargs=None)[source]#
返回给定大小和维度的 n 维窗口。
- 参数:
- window_type字符串、浮点数或元组
要创建的窗口类型。任何由
scipy.signal.get_window
支持的窗口类型在此处都允许。有关当前列表,请参见下面的注释,或查看您机器上 SciPy 版本的 SciPy 文档。- shape整数元组或整数
沿每个轴的窗口形状。如果提供一个整数,则会生成一个 1D 窗口。
- warp_kwargs字典
传递给
skimage.transform.warp
的关键字参数(例如,warp_kwargs={'order':3}
用于更改插值方法)。
- 返回:
- nd_windowndarray
指定
shape
的窗口。dtype
为np.float64
。
说明
此函数基于
scipy.signal.get_window
,因此可以访问该函数可用的所有窗口类型(例如,"hann"
、"boxcar"
)。请注意,某些窗口类型需要参数,这些参数必须与窗口名称一起作为元组提供(例如,("tukey", 0.8)
)。如果仅提供一个浮点数,则将其解释为 Kaiser 窗口的 beta 参数。有关更多详细信息,请参见 https://docs.scipy.org.cn/doc/scipy/reference/generated/scipy.signal.windows.get_window.html。
请注意,此函数会生成指定
shape
的双精度数组,因此可以生成消耗大量可用内存的非常大的数组。此处创建 nD 窗口所采用的方法是首先计算从预期 nD 窗口的中心到数组中每个位置的欧几里德距离。该距离用于对从
scipy.signal.get_window
返回的 1D 窗口进行插值采样。可以通过传递给skimage.transform.warp
的order
关键字参数来更改插值方法。输出窗口中的一些坐标将在原始信号之外;这些将用零填充。
窗口类型: - boxcar - triang - blackman - hamming - hann - bartlett - flattop - parzen - bohman - blackmanharris - nuttall - barthann - kaiser(需要 beta) - gaussian(需要标准差) - general_gaussian(需要 power、width) - slepian(需要 width) - 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)[source]#
基类:
object
线性位置不变滤波器 (二维)
- __init__(impulse_response, **filter_params)[source]#
- 参数:
- impulse_responsecallable f(r, c, **filter_params)
生成脉冲响应的函数。
r
和c
是表示行和列位置的一维向量,换句话说,坐标为 (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)