Show HN: Deconvolution —— 一个 Rust 图像去卷积与恢复库
摘要
Deconvolution 是一个用于图像去卷积与恢复的 Rust 库,提供已知 PSF 与盲恢复方法、PSF/OTF 转换、预处理及模拟工具。
查看缓存全文
缓存时间: 2026/06/17 17:42
pbkx/deconvolution
来源:https://github.com/pbkx/deconvolution
deconvolution
crates.io (https://crates.io/crates/deconvolution)
docs.rs (https://docs.rs/deconvolution)
许可证
| 原图 | 去卷积后 |
|---|---|
左侧为运动模糊样本;右侧使用 wiener_with 恢复后的结果。
Rust 图像去卷积与恢复库。从模糊中恢复图像依赖于点扩散函数、稳定的频域工具以及细致的正则化。deconvolution 提供已知 PSF 复原、盲法工作流、PSF/OTF 转换、预处理辅助函数、仿真测试工具以及 ndarray API。
概述
- 图像 API:顶层函数使用
image::DynamicImage并返回可直接保存的图像。 - 已知 PSF 方法:逆滤波器、维纳滤波、理查森-露西、约束、近端梯度、Krylov 及 MLE 式复原。
- 盲法方法:盲理查森-露西、盲最大似然估计以及参数化 PSF 估计。
- PSF 和 OTF 类型:
Kernel2D、Kernel3D、Transfer2D、Transfer3D、Blur2D/Blur3D。 - PSF 工具:高斯、运动、离焦、显微模型、支撑工具及 PSF/OTF 转换。
- 预处理:边缘渐变、切趾、范围归一化及 NSR 估计。
- 仿真:确定性模糊、噪声及合成测试数据生成。
- ndarray 支持:2D 图像数组及 3D 体数据工作流。
- 特性标志:默认启用
rayon;可选择f16支持。
安装
cargo add deconvolution
[dependencies]
deconvolution = "0.2.0"
图像加载:当你的应用需要打开或保存图像文件时,添加 image。
cargo add image
串行构建:禁用默认特性以关闭 rayon。
[dependencies]
deconvolution = { version = "0.2.0", default-features = false }
快速入门
use deconvolution::psf::basic::gaussian2d;
use deconvolution::spectral::{wiener_with, Wiener};
fn main() -> Result<(), Box<dyn std::error::Error>> {
let input = image::open("before_deconvolution.png")?;
let psf = gaussian2d((15, 15), 2.15)?;
let restored = wiener_with(&input, &psf, &Wiener::new().nsr(2.5e-4))?;
restored.save("after_deconvolution.png")?;
Ok(())
}
图像 API
支持的 DynamicImage 变体:
ImageLuma8ImageLumaA8ImageRgb8ImageRgba8ImageLuma16ImageLumaA16ImageRgb16ImageRgba16ImageRgb32FImageRgba32F
配置枚举在不同算法族间共享:
Boundary:Zero、Replicate、Reflect、Symmetric、PeriodicPadding:None、Same、Minimal、NextFastLen、Explicit2、Explicit3ChannelMode:Independent、LumaOnly、IgnoreAlpha、PremultipliedAlphaRangePolicy:PreserveInput、Clamp01、ClampNegPos1、Unbounded
使用 ChannelMode::Independent 进行逐通道色彩恢复,ChannelMode::LumaOnly 当模糊主要影响亮度时,RangePolicy::PreserveInput 在普通图像样本范围内工作时使用。
PSF 和 OTF API
基本 PSF 生成器:
delta2d、delta3dgaussian2d、gaussian3dmotion_lineardisk、pillbox、defocusbox2d、box3doriented_gaussian
盲法初始化辅助函数:
psf::init::uniformpsf::init::gaussian_guesspsf::init::motion_guesspsf::init::from_support
支撑工具:
normalize、normalize_3dcenter、center_3dpad_to、pad_to_3dcrop_to、crop_to_3dflip、flip_3dvalidate、validate_3dsupport_mask、support_mask_3d
传递函数转换工具:
otf::convert::psf2otfotf::convert::psf2otf_3dotf::convert::otf2psfotf::convert::otf2psf_3d
光学与显微模型:
BornWolfParams/born_wolfGibsonLanniParams/gibson_lanniVariableRiGibsonLanniParams/variable_ri_gibson_lanniRichardsWolfParams/richards_wolflorentz2dastigmaticdouble_helixotf::spectra::koehler_otfotf::spectra::defocus_otf
已知 PSF 方法
谱与逆滤波器
频域复原。
naive_inverse_filterinverse_filtertruncated_inverse_filterregularized_inverse_filtertikhonov_inverse_filterwienerunsupervised_wiener
配置类型:
InverseFilterRegularizedInverseFilterTikhonovInverseFilterWienerUnsupervisedWiener
自定义配置:使用 _with 变体。
理查森-露西及正则化 RL
泊松型乘法复原。
richardson_lucydamped_richardson_lucyrichardson_lucy_tv
配置类型:
RichardsonLucyRichardsonLucyTv
迭代最小二乘法
残差更新复原。
landwebervan_citterttikhonov_millerictm
配置类型:
LandweberVanCittertTikhonovMillerIctm
约束求解器
边界感知复原。
nnlsbvls
配置类型:
NnlsBvls
稀疏与近端方法
近端梯度复原。
istafista
配置与模型类型:
IstaFistaSparseBasis
Krylov 与高级迭代方法
科学成像求解器。
mrnsdcglswplhybr
配置类型:
MrnsdCglsWplHybr
最大似然族
面向显微的 MLE 式复原。
cmlegmleqmle
配置类型:
CmleGmleQmle
盲去卷积
盲法工作流同时估计复原图像和 PSF。面向图像的盲法工作流支持 u8 和 u16 样本的 Gray 与 GrayAlpha DynamicImage 变体。
blind::richardson_lucyblind::maximum_likelihoodblind::parametric
blind::maximum_likelihood 与盲理查森-露西共享相同的泊松 EM 复原核心。
配置与输出类型:
BlindRichardsonLucyBlindMaximumLikelihoodBlindParametricBlindOutputBlindReportParametricPsfPsfConstraint
PSF 约束:
NonnegativeNormalizeSumSupportMask(...)
参数化 PSF 族:
Gaussian { sigma }MotionLinear { length, angle_deg }Defocus { radius }OrientedGaussian { sigma_major, sigma_minor, angle_deg }
ndarray 工作流
公开的 nd 模块为已在 ndarray 中工作或需要 3D 体数据的用户提供数组优先的工作流。启用可选的 f16 特性,可以将 half::f16 数组传入 2D ndarray API,同时计算仍在 f32 中进行。
nd::known_psf 中的 2D 已知 PSF 方法:
wiener、unsupervised_wienerrichardson_lucy、richardson_lucy_tvlandweber、van_cittert、tikhonov_miller、ictmnnls、bvlsista、fistamrnsd、cgls、wpl、hybr
nd::blind 中的盲法方法:
richardson_lucymaximum_likelihood
nd::microscopy 中的 3D 与显微方法:
wienerrichardson_lucyrichardson_lucy_tvcmlegmleqmle
预处理
预处理工具有助于减少振铃效应并准备数值输入。
preprocess::apodizepreprocess::apodize::window_edgespreprocess::edgetaperpreprocess::estimate_nsrpreprocess::normalize_range
在频域去卷积前,当强烈的边缘不连续产生振铃伪影时,使用 edgetaper 或切趾处理。
仿真与测试数据
确定性:相同的输入和种子会产生相同的仿真输出。
测试数据:用于测试、示例和基准测试的合成图像和体数据。
模糊与退化:
simulate::blur::blursimulate::blur::blur_otfsimulate::blur::blur_3dsimulate::blur::blur_otf_3dsimulate::blur::degrade
噪声模型:
simulate::noise::add_gaussian_noisesimulate::noise::add_poisson_noisesimulate::noise::add_readout_noise
合成测试数据:
simulate::phantom::checkerboard_2dsimulate::phantom::gaussian_blob_2dsimulate::phantom::rgb_edges_2dsimulate::phantom::phantom_3d
可选的 rayon 集成
rayon 默认启用。可选的 f16 特性为 2D ndarray API 增加了 half::f16 输入/输出支持;计算仍保持在 f32。
[features]
default = ["rayon"]
rayon = ["dep:rayon", "ndarray/rayon", "image/rayon"]
f16 = ["dep:half"]
禁用默认特性以进行串行构建:
cargo test --no-default-features
示例程序
面向图像的工作流:
cargo run --example wiener -- input.png output.png
cargo run --example richardson_lucy
cargo run --example blind_motion
cargo run --example edgetaper
cargo run --example custom_regularizer
体数据工作流:
cargo run --example microscopy_volume
基准测试与开发
基准测试:基于 Criterion 的基准测试族。
spectralrlblindvolume
cargo bench --no-run
cargo bench --bench spectral
cargo bench --bench rl
cargo bench --bench blind
cargo bench --bench volume
检查:
cargo fmt --all -- --check
cargo clippy --workspace --all-targets --all-features -- -D warnings
cargo check --all-features
cargo test --workspace --all-targets --all-features
cargo doc --workspace --no-deps --all-features
限制与范围
- 面向图像的已知 PSF 算法支持 u8/u16 的 Gray、GrayAlpha、Rgb 和 Rgba
DynamicImage变体,以及 32 位浮点 Rgb 和 Rgba 图像。 - 面向图像的盲法算法支持 u8/u16 的 Gray 和 GrayAlpha
DynamicImage变体。
许可证
deconvolution 基于 MIT 许可证 发布,版权所有 (c) 2026 pbkx。
相似文章
CogSENet:基于模糊条件语义路由与显式频率融合的盲图像去模糊
CogSENet提出了一种受鹰眼启发的盲图像去模糊框架,利用语义感知模块和频率分解提升恢复质量与结构保真度,优于现有最先进方法。
当 Fast Fourier Transform 遇见 Transformer:图像恢复(2024)
SFHformer将Fast Fourier Transform引入Transformer架构,实现高效的图像恢复,在去雨、去雾、超分辨率等十个任务上达到最先进水平。该论文被ECCV 2024接收,其扩展版本SWFormer于2025年发布。
视觉变换器模型的Rust实现
一个用于构建和实验视觉变换器(ViT)模型的Rust crate,提供类型化配置、可重用结构体以及可运行的示例,适用于研究和生产环境。
PixRestore:通过像素扩散变换器实现统一图像恢复
PixRestore是一种无VAE的像素空间扩散变换器,用于统一图像恢复,通过流匹配和对抗性微调至单步生成器,实现高保真度和效率。
Show HN: SIMD Viterbi Decoder in Rust
A Rust crate implementing Viterbi and Reed-Solomon forward error correction with SIMD acceleration, achieving faster throughput than the C library libfec on supported codecs.