scikit-image 0.20.0 (2023-02-28)#
scikit-image 是一个基于 SciPy 构建的图像处理工具箱,它包含用于分割、几何变换、色彩空间操作、分析、滤波、形态学、特征检测等算法。
有关更多信息、示例和文档,请访问我们的网站:https://scikit-image.cn
在此版本中,skimage.measure
中的许多函数现在支持具有不同体素间距的各向异性图像。
进行了许多性能改进,例如在 skimage.morphology
中支持足迹分解
文档中添加了四个新的图库示例,包括新的交互式示例“跟踪金属合金的凝固”。
此版本完成了向更灵活的 channel_axis
参数的转换,用于指示多通道图像,并包含其他一些弃用,这些弃用使 API 更加一致和具有表达力。
最后,为了准备在即将发布的 Python 3.12 版本中删除 distutils
,我们用 meson
和静态 pyproject.toml
规范替换了我们的构建系统。
此版本支持 Python 3.8–3.11。
新功能和改进#
在
skimage.morphology
中支持对几个足迹生成和消耗函数进行足迹分解。通过将足迹分解为几个较小的足迹,可以潜在地加速形态学操作。分解的足迹可以使用skimage.morphology
中函数rectangle
、diamond
、disk
、cube
、octahedron
、ball
和octagon
的新参数decomposition
生成。skimage.morphology
中函数binary_erosion
、binary_dilation
、binary_opening
、binary_closing
、erosion
、dilation
、opening
、closing
、white_tophat
和black_tophat
的footprint
参数现在接受 2 元素元组序列(footprint_i, num_iter_i)
,其中序列的每个条目i
都包含一个足迹以及应该迭代应用的次数。这是上述足迹分解产生的形式 (#5482, #6151)。支持具有不同体素间距的各向异性图像。可以使用
skimage.measure
中以下函数的新参数spacing
定义间距:regionprops
、regionprops_table
、moments
、moments_central
、moments_normalized
、centroid
、inertia_tensor
和inertia_tensor_eigvals
。体素间距在skimage.measure.regionprops
中用于以下现有属性:area
、area_bbox
、centroid
、area_convex
、extent
、feret_diameter_max
、area_filled
、inertia_tensor
、moments
、moments_central
、moments_hu
、moments_normalized
、perimeter
、perimeter_crofton
、solidity
、moments_weighted_central
和moments_weighted_hu
。新的属性num_pixels
和coords_scaled
也可用。有关更多详细信息,请参阅各自的文档字符串 (#6296)。在
skimage.morphology
中添加各向同性二值形态学算子isotropic_closing
、isotropic_dilation
、isotropic_erosion
和isotropic_opening
。这些函数返回与非各向同性对应函数相同的结果,但对于大型圆形结构元素执行速度更快 (#6492)。将新的共定位指标
pearson_corr_coeff
、manders_coloc_coeff
、manders_overlap_coeff
和intersection_coeff
添加到skimage.measure
(#6189)。通过新的参数
method
,在skimage.metrics.hausdorff_distance
中支持修改后的 Hausdorff 距离 (MHD) 指标。与有向 Hausdorff 距离 (HD) 相比,MHD 对异常值可能更稳健 (#5581)。添加两个数据集
skimage.data.protein_transport
和skimage.data.nickel_solidification
(#6087)。向
skimage.feature.hessian_matrix
添加新参数use_gaussian_derivatives
,该参数允许通过与高斯导数卷积来计算 Hessian 矩阵 (#6149)。向
skimage.filters.butterworth
添加新参数squared_butterworth
和npad
,它们分别支持传统滤波或平方滤波和边缘填充 (#6251)。支持从具有任意序列的
load_pattern
构建skimage.io.ImageCollection
,只要提供了匹配的load_func
即可 (#6276)。向
skimage.metrics.adapted_rand_error
添加新参数alpha
,允许控制赋予精度和召回率的权重 (#6472)。为
skimage.measure.grid_points_in_poly
添加新参数binarize
,以选择性地返回标签,指示像素是在多边形内部、外部还是边界上(#6515)。为
skimage.measure.convex_hull_image
添加新参数include_borders
,以选择性地从最终的凸包掩码中排除顶点或边(#6515)。为
skimage.measure.regionprops
添加新参数offsets
,可以选择性地指定原点的坐标,并影响属性coords_scaled
和coords
(#3706)。为
skimage.registration.phase_cross_correlation
添加新参数disambiguate
,以选择性地消除周期性位移的歧义(#6617)。在
skimage.filters.farid
(Farid & Simoncelli 滤波器)中支持 n 维图像(#6257)。在
skimage.restoration.wiener
中支持 n 维图像(#6454)。在
skimage.transform.EuclideanTransform
以及skimage.transform.SimilarityTransform.scale
中支持属性rotation
和translation
的三维表示(#6367)。允许在
skimage.morphology.flood_fill
中使用具有非相邻像素作为邻居的足迹(#6236)。在
skimage.transform
中的AffineTransform
、EssentialMatrixTransform
、EuclideanTransform
、FundamentalMatrixTransform
、GeometricTransform
、PiecewiseAffineTransform
、PolynomialTransform
、ProjectiveTransform
、SimilarityTransform
、estimate_transform
和matrix_transform
中一致地支持类数组对象(#6270)。
性能#
通过将其部分实现移植到 Cython,提高
skimage.feature.canny
的性能(约 2 倍加速)(#6387)。提高
skimage.feature.hessian_matrix_eigvals
和二维skimage.feature.structure_tensor_eigenvalues
的性能(约 2 倍加速)(#6441)。通过避免冗余计算,提高
skimage.measure.moments_central
的性能(#6188)。通过仅在需要时加载 matplotlib 插件,减少
skimage.io
的导入时间(#6550)。将 scikit-learn 中的 RANSAC 改进合并到
skimage.measure.ransac
中,从而减少迭代次数(#6046)。使用
skimage.exposure.match_histograms
提高无符号整数数据的直方图匹配性能。(#6209,#6354)。减少
skimage.filters
中脊滤波器meijering
、sato
、frangi
和hessian
的内存消耗(#6509)。减少
skimage.feature
中blob_dog
、blob_log
和blob_doh
的内存消耗(#6597)。在
skimage.morphology.reconstruction
中内部使用最小所需大小的无符号整数,这允许该函数以更高的精度或在更大的数组上操作。以前,使用的是 int32。(#6342)。在
skimage.filters.rank_order
中使用最小所需大小的无符号整数,这允许该函数以更高的精度或在更大的数组上操作。以前,返回的labels
和original_values
始终为 uint32 类型。(#6342)。
更改和新的弃用#
将 Python 3.8 设置为最低支持版本(#6679)。
重写
skimage.filters.meijering
、skimage.filters.sato
、skimage.filters.frangi
和skimage.filters.hessian
,以更密切地匹配已发布的算法。此更改向后不兼容,并且将导致与先前实现不同的输出值。Hessian 矩阵的计算现在更加准确。当其中一个 Hessian 特征值的符号与所需极性的脊不兼容时,滤波器现在将正确设置为零。Frangi 滤波器的 gamma 常数现在根据最大 Hessian 范数自适应设置(#6446)。将
skimage.future.graph
中的函数移动到skimage.graph
。这会影响cut_threshold
、cut_normalized
、merge_hierarchical
、rag_mean_color
、RAG
、show_rag
和rag_boundary
(#6674)。如果模型未确定,则在
skimage.measure.LineModelND.estimate
中返回False
而不是引发错误(#6453)。如果模型未确定,则在
skimage.measure.CircleModel.estimate
中返回False
而不是发出警告(#6453)。将
skimage.filters.inverse
重命名为skimage.filters.inverse_filter
。skimage.filters.inverse
已被弃用,将在下一个版本中删除(#6418,#6701)。将最低支持的依赖项更新为
numpy>=1.20
(#6565)。将最低支持的依赖项更新为
scipy>=1.8
(#6564)。将最低支持的依赖项更新为
networkx>=2.8
(#6564)。将最低支持的依赖项更新为
pillow>=9.0.1
(#6402)。将最低支持的依赖项更新为
setuptools 67
(#6754)。将可选的最低支持依赖项更新为
matplotlib>=3.3
(#6383)。警告
skimage.feature.local_binary_pattern
的非整数图像输入。当相邻像素之间存在小的数值差异时,将该函数应用于浮点图像可能会产生意外的结果(#6272)。如果
skimage.registration.phase_cross_correlation
仅返回位移向量,则发出警告。从下一个版本开始,此函数将始终返回一个包含三个元素的元组(位移向量、误差、相位差)。使用return_error="always"
来消除此警告并切换到此新行为(#6543)。如果对于浮点数据未指定
data_range
,则在skimage.metrics.structural_similarity
中发出警告(#6612)。在
skimage.filters.gaussian
中已弃用颜色通道的自动检测,如果未显式设置参数channel_axis
,则会发出警告(#6583)。
已完成的弃用#
移除计划在推迟的 1.0 版本中移除的
skimage.viewer
(#6160)。从
skimage.feature.peak_local_max
中移除已弃用的参数indices
(#6161)。移除
skimage.feature.structure_tensor_eigvals
(它已被skimage.feature.structure_tensor_eigenvalues
替换),并将skimage.feature.structure_tensor
中的默认参数值更改为order="rc"
(#6162)。从
skimage.measure.find_contours
中移除已弃用的参数array
,使用image
代替 (#6163)。移除已弃用的 Qt IO 插件和
skivi
控制台脚本 (#6164)。移除
skimage.measure.marching_cubes
中已弃用的参数值method='_lorensen'
(#6230)。移除已弃用的参数
multichannel
;请改用channel_axis
。这会影响skimage.draw.random_shapes
、skimage.exposure.match_histograms
、skimage.feature.multiscale_basic_features
、skimage.feature.hog
、skimage.feature.difference_of_gaussians
、skimage.filters.unsharp_mask
和skimage.metrics.structural_similarity
。在skimage.restoration
中,这会影响cycle_spin
、denoise_bilateral
、denoise_tv_bregman
、denoise_tv_chambolle
、denoise_wavelet
、estimate_sigma
、inpaint_biharmonic
和denoise_nl_means
。在skimage.segmentation
中,这会影响felzenszwalb
、random_walker
和slic
。在skimage.transform
中,这会影响rescale
、warp_polar
、pyramid_reduce
、pyramid_expand
、pyramid_gaussian
和pyramid_laplacian
。在skimage.util
中,这会影响montage
和apply_parallel
(#6583)。移除已弃用的参数
selem
;请改用footprint
。在skimage.filters
中,这会影响median
、autolevel_percentile
、gradient_percentile
、mean_percentile
、subtract_mean_percentile
、enhance_contrast_percentile
、percentile
、pop_percentile
、sum_percentile
、threshold_percentile
、mean_bilateral
、pop_bilateral
、sum_bilateral
、autolevel
、equalize
、gradient
、maximum
、mean
、geometric_mean
、subtract_mean
、median
、minimum
、modal
、enhance_contrast
、pop
、sum
、threshold
、noise_filter
、entropy
、otsu
、windowed_histogram
和majority
。在skimage.morphology
中,这会影响flood_fill
、flood
、binary_erosion
、binary_dilation
、binary_opening
、binary_closing
、h_maxima
、h_minima
、local_maxima
、local_minima
、erosion
、dilation
、opening
、closing
、white_tophat
、black_tophat
和reconstruction
(#6583)。从
skimage.filters.threshold_minimum
、skimage.morphology.thin
和skimage.segmentation.chan_vese
中移除已弃用的参数max_iter
;请改用max_num_iter
(#6583)。从
skimage.segmentation.active_contour
中移除已弃用的参数max_iterations
;请改用max_num_iter
(#6583)。从
skimage.measure.label
中移除已弃用的参数input
;请改用label_image
(#6583)。从
skimage.measure.regionprops
和skimage.segmentation.active_contour
中移除已弃用的参数coordinates
(#6583)。从
skimage.measure.perimeter
中移除已弃用的参数neighbourhood
;请改用neighborhood
(#6583)。从
skimage.morphology.rectangle
中移除已弃用的参数height
和width
;请改用ncols
和nrows
(#6583)。从
skimage.morphology.remove_small_objects
、skimage.morphology.remove_small_holes
和skimage.segmentation.clear_border
中移除已弃用的参数in_place
;请改用out
(#6583)。从
skimage.restoration.richardson_lucy
、skimage.segmentation.morphological_chan_vese
和skimage.segmentation.morphological_geodesic_active_contour
中移除已弃用的参数iterations
;请改用num_iter
(#6583)。移除对
skimage.restoration.unsupervised_wiener
的参数user_params
中已弃用的键"min_iter"
和"max_iter"
的支持;请改用"min_num_iter"
和"max_num_iter"
(#6583)。从
skimage.feature
中移除已弃用的函数greycomatrix
和greycoprops
(#6583)。移除已弃用的子模块
skimage.morphology.grey
和skimage.morphology.greyreconstruct
;请改用skimage.morphology
(#6583)。移除已弃用的子模块
skimage.morphology.selem
;请改用skimage.morphology.footprints
(#6583)。移除已弃用的
skimage.future.graph.ncut
(它已被skimage.graph.cut_normalized
替换)(#6685)。
错误修复#
修复
skimage.exposure.adjust_gamma
中的舍入误差 (#6285)。将
skimage.draw.rectangle
的输出坐标四舍五入并转换为int
,即使输入坐标使用float
。此修复确保输出可以像其他绘制函数一样用于索引 (#6501)。避免在
skimage.feature.peak_local_max
中,如果峰值小于 0,则意外排除图像边界附近的峰值 (#6502)。当使用最近邻插值 (
order == 0
) 和整数输入数据类型时,默认避免在skimage.transform.resize
中进行抗锯齿处理 (#6503)。在
skimage.segmentation.slic
中进行重新缩放时使用掩码。以前,当重新缩放图像以使紧凑性的选择对图像值不敏感时,会忽略掩码。新的行为使得可以屏蔽诸如numpy.nan
或numpy.infinity
等值。此外,如果输入image
有两个维度并且指定了channel_axis
,则会引发错误,表明该图像是多通道的 (#6525)。修复在将元组传递给
skimage.feature.blog_dog
和skimage.feature.blob_log
中的参数exclude_border
时发生的意外错误 (#6533)。如果在参数
labels
中没有提供任何正值的种子,则在skimage.segmentation.random_walker
中引发特定的错误消息 (#6562)。当所需的
intensity_image
不可用时,从skimage.measure.regionprops
访问区域属性时引发特定的错误消息 (#6584)。如果八度图像太小,则通过提前中断来避免
skimage.feature.ORB.detect_and_extract
中的错误 (#6590)。修复具有 Fortran 内存布局的图像的
skimage.restoration.inpaint_biharmonic
(#6263)。修复
skimage.filters.gaussian
中颜色通道的自动检测(此行为已弃用,请参阅新的弃用)(#6583)。修复
skimage.color.lab2rgb
中警告的 stacklevel (#6616)。修复
skimage.feature.hessian_matrix
的返回值顺序,如果请求order='xy'
用于超过 2 个维度的图像,则引发错误 (#6624)。修复
skimage.filters.rank
中的函数中误导性的异常,该异常没有提及也支持 2D 图像 (#6666)。修复
skimage.graph.RAG.merge_nodes
中权重的就地合并 (#6692)。修复内部
heappush
函数中不断增长的内存错误并消除编译器警告 (#6727)。修复
Cascade.detect_multi_scale
中关于结构体初始化的编译警告 (#6728)。
文档#
新增#
添加图库示例“分解平面足迹(结构元素)” (#6151)。
添加图库示例“巴特沃斯滤波器”并改进
skimage.filters.butterworth
的文档字符串 (#6251)。添加图库示例“将文本渲染到图像上” (#6431)。
添加图库示例“跟踪金属合金的凝固” (#6469)。
添加图库示例“共定位指标” (#6189)。
添加支持页面 (
.github/SUPPORT.md
) 以帮助 GitHub 用户找到适当的支持资源 (#6171, #6575)。将
CITATION.bib
添加到存储库中以帮助引用 scikit-image (#6195)。添加使用基于 Meson 的新构建系统和
dev.py
的用法说明 (#6600)。
改进 & 更新#
使图库示例“构建图像金字塔”适应更多样化的形状图像和下采样因子 (#6293)。
使用 plotly 的交互式切片浏览器改编图库示例“探索 3D 图像(细胞)” (#4953)。
阐明
weights
术语的含义,并重写skimage.restoration.denoise_tv_bregman
和skimage.restoration.denoise_tv_chambolle
的文档字符串 (#6544)。阐明启用的
watershed_line
参数不会在skimage.segmentation.watershed
中捕获相邻标记区域之间的边界 (#6280)。阐明
skimage.morphology.skeletonize
接受任何输入类型的image
(#6322)。在我们的图库中使用网格缩略图来演示
skimage.data
中可用的不同图像和数据集 (#6298, #6300, #6301)。调整
skimage.restoration.wiener
的文档字符串示例中的balance
,以获得不太模糊的结果 (#6265)。记录
skimage.io.imread
和skimage.io.imsave
中对 Path 对象 的支持 (#6361)。如果无法对离散图像进行阈值处理,则改进
skimage.filters.threshold_multiotsu
中的错误消息 (#6375)。在图库示例“扩展分割标签而不重叠”中也显示原始未标记的图像 (#6396)。
记录在 0.19 版本中将
grey*
重构为skimage.feature.graymatrix
和skimage.feature.graycoprops
(#6420)。记录核心开发者指南中新功能的功能包含标准 (#6488)。
在图库示例“分割和超像素算法的比较”中,打印应用 Watershed 后分割的数量 (#6535)。
在拉取请求模板中扩展审查指南 (#6208)。
在拉取请求模板中提供预提交 PR 指令 (#6578)。
警告并解释
skimage.metricts.structural_similarity
的文档字符串中对浮点数据的处理 (#6595)。修复图库示例“测量核膜处的荧光强度”中动画
imshow
的强度自动缩放 (#6599)。在
INSTALL.rst
中阐明对scikit-image[data]
和 pooch 的依赖性 (#6619)。在 conda 的安装说明中不要使用令人困惑的循环 (#6672)。
在
skimage.color
中的lab2xyz
、rgb2lab
、lab2lch
和lch2lab
中记录 L*a*b* 和 L*Ch 的值范围 (#6688, #6697, #6719)。在
skimage.feature.local_binary_pattern
的文档字符串中使用更一致的样式 (#6736)。
修复,拼写和小的调整#
移除已弃用的引用,并在图库示例“Marching Cubes”中使用
skimage.measure.marching_cubes
(#6377)。修复
skimage.morphology.flood
的文档字符串中connectivity
参数的描述 (#6534)。修复
skimage.metrics.hausdorff_distance
的文档字符串中的格式问题 (#6203)。修复
skimage.measure.moments_hu
的文档字符串中的拼写错误 (#6016)。修复
skimage.util.random_noise
中 mode 参数的格式问题 (#6532)。修复 SKIP 3 中的断开链接 (#6445)。
修复
skimage.filters.sobel
的文档字符串中的断开链接 (#6474)。将 “neighbour” 更改为美式英语拼写 “neighbor” (#6204)。
将缺失的版权信息添加到 LICENSE.txt 并使用符合 SPDX 标识符的格式 (#6419)。
将
skimage.morphology.footprint_from_sequence
包含在公共 API 文档中 (#6555)。更正
skimage.exposure.rescale_intensity
的文档字符串中关于返回类型的注释 (#6582)。将 scikit-image 的邮件地址更新为新域名 discuss.scientific-python.org (#6255)。
删除
doc/source/user_guide/getting_help.rst
中对已弃用邮件列表的引用 (#6575)。在图库示例中使用 “center” 代替 “centre”,使用 “color” 代替 “colour” (#6421, #6422)。
将对
api_changes.rst
的引用替换为release_dev.rst
(#6495)。澄清指向最新版本发行说明的标题 (#6508)。
在
skimage.measure.regionprops
的错误消息中添加缺失的空格 (#6545)。应用 codespell 来修复常见的拼写错误 (#6537)。
在 normalized_mutual_information 的文档字符串中的数学指令中添加缺失的空格 (#6549)。
修复
skimage.morphology.isotropic_
函数中文档字符串标题下划线的长度 (#6628)。修复由于文件名
plot_thresholding.py
重复导致的绘图顺序问题 (#6644)。消除图库示例
plot_equalize
中的 numpy 弃用警告 (#6650)。修复图库示例
plot_rank_filters
中 opening 和 closing 的交换问题 (#6652)。消除图库示例
in plot_log_gamma.py
中的 numpy 弃用警告 (#6655)。删除图库示例“Tinting gray-scale images”中的警告和不必要的消息 (#6656)。
更新贡献指南,建议在源代码树之外创建虚拟环境 (#6675)。
修复
skimage.data.coffee
的文档字符串中的拼写错误 (#6740)。在
skimage.graph.merge_nodes
的文档字符串中添加缺失的反引号 (#6741)。修复
skimage.metrics.variation_of_information
中的拼写错误 (#6768)。
42 位审阅者为本次发布做出了贡献 [按名字或登录名首字母排序]#
Abhijeet Parida
Albert Y. Shih
Alex (sashashura)
Alexandre de Siqueira
Antony Lee
Ben Greiner
Carlo Dri
Chris Roat
Daniele Nicolodi
Daria
Dudu Lasry
Eli Schwartz
François Boulogne
Gregory Lee
Gus Becker
Jacob Rosenthal
James Gao
Jan-Hendrik Müller
Jarrod Millman
Juan DF
Juan Nunez-Iglesias
Lars Grüter
Malinda (maldil)
Marianne Corvellec
Mark Harfouche
Martijn Courteaux
Marvin Albert
Matthias Bussonnier
Oren Amsalem
Ralf Gommers
Riadh Fezzani
Robert Haase
Robin Thibaut
Sandeep N Menon
Sanghyeok Hyun
Sebastian Berg
Sebastian Wallkötter
Simon-Martin Schröder
Stefan van der Walt
Thanushi Peiris
Thomas Voigtmann
Tim-Oliver Buchholz