scikit-image 0.20.0 (2023-02-28)#
scikit-image 是一个基于 SciPy 的图像处理工具箱,包含用于分割、几何变换、颜色空间操作、分析、滤波、形态学、特征检测等算法的实现。
更多信息、示例和文档,请访问我们的网站:https://scikit-image.org
通过此版本,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)。向
skimage.measure添加新的共定位指标pearson_corr_coeff、manders_coloc_coeff、manders_overlap_coeff和intersection_coeff(#6189)。在
skimage.metrics.hausdorff_distance中通过新参数method支持 Modified Hausdorff Distance (MHD) 度量。与 directed Hausdorff Distance (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中支持 n 维图像(Farid & Simoncelli 滤波器)(#6257)。在
skimage.restoration.wiener中支持 n 维图像 (#6454)。在
skimage.transform.EuclideanTransform中为属性rotation和translation以及skimage.transform.SimilarityTransform.scale支持三个维度 (#6367)。在
skimage.morphology.flood_fill中允许非相邻像素作为邻居 (#6236)。在
AffineTransform、EssentialMatrixTransform、EuclideanTransform、FundamentalMatrixTransform、GeometricTransform、PiecewiseAffineTransform、PolynomialTransform、ProjectiveTransform、SimilarityTransform、estimate_transform和matrix_transform中一致地支持数组类对象skimage.transform(#6270)。
性能#
通过将其实现的一部分移植到 Cython,改进了
skimage.feature.canny的性能(约2倍加速)(#6387)。改进了
skimage.feature.hessian_matrix_eigvals和 2Dskimage.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)。在
skimage.metrics.structural_similarity中警告,如果data_range未在浮点数据情况下指定 (#6612)。在
skimage.filters.gaussian中,颜色通道的自动检测已被弃用,如果未明确设置参数channel_axis,则会发出警告 (#6583)。
已完成弃用#
移除
skimage.viewer,该模块原计划在推迟的1.0版本中移除 (#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)。当访问
skimage.measure.regionprops的区域属性时,如果所需的intensity_image不可用,则引发特定错误信息 (#6584)。通过在八度图像过小时提前中断来避免
skimage.feature.ORB.detect_and_extract中的错误 (#6590)。修复
skimage.restoration.inpaint_biharmonic以处理具有 Fortran 顺序内存布局的图像 (#6263)。修复了
skimage.filters.gaussian中颜色通道的自动检测(此行为已被弃用,请参阅新的弃用说明)(#6583)。修复
skimage.color.lab2rgb中的警告堆栈级别(#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)。
添加图库示例 “Butterworth 滤波器” 并改进
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)。
在图库示例“分割和超像素算法的比较”中应用分水岭后打印段数 (#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中模式参数的格式 (#6532)。修复 SKIP 3 中的断链 (#6445)。
修复
skimage.filters.sobel文档字符串中的断链 (#6474)。将“neighbour”改为美式拼写“neighbor” (#6204)。
将缺失的版权信息添加到 LICENSE.txt 中,并根据 SPDX 标识符进行格式化 (#6419)。
在公共API文档中包含
skimage.morphology.footprint_from_sequence(#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 的 docstring 中添加数学指令中缺失的空格 (#6549)。
修复
skimage.morphology.isotropic_函数中文档字符串标题下划线的长度 (#6628)。修复由于文件名
plot_thresholding.py导致的重复示例的绘图顺序 (#6644)。在图库示例
plot_equalize中消除 numpy 弃用警告 (#6650)。修复了图库示例
plot_rank_filters中打开和关闭的交换 (#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
阿尔伯特·Y·徐
Alex (sashashura)
亚历山大·德·西奎拉
安东尼·李
本·格雷纳
卡洛·德里
克里斯·罗特
丹尼尔·尼科洛迪
Daria
Dudu Lasry
Eli Schwartz
弗朗索瓦·布洛涅
格雷戈里·李
Gus Becker
雅各布·罗森塔尔
高杰
扬-亨德里克·穆勒
Jarrod Millman
胡安 DF
Juan Nunez-Iglesias
Lars Grüter
Malinda (maldil)
玛丽安·科尔维莱克
马克·哈福克
Martijn Courteaux
马文·阿尔伯特
马蒂亚斯·布索尼耶
Oren Amsalem
Ralf Gommers
Riadh Fezzani
罗伯特·哈斯
罗宾·蒂博
桑迪普·N·梅农
Sanghyeok Hyun
塞巴斯蒂安·伯格
塞巴斯蒂安·瓦尔克特
西蒙-马丁·施罗德
斯蒂芬·范·德·瓦特
Thanushi Peiris
托马斯·福伊特曼
蒂姆-奥利弗·布赫霍尔茨