#图像处理 #计算机视觉 #形态学 #细化 #边缘检测

skeletonize

一个用于二值图像线细化的库,包括边缘检测和阈值函数用于预处理

2 个不稳定版本

0.2.0 2023年1月14日
0.1.0 2021年5月1日

#543图像

MIT/Apache

34KB
433

skeletonize

Build Status Crates.io Docs.rs

"skeletonize" original text and line thinned text

二值图像的线细化库,包括边缘检测和阈值函数用于将图像预处理成二值图像。

线细化的目标是去除图像中多余的像素,直到图像中的线变得只有一像素宽,类似于原始模式的“骨骼”。细化对于去除应用了图像处理滤波器(如边缘检测)的图像中的噪声非常有用。线细化类似于另一种形态学算子——腐蚀。

细化算法基于以下论文:张 & 苏恩,1984陈 & 胡苏恩,1988。请参阅 参考

此crate需要输入类型来自 image crate。要使用此crate,将以下内容添加到您的 Cargo.toml

[dependencies.skeletonize]
version = "0.2"

特性

  • 2 种线细化算法
  • 支持黑色或白色前景色
  • Sobel算子边缘检测
  • 二值化(将图像转换为仅黑白像素)的阈值

示例 skeletonize.rs 是一个命令行程序,可以从仓库的 发布 页面下载二进制可执行文件。

细化算法比较

应将图像放大到100%以避免缩放伪影。

Original image and line thinning processed images Comparison of Standard and Modified algorithms
第一幅图像,从左到右:陈 & 胡苏恩,1988年图7(b)和7(c),标准算法结果,修改算法结果。
第二幅图像:标准修改 标记方法的动画比较。

陈 & 胡苏恩的 修改 算法通常比张 & 苏恩的 标准 算法产生更好的线连通性、更少的噪声和更一致的单一像素宽的线条。

原始图像位于名为 gfx 的文件夹中,文件名为 chenhsu.png。在细化线条之前,该图像在 0.3 的阈值下进行二值化处理。示例程序使用以下参数生成了图像结果。--method|-m 选项允许选择标准或修改后的像素标记算法,--threshold|-t 是灰度级阈值。

-i chenhsu.png -t 0.3 -m s -o chenhsu-standard.png
-i chenhsu.png -t 0.3 -m m -o chenhsu-modified.png

skeletonize.rs

示例程序 skeletonize 将库函数作为命令行应用程序暴露。可以通过以下命令运行,或者从Releases 下载后直接调用。

cargo r --release --example skeletonize -- [args]

示例

以下三个示例使用此图像作为输入。所有示例都包括等效的库代码。

Original image


使用 sobel4(4向边缘检测)和线条细化,将边缘检测过滤器阈值设置为 0.3

cargo r --release --example skeletonize -- -i rustacean.png -e sobel4 -t 0.3
let mut filtered = sobel4::<foreground::Black>(&img, Some(0.3))?;
thin_image_edges::<foreground::Black>(&mut filtered, method, None)?;

Edge detected crab


不进行线条细化进行边缘检测,将边缘检测过滤器阈值设置为 0.3,并将 --foreground|-f 颜色设置为白色。

-i rustacean.png -e sobel4 -t 0.3 --no-thin -f white
let filtered = sobel4::<foreground::White>(&img, Some(0.3))?;

Edge detected crab with no thinning


通过省略 --threshold|-t 并使用 --no-thin 返回灰度边缘检测图像。为 sobel4white 使用别名。

-i rustacean.png -e s4 --no-thin -f w
let filtered = sobel4::<foreground::White>(&img, None))?;

Edge detected crab with no thinning


标题图像使用以下参数创建。

-i skeletonize.png -t 0.3
skeletonize::threshold(&mut img, 0.3)?;
thin_image_edges::<foreground::Black>(&mut img, method, None)?;

参考

Zhang, T. Y. & Suen, C. Y. (1984). A fast parallel algorithm for thinning digital patterns. Commun. ACM 27, 3 (March 1984), 236–239. DOI:10.1145/357994.358023

Chen, Yung-Sheng & Hsu, Wen-Hsing. (1988). A modified fast parallel algorithm for thinning digital patterns. Pattern Recognition Letters. 7. 99-106. DOI:10.1016/0167-8655(88)90124-9

许可

此软件包受以下任一许可证的许可

根据您的选择。

除非您明确声明,否则您有意提交的任何贡献,根据 Apache-2.0 许可证定义,均应双重许可如上所述,没有任何额外条款或条件。

依赖关系

~9.5MB
~26K SLoC