#图像处理 #天体物理学 #流域 #rustronomy

rustronomy-watershed

纯Rust实现的分割和合并流域算法

7个不稳定版本 (3个重大更新)

0.4.1 2023年3月16日
0.4.0 2023年3月16日
0.3.2 2023年2月16日
0.3.1 2023年1月28日
0.1.0 2022年12月22日

#442 in 算法

EUPL-1.2

160KB
2K SLoC

Rustronomy watershed - 纯Rust实现的分割和合并流域算法

License: EUPL v1.2 Crates.io Downloads

本包是Rustronomy项目的一部分

Rustronomy-watershed是一个纯Rust实现的分割和合并流域算法(参见Digabel & Lantuéjoul, 1978[^1])。

特性 (查看文档)

本包包括流域算法的两个主要版本。

  1. 合并流域算法,这是一个空填充算法,可以用来识别图像中的连通区域。
  2. 分割流域算法,这是一个著名的图像分割算法。

此外,rustronomy-watershed还提供了一些额外功能,可以通过Cargo功能门来访问。所有额外功能的列表见下文

画廊

加拿大银河平面调查(CGPS)的数据

合并流域算法演示

分割流域算法演示

快速入门

要在Cargo项目中使用Rustronomy-watershed的最新版本,将rustronomy-watershed crate作为依赖项添加到您的Cargo.toml文件中

[dependencies]
rustronomy-watershed = "0.3.2"

要在Jupyter笔记本中使用Rustronomy-fits,执行包含以下代码的单元格

:dep rustronomy-watershed = {version = "0.3.2"}

请勿使用0.3之前的任何版本,因为这些版本在合并流域算法的实现中包含一个重大错误

如果您想使用rustronomy-watershed的最新(不稳定)开发版本,您可以通过使用git字段(从仓库获取最新版本)而不是version字段(从crates.io下载最新发布版本)来实现。

{git = "https://github.com/smups/rustronomy-watershed"}

简例:计算随机场的流域变换

在这个例子中,我们计算均匀随机场的分水岭变换。随机场可以使用 ndarray_rand crate 生成。要配置新的分水岭变换,可以使用包含在 rustronomy_watershed 预言中的 TransformBuilder 结构体。

use ndarray as nd;
use rustronomy_watershed::prelude::*;
use ndarray_rand::{rand_distr::Uniform, RandomExt};

//Create a random uniform distribution
let rf = nd::Array2::<u8>::random((512, 512), Uniform::new(0, 254));
//Set-up the watershed transform
let watershed = TransformBuilder::default().build_segmenting().unwrap();
//Find minima of the random field (to be used as seeds)
let rf_mins = watershed.find_local_minima(rf.view());
//Execute the watershed transform
let output = watershed.transform(rf.view(), &rf_mins);

Cargo 功能门

默认情况下,所有功能门后面的功能都是 禁用的

  • jemalloc:此功能启用 jemalloc 分配器。根据 jemalloc 网站的描述:“jemalloc 是一个通用的 malloc(3) 实现,强调碎片避免和可伸缩的并发支持。”。jemalloc 通过使用 jemalloc crate 启用,这会显著增加编译时间。然而,启用此功能也可以极大地提高运行时性能,尤其是在具有更多(>6 个或更多)核心的机器上。要在主机系统上编译带有 rustronomy-watershedjemalloc 功能,必须安装 jemalloc。
  • plots:启用此功能后,rustronomy-watershed 将在水位提升时生成分水岭变换的绘图。有关如何使用此功能的详细信息,请参阅 crate 级别的文档。绘图支持将 plotters crate 作为依赖项添加,这将增加编译时间,并在 Linux 系统上需要安装一些软件包,请参阅 plotters 文档以获取详细信息
  • progress:此功能启用了分水岭算法的进度条。启用此功能将添加 indicatif crate 作为依赖项,这不应显著减慢编译时间。
  • debug:此功能启用了调试和性能监控输出。这可能会对性能产生负面影响。启用此功能不会添加额外的依赖项。

许可证

License: EUPL v1.2

Rustronomy 生态系统中的所有 crate 都在 EUPLv1.2(或更高版本)许可证下授权。

Rustronomy-watershed 明确不采用 Rust 生态系统常见的双 Apache/MIT 许可证。相反,它根据 欧洲联盟公共许可证 v1.2 的条款授权。.

Rustronomy 是一个科学项目,并拥抱开放科学和自由开源软件的价值观。封闭和付费的科学软件套件阻碍了新技术和研究方法的开发,并将大量必要的公共资金从研究人员转移到大型出版和软件公司。

请参阅 LICENSE.md 文件,其中包含欧盟所有 22 种官方语言的 EUPL 文本,以及 LICENSE-EN.txt 中的许可证英文版本。

[^1]: H. Digabel 和 C. Lantuéjoul. 迭代算法。 在 1978 年 10 月的第二届欧洲定量材料科学、生物学和医学分析研讨会论文集中。

依赖项

~3–13MB
~141K SLoC