3个版本

0.1.2 2024年5月4日
0.1.1 2024年2月3日
0.1.0 2024年2月3日

#478 in 数学

MIT 许可证

4MB
135

Rust crates.io docs.rs DOI Multi-OS Binary Release

butter2d

butter

巴特沃斯滤波器的纯Rust实现

这个crate提供巴特沃斯滤波器的纯Rust实现,专为图像的高性能空间频率滤波设计。它受到并试图复制在流行的Python库scikit-image中实现的巴特沃斯滤波器功能的启发。

概览

与传统的FFT/IFFT方法相比,巴特沃斯滤波器提供了一种更稳健的方法来对图像应用空间频率滤波器。具有锐截止的滤波器通常会导致吉布斯现象,即在图像边缘附近出现不希望的振铃伪影。这个问题在EEG实验(尤其是影响视觉皮层P100振幅的低/中视觉实验)和其他涉及低频信号的场景中尤为突出。通过在通带和阻带之间提供更平滑的过渡,巴特沃斯滤波器减轻了这些影响,使其成为视觉科学家和图像处理专家的首选。

特性

  • 纯Rust实现,以获得最佳性能和与基于Rust的图像处理管道的集成。
  • 支持高通和低通滤波,具有可定制的截止频率和滤波阶数参数。
  • 详细的示例和文档,帮助用户快速将滤波器集成到项目中。

比较:Rust与Python具有相同输入值

为了直观地展示我们的Rust实现与Python(scikit-image)版本的有效性和相似性,以下是比较图像。这些比较有助于说明两种实现使用相同的输入值时的视觉和频率光谱结果。

视觉比较

Visual Comparison

频谱比较

Spectrum Comparison

下载演示

为了获得实际操作体验,请从发布页面下载最新演示。该演示适用于Windows、Mac和Ubuntu,具有交互式控件和动态图像处理功能。当您调整滑块时,更改将实时应用,以便立即获得视觉反馈。此设置专门设计用于方便动态创建图像的傅里叶相位混淆版本。例如,如果您先应用高通滤波器然后应用低通滤波器,最终输出将是先前高通滤波图像的低通版本。为了更精确的实现,请先设置您的参数,然后上传图像。

Demo GIF

使用方法

以下是一个快速示例,演示如何将高通巴特沃斯滤波器应用于图像

cargo add butter2d
use image::{GrayImage, open};
use butter2d::butterworth;

fn main() {
    let img = open("path/to/your/image.png").expect("Failed to open image").to_luma8();
    let cutoff_frequency_ratio = 0.1;
    let high_pass = true;
    let order = 2.0;
    let squared_butterworth = false;
    let npad = 0;
    let filtered_img = butterworth(
        &img, 
        cutoff_frequency_ratio, 
        high_pass, 
        order, 
        squared_butterworth, 
        npad
    );
    filtered_img.save("path/to/save/filtered_image.png").expect("Failed to save filtered image");
}

依赖项

~14MB
~273K SLoC