skimage.filters#
锐化、边缘检测、秩滤波器、阈值处理等。
| 对  | |
| 应用巴特沃斯滤波器来增强高频或低频特征。 | |
| 计算  | |
| 查找大小在  | |
| 使用 Farid 变换查找边缘幅度。 | |
| 使用 Farid 变换查找图像的水平边缘。 | |
| 使用 Farid 变换查找图像的垂直边缘。 | |
| 将给定滤波器应用于数据。 | |
| 反向将滤波器应用于给定数据。 | |
| 使用 Frangi 血管性滤波器对图像进行滤波。 | |
| 返回对 Gabor 滤波器的实部和虚部响应。 | |
| 返回复数 2D Gabor 滤波器核。 | |
| 多维高斯滤波器。 | |
| 使用混合 Hessian 滤波器对图像进行滤波。 | |
| 使用拉普拉斯算子查找图像的边缘。 | |
| 返回图像的局部中值。 | |
| 使用 Meijering 神经元性滤波器对图像进行滤波。 | |
| 使用 Prewitt 变换查找边缘幅度。 | |
| 使用 Prewitt 变换查找图像的水平边缘。 | |
| 使用 Prewitt 变换查找图像的垂直边缘。 | |
| 返回形状相同的图像,其中每个像素是  | |
| 使用 Roberts' 交叉算子查找边缘幅度。 | |
| 使用 Roberts' 交叉算子查找图像的交叉边缘。 | |
| 使用 Roberts' 交叉算子查找图像的交叉边缘。 | |
| 使用 Sato 管状性滤波器对图像进行滤波。 | |
| 使用 Scharr 变换查找边缘幅度。 | |
| 使用 Scharr 变换查找图像的水平边缘。 | |
| 使用 Scharr 变换查找图像的垂直边缘。 | |
| 使用 Sobel 滤波器查找图像中的边缘。 | |
| 使用 Sobel 变换查找图像的水平边缘。 | |
| 使用 Sobel 变换查找图像的垂直边缘。 | |
| 根据 ISODATA 方法返回阈值。 | |
| 通过 Li 的迭代最小交叉熵方法计算阈值。 | |
| 根据局部像素邻域计算阈值掩码图像。 | |
| 根据灰度值的平均值返回阈值。 | |
| 根据最小值方法返回阈值。 | |
| 生成  | |
| 将 Niblack 局部阈值应用于数组。 | |
| 根据 Otsu 方法返回阈值。 | |
| 将 Sauvola 局部阈值应用于数组。 | |
| 根据三角形算法返回阈值。 | |
| 根据 Yen 的方法返回阈值。 | |
| 返回比较不同阈值处理方法输出的图形。 | |
| 反锐化掩模滤波器。 | |
| 最小均方误差 (维纳) 逆滤波器。 | |
| 返回给定大小和维度的 n 维窗口。 | |
| 线性位置不变滤波器 (二维) | |
- skimage.filters.apply_hysteresis_threshold(image, low, high)[源代码]#
- 对 - image应用迟滞阈值处理。- 此算法查找 - image大于- high或- image大于- low且 该区域连接到大于- high的区域的区域。- 参数:
- image(M[, …]) ndarray
- 灰度输入图像。 
- lowfloat,或与 image形状相同的数组
- 较低阈值。 
- highfloat,或与 image形状相同的数组
- 较高阈值。 
 
- 返回:
- thresholded(M[, …]) bool 数组
- 数组,其中 - True表示- image高于迟滞阈值的位置。
 
 - 参考文献 [1]- J. Canny. 边缘检测的计算方法。 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.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\) 是滤波器- 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}\)。- 参考文献 [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')[source]#
- 计算 - padded_array和- kernel的有效互相关。- 当 - kernel很大且有很多零时,此函数速度很快。- 有关互相关的描述,请参见 - scipy.ndimage.correlate。- 参数:
- imagendarray,dtype 为 float,形状为 (M, N[, …], P)
- 输入数组。如果 mode 为 'valid',则此数组应已填充,因为将剥离与内核形状相同的边距。 
- kernelndarray,dtype 为 float,形状为 (Q, R[, …], S)
- 要相关的内核。必须与 - padded_array具有相同的维度数。为了获得高性能,它应该是稀疏的(只有少量非零条目)。
- modestring,可选
- 有关有效模式,请参阅 - scipy.ndimage.correlate。 此外,接受模式 'valid',在这种情况下,不应用填充,结果是内核完全位于原始数据内的较小图像的结果。
 
- 返回:
- resultfloat 数组,形状为 (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 版本中添加:在 0.19 中添加了 - channel_axis。
- truncatefloat,可选(默认为 4.0)
- 在此标准差数处截断过滤器。 
 
- 返回:
- filtered_imagendarray
- 滤波后的数组。 
 
 - 注释 - 此函数将从使用由 - high_sigma给出的 sigma 的高斯核滤波的数组中减去使用由- low_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. 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)[source]#
- 使用 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。这可以是单个边界模式或每个轴一个边界模式。
- cvalfloat,可选
- 当 - mode为- 'constant'时,这是在图像数据边界之外的值中使用的常量。
 
- 返回:
- 输出浮点数数组
- Farid 边缘图。 
 
 - 注释 - 取水平和垂直导数平方和的平方根,得到一个对方向不敏感的幅度。 与 Scharr 算子类似,此算子采用旋转不变性约束设计。 - 参考文献 [1]- Farid, H. and Simoncelli, E. P., “离散多维信号的微分”,IEEE Transactions on Image Processing 13(4): 496-508, 2004。 DOI:10.1109/TIP.2004.823819 [2]- 维基百科,“Farid 和 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二维数组,可选
- 一个可选的掩码,用于限制应用程序到特定区域。 请注意,遮罩区域周围的像素也被遮罩,以防止遮罩区域影响结果。 
 
- 返回:
- 输出二维数组
- Farid 边缘图。 
 
 - 注释 - 该内核是使用 [1] 中的 5 抽头权重构造的。 - 参考文献 [1]- Farid, H. and 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. “最优旋转等变定向导数内核”,In: 第 7 届计算机图像和模式分析国际会议,德国基尔。 1997 年 9 月。 
- skimage.filters.farid_v(image, *, mask=None)[源代码]#
- 使用 Farid 变换查找图像的垂直边缘。 - 参数:
- image二维数组
- 要处理的图像。 
- mask二维数组,可选
- 一个可选的掩码,用于限制应用程序到特定区域。 请注意,遮罩区域周围的像素也被遮罩,以防止遮罩区域影响结果。 
 
- 返回:
- 输出二维数组
- Farid 边缘图。 
 
 - 注释 - 该内核是使用 [1] 中的 5 抽头权重构造的。 - 参考文献 [1]- Farid, H. and 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_params字典,可选
- 脉冲响应函数的其他关键字参数。 
 
- 其他参数:
- predefined_filterLPIFilter2D
- 如果您需要在不同的图像上多次应用相同的过滤器,请构造 LPIFilter2D 并在此处指定。 
 
 - 示例 - 未标准化的 Gaussian 滤波器 - >>> 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_params字典,可选
- 脉冲响应函数的其他关键字参数。 
- 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浮点数的可迭代对象,可选
- 用作滤波器刻度的西格玛值,即 np.arange(scale_range[0], scale_range[1], scale_step) 
- scale_range浮点数的二元组,可选
- 使用的西格玛值的范围。 
- scale_step浮点数,可选
- 西格玛值之间的步长。 
- alpha浮点数,可选
- Frangi 校正常数,用于调整滤波器对偏离板状结构的灵敏度。 
- beta浮点数,可选
- Frangi 校正常数,用于调整滤波器对偏离斑点状结构的灵敏度。 
- gamma浮点数,可选
- Frangi 校正常数,用于调整滤波器对高方差/纹理/结构区域的灵敏度。 默认值 None 使用最大 Hessian 范数的一半。 
- black_ridges布尔值,可选
- 如果为 True(默认值),则滤波器检测黑色脊;如果为 False,则检测白色脊。 
- mode{‘constant’、‘reflect’、‘wrap’、‘nearest’、‘mirror’},可选
- 如何处理图像边界之外的值。 
- cvalfloat,可选
- 与模式“constant”结合使用,图像边界之外的值。 
 
- 返回:
- out(M, N[, P]) ndarray
- 经过滤波的图像(所有刻度上的像素最大值)。 
 
 - 注释 - 此滤波器的早期版本由 Marc Schrijver(2001 年 11 月)、D. J. Kroon, University of Twente(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 页)。 施普林格出版社。 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 滤波器是具有 Gaussian 内核的线性滤波器,该内核由正弦平面波调制。 Gabor 滤波器的频率和方向表示类似于人类视觉系统的表示。 Gabor 滤波器组常用于计算机视觉和图像处理。 它们特别适合于边缘检测和纹理分类。 - 参数:
- image二维数组
- 输入图像。 
- 频率 (frequency)浮点数 (float)
- 谐波函数的空间频率。以像素为单位指定。 
- 角度 (theta)浮点数 (float), 可选
- 以弧度为单位的方向。如果为 0,则谐波函数在 x 方向上。 
- 带宽 (bandwidth)浮点数 (float), 可选
- 滤波器捕获的带宽。对于固定带宽, - sigma_x和- sigma_y将随着频率的增加而减小。如果用户设置了- sigma_x和- sigma_y,则忽略此值。
- sigma_x, sigma_y浮点数 (float), 可选
- x 和 y 方向上的标准差。这些方向适用于旋转之前的内核。如果 - theta = pi/2,则内核旋转 90 度,以便- sigma_x控制垂直方向。
- n_stds标量 (scalar), 可选
- 内核的线性大小是 n_stds(默认为 3)个标准差。 
- 偏移量 (offset)浮点数 (float), 可选
- 以弧度为单位的谐波函数的相位偏移。 
- 模式 (mode){‘constant’, ‘nearest’, ‘reflect’, ‘mirror’, ‘wrap’}, 可选
- 用于将图像与内核进行卷积的模式,传递给 - ndi.convolve
- cval标量,可选
- 如果卷积的 - mode为“constant”,则填充输入边缘的值。该参数传递给- ndi.convolve。
 
- 返回:
- 实部, 虚部 (real, imag)数组 (arrays)
- 使用 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'>)[source]#
- 返回复数 2D Gabor 滤波器核。 - Gabor 内核是由复谐波函数调制的 Gaussian 内核。谐波函数由虚部正弦函数和实部余弦函数组成。空间频率与谐波的波长以及 Gaussian 内核的标准差成反比。带宽也与标准差成反比。 - 参数:
- 频率 (frequency)浮点数 (float)
- 谐波函数的空间频率。以像素为单位指定。 
- 角度 (theta)浮点数 (float), 可选
- 以弧度为单位的方向。如果为 0,则谐波函数在 x 方向上。 
- 带宽 (bandwidth)浮点数 (float), 可选
- 滤波器捕获的带宽。对于固定带宽, - sigma_x和- sigma_y将随着频率的增加而减小。如果用户设置了- sigma_x和- sigma_y,则忽略此值。
- sigma_x, sigma_y浮点数 (float), 可选
- x 和 y 方向上的标准差。这些方向适用于旋转之前的内核。如果 - theta = pi/2,则内核旋转 90 度,以便- sigma_x控制垂直方向。
- n_stds标量 (scalar), 可选
- 内核的线性大小是 n_stds(默认为 3)个标准差 
- 偏移量 (offset)浮点数 (float), 可选
- 以弧度为单位的谐波函数的相位偏移。 
- 数据类型 (dtype){np.complex64, np.complex128}
- 指定滤波器是单精度复数还是双精度复数。 
 
- 返回:
- g复数数组 (complex array)
- 复数滤波器内核。 
 
 - 参考文献 - 示例 - >>> 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() 
- skimage.filters.gaussian(image, sigma=1, *, mode='nearest', cval=0, preserve_range=False, truncate=4.0, channel_axis=None, out=None)[source]#
- 多维高斯滤波器。 - 参数:
- imagendarray
- 要滤波的输入图像(灰度或彩色)。 
- 标准差 (sigma)标量或标量序列 (scalar or sequence of scalars), 可选
- Gaussian 内核的标准差。Gaussian 滤波器的标准差以序列形式给出每个轴,或以单个数字给出,在这种情况下,所有轴都相等。 
- mode{‘reflect’,‘constant’,‘nearest’,‘mirror’,‘wrap’},可选
- mode参数确定如何处理数组边界,其中- cval是 mode 等于 “constant” 时的值。默认为“nearest”。
- cval标量,可选
- 如果 - mode为“constant”,则填充超出输入边缘的值。默认为 0.0
- 保留范围 (preserve_range)布尔值 (bool), 可选
- 如果为 True,则保留原始值范围。否则,将根据 - img_as_float的约定转换输入- image(首先根据输入的数据类型归一化为 [-1.0 ; 1.0] 或 [0 ; 1.0] 的值)。- 有关详细信息,请参阅:https://scikit-image.cn/docs/dev/user_guide/data_types.html 
- 截断 (truncate)浮点数 (float), 可选
- 在此标准差数处截断过滤器。 
- channel_axisint 或 None,可选
- 如果为 None,则假定图像为灰度(单通道)图像。否则,此参数指示数组的哪个轴对应于通道。 - 在版本 0.19 中添加: - channel_axis在 0.19 中添加。
- 输出 (out)ndarray, 可选
- 如果给定,滤波后的图像将存储在此数组中。 - 在版本 0.23 中添加: - out在 0.23 中添加。
 
- 返回:
- 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)[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 校正常数,用于调整滤波器对偏离斑点状结构的灵敏度。 
- gamma浮点数,可选
- Frangi 校正常数,用于调整滤波器对高方差/纹理/结构区域的灵敏度。 
- black_ridges布尔值,可选
- 如果为 True(默认值),则滤波器检测黑色脊;如果为 False,则检测白色脊。 
- mode{‘constant’、‘reflect’、‘wrap’、‘nearest’、‘mirror’},可选
- 如何处理图像边界之外的值。 
- cvalfloat,可选
- 与模式“constant”结合使用,图像边界之外的值。 
 
- 返回:
- out(M, N[, P]) ndarray
- 经过滤波的图像(所有刻度上的像素最大值)。 
 
 - 注释 - 由 Marc Schrijver(2001 年 11 月)编写,由 D. J. Kroon Twente 大学(2009 年 5 月)重新编写 [2] - 参考文献 [1]- Ng, C. C., Yap, M. H., Costen, N., & Li, B. (2014,). 使用混合 Hessian 滤波器进行自动皱纹检测。在亚洲计算机视觉会议中(第 609-622 页)。施普林格国际出版社。DOI:10.1007/978-3-319-16811-1_40 [2]- Kroon, D. J.: 基于 Hessian 的 Frangi 血管性滤波器。 
- skimage.filters.laplace(image, ksize=3, mask=None)[source]#
- 使用拉普拉斯算子查找图像的边缘。 - 参数:
- imagendarray
- 要处理的图像。 
- ksize整数 (int), 可选
- 定义离散拉普拉斯算子的大小,使其大小为 (ksize,) * image.ndim。 
- 掩码 (mask)ndarray, 可选
- 一个可选的掩码,用于限制应用程序到特定区域。 请注意,遮罩区域周围的像素也被遮罩,以防止遮罩区域影响结果。 
 
- 返回:
- 输出 (output)ndarray
- 拉普拉斯边缘图。 
 
 - 注释 - 拉普拉斯算子使用函数 skimage.restoration.uft.laplacian() 生成。 
- skimage.filters.median(image, footprint=None, out=None, mode='nearest', cval=0.0, behavior='ndimage')[source]#
- 返回图像的局部中值。 - 参数:
- 图像 (image)类数组 (array-like)
- 输入图像。 
- footprintndarray, 可选
- 如果 - behavior=='rank',- footprint是一个由 1 和 0 组成的二维数组。如果- behavior=='ndimage',- footprint是一个与- image具有相同维度的由 1 和 0 组成的 N 维数组。如果为 None,则- footprint将是一个每个维度有 3 个元素的 N 维数组(例如,向量、正方形、立方体等)。
- outndarray, (与 image 具有相同的数据类型), 可选
- 如果为 None,则会分配一个新的数组。 
- mode{‘reflect’, ‘constant’, ‘nearest’, ‘mirror’,’‘wrap’}, 可选
- mode 参数决定如何处理数组边界,其中 - cval是当 mode 等于 ‘constant’ 时的值。默认为 ‘nearest’。- 在版本 0.15 中添加:当 - behavior='ndimage'时使用- mode。
- cval标量,可选
- 如果 mode 为 ‘constant’,则填充输入边缘外的值。默认为 0.0 - 在版本 0.15 中添加:0.15 版本中添加了 - cval,当- behavior='ndimage'时使用。
- behavior{‘ndimage’, ‘rank’}, 可选
- 选择使用旧的行为(即 < 0.15)还是新行为。旧的行为会调用 - skimage.filters.rank.median()。新的行为会调用- scipy.ndimage.median_filter()。默认为 ‘ndimage’。- 在版本 0.15 中添加:0.15 版本引入了 - behavior。- 在版本 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浮点数的可迭代对象,可选
- 用作滤波器比例的 sigmas 值 
- alpha浮点数,可选
- 塑造滤波器常数,选择最平坦的细长特征。默认值 None 选择最佳值 -1/(ndim+1)。 
- black_ridges布尔值,可选
- 如果为 True(默认值),则滤波器检测黑色脊;如果为 False,则检测白色脊。 
- mode{‘constant’、‘reflect’、‘wrap’、‘nearest’、‘mirror’},可选
- 如何处理图像边界之外的值。 
- cvalfloat,可选
- 与模式“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。这可以是单个边界模式或每个轴一个边界模式。
- cvalfloat,可选
- 当 - mode为- 'constant'时,这是在图像数据边界之外的值中使用的常量。
 
- 返回:
- 输出浮点数数组
- 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二维数组,可选
- 一个可选的掩码,用于限制应用程序到特定区域。 请注意,遮罩区域周围的像素也被遮罩,以防止遮罩区域影响结果。 
 
- 返回:
- 输出二维数组
- 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二维数组,可选
- 一个可选的掩码,用于限制应用程序到特定区域。 请注意,遮罩区域周围的像素也被遮罩,以防止遮罩区域影响结果。 
 
- 返回:
- 输出二维数组
- 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无符号整数的 ndarray,形状与 image.shape 相同
- 新数组,其中每个像素都具有 - 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二维数组,可选
- 一个可选的掩码,用于限制应用程序到特定区域。 请注意,遮罩区域周围的像素也被遮罩,以防止遮罩区域影响结果。 
 
- 返回:
- 输出二维数组
- 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二维数组,可选
- 一个可选的掩码,用于限制应用程序到特定区域。 请注意,遮罩区域周围的像素也被遮罩,以防止遮罩区域影响结果。 
 
- 返回:
- 输出二维数组
- Robert 的边缘图。 
 
 - 注释 - 我们使用以下内核 - 0 1 -1 0 
- skimage.filters.roberts_pos_diag(image, mask=None)[source]#
- 使用 Roberts 交叉算子查找图像的交叉边缘。 - 将内核应用于输入图像,以产生一个方向上的梯度分量的单独测量值。 - 参数:
- image二维数组
- 要处理的图像。 
- mask二维数组,可选
- 一个可选的掩码,用于限制应用程序到特定区域。 请注意,遮罩区域周围的像素也被遮罩,以防止遮罩区域影响结果。 
 
- 返回:
- 输出二维数组
- Robert 的边缘图。 
 
 - 注释 - 我们使用以下内核 - 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’},可选
- 如何处理图像边界之外的值。 
- cvalfloat,可选
- 与模式“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)[源代码]#
- 使用 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。这可以是单个边界模式或每个轴一个边界模式。
- cvalfloat,可选
- 当 - mode为- 'constant'时,这是在图像数据边界之外的值中使用的常量。
 
- 返回:
- 输出浮点数数组
- Scharr 边缘图。 
 
 - 注释 - 与其他边缘滤波器(如 Sobel 或 Prewitt 算子)相比,Scharr 算子具有更好的旋转不变性。 - 参考文献 [1]- D. Kroon, 2009, Short Paper University Twente, 基于核的图像导数的数值优化。 - 示例 - >>> 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二维数组,可选
- 一个可选的掩码,用于限制应用程序到特定区域。 请注意,遮罩区域周围的像素也被遮罩,以防止遮罩区域影响结果。 
 
- 返回:
- 输出二维数组
- Scharr 边缘图。 
 
 - 注释 - 我们使用以下内核 - 3 10 3 0 0 0 -3 -10 -3 - 参考文献 [1]- D. Kroon, 2009, Short Paper University Twente, 基于核的图像导数的数值优化。 
- skimage.filters.scharr_v(image, mask=None)[源代码]#
- 使用 Scharr 变换查找图像的垂直边缘。 - 参数:
- image二维数组
- 要处理的图像 
- mask二维数组,可选
- 一个可选的掩码,用于限制应用程序到特定区域。 请注意,遮罩区域周围的像素也被遮罩,以防止遮罩区域影响结果。 
 
- 返回:
- 输出二维数组
- Scharr 边缘图。 
 
 - 注释 - 我们使用以下内核 - 3 0 -3 10 0 -10 3 0 -3 - 参考文献 [1]- D. Kroon, 2009, Short Paper University Twente, 基于核的图像导数的数值优化。 
- 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。这可以是单个边界模式或每个轴一个边界模式。
- cvalfloat,可选
- 当 - mode为- 'constant'时,这是在图像数据边界之外的值中使用的常量。
 
- 返回:
- 输出浮点数数组
- Sobel 边缘图。 
 
 - 参考文献 [1]- D. Kroon, 2009, Short Paper University Twente, 基于核的图像导数的数值优化。 - 示例 - >>> from skimage import data >>> from skimage import filters >>> camera = data.camera() >>> edges = filters.sobel(camera) 
- skimage.filters.sobel_h(image, mask=None)[源代码]#
- 使用 Sobel 变换查找图像的水平边缘。 - 参数:
- image二维数组
- 要处理的图像。 
- mask二维数组,可选
- 一个可选的掩码,用于限制应用程序到特定区域。 请注意,遮罩区域周围的像素也被遮罩,以防止遮罩区域影响结果。 
 
- 返回:
- 输出二维数组
- Sobel 边缘图。 
 
 - 注释 - 我们使用以下内核 - 1 2 1 0 0 0 -1 -2 -1 
- skimage.filters.sobel_v(image, mask=None)[源代码]#
- 使用 Sobel 变换查找图像的垂直边缘。 - 参数:
- image二维数组
- 要处理的图像。 
- mask二维数组,可选
- 一个可选的掩码,用于限制应用程序到特定区域。 请注意,遮罩区域周围的像素也被遮罩,以防止遮罩区域影响结果。 
 
- 返回:
- 输出二维数组
- Sobel 边缘图。 
 
 - 注释 - 我们使用以下内核 - 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 - 也就是说,返回的阈值是强度,它将图像分成两组像素,其中阈值强度位于这两组的平均强度之间。 - 对于整数图像,上述等式在 1 以内成立;对于浮点图像,等式在直方图 bin 宽度内成立。 - 必须提供 image 或 hist。如果提供 hist,则忽略图像的实际直方图。 - 参数:
- image(M, N[, …]) ndarray
- 灰度输入图像。 
- nbinsint,可选
- 用于计算直方图的 bin 数。此值对于整数数组将被忽略。 
- return_allbool,可选
- 如果为 False(默认值),则仅返回满足上述等式的最低阈值。如果为 True,则返回所有有效阈值。 
- hist数组或数组的 2 元组,可选
- 从中确定阈值的直方图和相应的 bin 中心强度数组。或者,只能传递直方图。 
 
- 返回:
- thresholdfloat 或 int 或 array
- 阈值。 
 
 - 参考文献 [1]- Ridler, TW & Calvard, S (1978), “使用迭代选择方法的图像阈值化” IEEE Transactions on Systems, Man and Cybernetics 8: 630-632, DOI:10.1109/TSMC.1978.4310039 [2]- Sezgin M. 和 Sankur B. (2004) “图像阈值技术和定量性能评估的调查” Journal of Electronic Imaging, 13(1): 146-165, http://www.busim.ee.boun.edu.tr/~sankur/SankurFolder/Threshold_survey.pdf DOI:10.1117/1.1631315 [3]- ImageJ AutoThresholder 代码, 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)[源代码]#
- 通过 Li 的迭代最小交叉熵方法计算阈值。 - 参数:
- image(M, N[, …]) ndarray
- 灰度输入图像。 
- tolerancefloat,可选
- 当一次迭代中阈值的变化小于此值时,完成计算。默认情况下,这是 - image中强度值之间最小差异的一半。
- initial_guessfloat 或 Callable[[array[float]], float],可选
- Li 的迭代方法使用梯度下降来找到最优阈值。如果图像强度直方图包含两个以上的模式(峰值),梯度下降可能会陷入局部最优。迭代的初始猜测可以帮助算法找到全局最优阈值。浮点数值定义了一个特定的起始点,而可调用对象应该接受图像强度数组并返回一个浮点数值。有效的可调用对象示例包括 - 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) “最小交叉熵阈值”模式识别,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 AutoThresholder 代码, 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’: 应用高斯滤波器(有关自定义 sigma 值,请参见 - param参数)
- ‘mean’: 应用算术平均滤波器 
- ‘median’: 应用中值排序滤波器 
 - 默认情况下,使用 ‘gaussian’ 方法。 
- 偏移量 (offset)浮点数 (float), 可选
- 从邻域的加权平均值中减去的常数,用于计算局部阈值。默认偏移量为 0。 
- mode{‘reflect’,‘constant’,‘nearest’,‘mirror’,‘wrap’},可选
- mode 参数确定如何处理数组边界,其中 cval 是 mode 等于 ‘constant’ 时的值。默认为 ‘reflect’。 
- param{int, function}, 可选
- 指定 ‘gaussian’ 方法的 sigma 值,或指定 ‘generic’ 方法的函数对象。此函数将局部邻域的扁平数组作为单个参数,并返回中心像素的计算阈值。 
- cvalfloat,可选
- 如果 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)[source]#
- 根据灰度值的平均值返回阈值。 - 参数:
- image(M, N[, …]) ndarray
- 灰度输入图像。 
 
- 返回:
- thresholdfloat
- 上限阈值。所有强度高于此值的像素都被假定为前景。 
 
 - 参考文献 [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)[source]#
- 根据最小值方法返回阈值。 - 如果未提供,则计算输入 - image的直方图,并对其进行平滑处理,直到只剩下两个最大值。然后,两者之间的最小值是阈值。- 必须提供 image 或 hist。如果提供 hist,则忽略图像的实际直方图。 - 参数:
- image(M, N[, …]) ndarray, 可选
- 灰度输入图像。 
- nbinsint,可选
- 用于计算直方图的 bin 数。此值对于整数数组将被忽略。 
- max_num_iterint, 可选
- 平滑直方图的最大迭代次数。 
- hist数组或数组的 2 元组,可选
- 从中确定阈值的直方图和相应的 bin 中心强度数组。或者,只能传递直方图。 
 
- 返回:
- thresholdfloat
- 上限阈值。所有强度高于此值的像素都被假定为前景。 
 
- 引发:
- 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)[source]#
- 生成 - classes-1 个阈值,按照 Otsu 的多类方法划分- image中的灰度级。- 选择阈值是为了最大化阈值灰度级类之间成对方差的总和。有关更多详细信息,请参见注释和 [1]。 - 必须提供图像或直方图。如果提供了直方图,则忽略图像的实际直方图。 - 参数:
- image(M, N[, …]) ndarray, 可选
- 灰度输入图像。 
- classesint, 可选
- 要进行阈值处理的类数,即生成的区域数。 
- nbinsint,可选
- 用于计算直方图的 bin 的数量。此值对于整数数组被忽略。 
- hist数组或数组的 2 元组,可选
- 从中确定阈值的直方图,以及可选的对应 bin 中心强度数组。如果没有提供直方图,此函数将从图像中计算它(参见注释)。 
 
- 返回:
- thresh数组
- 包含所需类的阈值的数组。 
 
- 引发:
- ValueError
- 如果 - image包含的灰度值少于所需的类数。
 
 - 注释 - 此实现依赖于一个 Cython 函数,其复杂度为 \(O\left(\frac{Ch^{C-1}}{(C-1)!}\right)\),其中 \(h\) 是直方图 bin 的数量,\(C\) 是所需的类数。 - 如果未给出直方图,此函数将使用 - skimage.exposure.histogram,其行为与- np.histogram不同。虽然两者都允许,但请使用前者以保持一致的行为。- 输入图像必须是灰度图像。 - 参考文献 [1]- Liao, P-S., Chen, T-S. 和 Chung, P-C.,“多级阈值的快速算法”,信息科学与工程杂志 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.,“多重 Otsu 阈值”,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)[源代码]#
- 将 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,《数字图像处理导论》,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) 
- skimage.filters.threshold_otsu(image=None, nbins=256, *, hist=None)[源代码]#
- 根据 Otsu 方法返回阈值。 - 必须提供图像或直方图。如果提供了直方图,则忽略图像的实际直方图。 - 参数:
- 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)[源代码]#
- 将 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,“自适应文档图像二值化”,《模式识别》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 
- skimage.filters.threshold_triangle(image, nbins=256)[源代码]#
- 根据三角形算法返回阈值。 - 参数:
- 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 AutoThresholder 代码, 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 方法返回阈值。必须提供图像或 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 AutoThresholder 代码, 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_range)布尔值 (bool), 可选
- 是否保留原始值范围。否则,根据 - img_as_float的约定转换输入图像。另请参阅 https://scikit-image.cn/docs/dev/user_guide/data_types.html
- channel_axisint 或 None,可选
- 如果为 None,则假定图像为灰度(单通道)图像。否则,此参数指示数组的哪个轴对应于通道。 - 在 0.19 版本中添加:在 0.19 中添加了 - channel_axis。
 
- 返回:
- output(M[, …][, C]) float 的 ndarray
- 应用了锐化掩模的图像。 
 
 - 注释 - 锐化掩模是一种图像锐化技术。它是一种线性图像操作,并且在数值上是稳定的,不像反卷积那样是一个不适定问题。由于这种稳定性,它通常优于反卷积。 - 主要思想如下:锐化细节被识别为原始图像及其模糊版本之间的差异。在缩放步骤之后,将这些细节添加回原始图像 - 增强图像 = 原始图像 + amount * (原始图像 - 模糊图像) - 当独立将此滤波器应用于多个颜色图层时,可能会发生颜色溢出。通过仅在合适的颜色空间(如 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)[源代码]#
- 最小均方误差 (维纳) 逆滤波器。 - 参数:
- data(M, N) ndarray
- 输入数据。 
- K浮点数或 (M, N) ndarray
- 噪声功率谱与未退化图像功率谱之间的比率。 
- impulse_response可调用 f(r, c, **filter_params)
- 滤波器的脉冲响应。 请参阅 LPIFilter2D.__init__。 
- filter_params字典,可选
- 脉冲响应函数的其他关键字参数。 
 
- 其他参数:
- predefined_filterLPIFilter2D
- 如果您需要在不同的图像上多次应用相同的过滤器,请构造 LPIFilter2D 并在此处指定。 
 
 
- skimage.filters.window(window_type, shape, warp_kwargs=None)[源代码]#
- 返回给定大小和维度的 n 维窗口。 - 参数:
- window_type字符串、浮点数或元组
- 要创建的窗口类型。此处允许使用 - scipy.signal.get_window支持的任何窗口类型。有关当前列表,请参见下面的注释,或者查阅您机器上 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 (需要功率,宽度) - 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)
- 生成脉冲响应的函数。 - 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) 
 
- impulse_response可调用 
 - 示例 - 不进行系数归一化的高斯滤波器 - >>> def filt_func(r, c, sigma=1): ... return np.exp(-(r**2 + c**2)/(2 * sigma**2)) >>> filter = LPIFilter2D(filt_func) 
 
 
     
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
