fast-canny 0.1.0

Industrial-grade Zero-Allocation SIMD Canny Edge Detector
Documentation
// src/gaussian.rs
use libblur::IeeeBinaryConvolutionMode;
use libblur::{
    BlurImage, BlurImageMut, EdgeMode, EdgeMode2D, FastBlurChannels, GaussianBlurParams,
    ThreadingPolicy, gaussian_blur_f32,
};

/// 对 f32 单通道图像执行高斯平滑(写入 dst)。
#[inline]
pub fn apply(src: &[f32], dst: &mut [f32], width: usize, height: usize, sigma: f32) {
    debug_assert!(dst.len() >= width * height);

    let w = width as u32;
    let h = height as u32;

    let src_image = BlurImage::borrow(src, w, h, FastBlurChannels::Plane);
    let mut dst_image = BlurImageMut::borrow(dst, w, h, FastBlurChannels::Plane);

    gaussian_blur_f32(
        &src_image,
        &mut dst_image,
        GaussianBlurParams::new_from_sigma(sigma as f64),
        EdgeMode2D::new(EdgeMode::Clamp),
        ThreadingPolicy::Adaptive,
        IeeeBinaryConvolutionMode::Normal,
    )
    .expect("[gaussian::apply] gaussian_blur_f32 failed");
}