惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Vercel News
Vercel News
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
雷峰网
雷峰网
有赞技术团队
有赞技术团队
罗磊的独立博客
博客园 - 叶小钗
Jina AI
Jina AI
博客园 - 司徒正美
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
T
Tailwind CSS Blog
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
人人都是产品经理
人人都是产品经理
Apple Machine Learning Research
Apple Machine Learning Research
阮一峰的网络日志
阮一峰的网络日志
Microsoft Security Blog
Microsoft Security Blog
大猫的无限游戏
大猫的无限游戏
量子位
MyScale Blog
MyScale Blog
V
Visual Studio Blog
博客园 - 聂微东
The Cloudflare Blog
Engineering at Meta
Engineering at Meta
小众软件
小众软件
宝玉的分享
宝玉的分享

Hacker News

GitHub - SeanFDZ/macmind: Single-layer transformer in HyperTalk for the classic Macintosh Show HN: Agent-cache – Multi-tier LLM/tool/session caching for Valkey and Redis Bonsai 1-bit WebGPU - a Hugging Face Space by webml-community Moving a large-scale metrics pipeline from StatsD to OpenTelemetry / Prometheus GitHub - Nightmare-Eclipse/RedSun: The Red Sun vulnerability repository GitHub - SethPyle376/hiraeth: Local AWS emulator focused on fast integration testing, with SQS support, SQLite-backed state, and a debug-friendly web UI. GitHub - macOS26/Agent: Any AI, replaces Claude Code, Cursor, OpenClaw. Over 18 LLM providers (Claude, OpenAI, Gemini, Ollama, Zai, HF, Qwen) wired into a native Mac app that writes code, builds Xcode projects, bumps versions, manages git, automates Safari, use AppleScript, JS or Accessibility, extend Agent! w/ MCP Servers, run tasks from your iPhone via Messages. YouTube now lets you turn off Shorts I Made a Terminal Pager Burgers | マクドナルド公式 Commands — HackerNews CLI documentation ChatGPT for Excel PiCore - Raspberry Pi Port of Tiny Core Linux Live Nation illegally monopolized ticketing market, jury finds Google Broke Its Promise to Me. Now ICE Has My Data. Founding Engineer at Adaptional | Y Combinator CRISPR takes important step toward silencing Down syndrome’s extra chromosome GitHub - saffron-health/libretto: The AI toolkit for building reliable browser automations US v. Heppner (S.D.N.Y. 2026) no attorney-client privilege for AI chats [pdf] Retrofitting JIT Compilers into C Interpreters IPv6 – Google The Accursèd Alphabetical Clock Cybersecurity Looks Like Proof of Work Now Fragments: April 14 Cal.com Goes Closed Source: Why AI Security Is Forcing Our Decision | Cal.com - Scheduling Software for Online Bookings Laravel raised money and now injects ads directly into your agent When moving fast, talking is the first thing to break Too much Discussion of the XOR swap trick – Heather Cafe Introduction to Spherical Harmonics for Graphics Programmers The Grand Line
GitHub - pbkx/deconvolution: Rust image deconvolution and...
rmi0 · 2026-06-15 · via Hacker News

crates.io docs.rs License

Original Deconvolved
Before deconvolution After deconvolution

Before (left) is the motion-blurred sample; after (right) is restored using wiener_with.

Rust image deconvolution and restoration library.

Recovering images from blur depends on a point-spread function, stable frequency-domain utilities, and careful regularization. deconvolution provides known-PSF restoration, blind workflows, PSF/OTF conversion, preprocessing helpers, simulation fixtures, and ndarray APIs.

Overview

  • Image API: Top-level functions use image::DynamicImage and return images ready to save.
  • Known PSF methods: Inverse filters, Wiener, Richardson-Lucy, constrained, proximal, Krylov, and MLE-style restoration.
  • Blind methods: Blind Richardson-Lucy, blind maximum likelihood, and parametric PSF estimation.
  • PSF and OTF types: Kernel2D, Kernel3D, Transfer2D, Transfer3D, and Blur2D/Blur3D.
  • PSF tools: Gaussian, motion, defocus, microscopy models, support utilities, and PSF/OTF conversion.
  • Preprocessing: Edge tapering, apodization, range normalization, and NSR estimation.
  • Simulation: Deterministic blur, noise, and synthetic fixture generation.
  • ndarray support: 2D image arrays and 3D volume workflows.
  • Feature flags: rayon by default; optional f16 support.

Installation

[dependencies]
deconvolution = "0.2.0"

Image loading: Add image when your application opens or saves image files.

Serial build: Disable default features to turn off rayon.

[dependencies]
deconvolution = { version = "0.2.0", default-features = false }

Quick Start

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(())
}

Image API

Supported DynamicImage variants:

  • ImageLuma8
  • ImageLumaA8
  • ImageRgb8
  • ImageRgba8
  • ImageLuma16
  • ImageLumaA16
  • ImageRgb16
  • ImageRgba16
  • ImageRgb32F
  • ImageRgba32F

Configuration enums are shared across algorithm families:

  • Boundary: Zero, Replicate, Reflect, Symmetric, Periodic
  • Padding: None, Same, Minimal, NextFastLen, Explicit2, Explicit3
  • ChannelMode: Independent, LumaOnly, IgnoreAlpha, PremultipliedAlpha
  • RangePolicy: PreserveInput, Clamp01, ClampNegPos1, Unbounded

Use ChannelMode::Independent for per-channel color restoration, ChannelMode::LumaOnly when the blur should primarily affect luminance, and RangePolicy::PreserveInput when working in normal image sample ranges.

PSF and OTF API

Basic PSF generators:

  • delta2d, delta3d
  • gaussian2d, gaussian3d
  • motion_linear
  • disk, pillbox, defocus
  • box2d, box3d
  • oriented_gaussian

Blind initialization helpers:

  • psf::init::uniform
  • psf::init::gaussian_guess
  • psf::init::motion_guess
  • psf::init::from_support

Support utilities:

  • normalize, normalize_3d
  • center, center_3d
  • pad_to, pad_to_3d
  • crop_to, crop_to_3d
  • flip, flip_3d
  • validate, validate_3d
  • support_mask, support_mask_3d

Transfer conversion utilities:

  • otf::convert::psf2otf
  • otf::convert::psf2otf_3d
  • otf::convert::otf2psf
  • otf::convert::otf2psf_3d

Optical and microscopy models:

  • BornWolfParams / born_wolf
  • GibsonLanniParams / gibson_lanni
  • VariableRiGibsonLanniParams / variable_ri_gibson_lanni
  • RichardsWolfParams / richards_wolf
  • lorentz2d
  • astigmatic
  • double_helix
  • otf::spectra::koehler_otf
  • otf::spectra::defocus_otf

Known PSF Methods

Spectral and inverse filters

Frequency-domain restoration.

  • naive_inverse_filter
  • inverse_filter
  • truncated_inverse_filter
  • regularized_inverse_filter
  • tikhonov_inverse_filter
  • wiener
  • unsupervised_wiener

Configuration types:

  • InverseFilter
  • RegularizedInverseFilter
  • TikhonovInverseFilter
  • Wiener
  • UnsupervisedWiener

Custom configs: Use _with variants.

Richardson-Lucy and regularized RL

Poisson-style multiplicative restoration.

  • richardson_lucy
  • damped_richardson_lucy
  • richardson_lucy_tv

Configuration types:

  • RichardsonLucy
  • RichardsonLucyTv

Iterative least-squares methods

Residual-update restoration.

  • landweber
  • van_cittert
  • tikhonov_miller
  • ictm

Configuration types:

  • Landweber
  • VanCittert
  • TikhonovMiller
  • Ictm

Constrained solvers

Bound-aware restoration.

  • nnls
  • bvls

Configuration types:

  • Nnls
  • Bvls

Sparse and proximal methods

Proximal-gradient restoration.

  • ista
  • fista

Configuration and model types:

  • Ista
  • Fista
  • SparseBasis

Krylov and advanced iterative methods

Scientific imaging solvers.

  • mrnsd
  • cgls
  • wpl
  • hybr

Configuration types:

  • Mrnsd
  • Cgls
  • Wpl
  • Hybr

Maximum-likelihood family

Microscopy-oriented MLE-style restoration.

  • cmle
  • gmle
  • qmle

Configuration types:

  • Cmle
  • Gmle
  • Qmle

Blind Deconvolution

Blind workflows estimate both the restored image and the PSF. Image-facing blind workflows support Gray and GrayAlpha DynamicImage variants for u8 and u16 samples.

  • blind::richardson_lucy
  • blind::maximum_likelihood
  • blind::parametric

blind::maximum_likelihood shares the same Poisson EM restoration core as blind Richardson-Lucy.

Configuration and output types:

  • BlindRichardsonLucy
  • BlindMaximumLikelihood
  • BlindParametric
  • BlindOutput<I>
  • BlindReport
  • ParametricPsf
  • PsfConstraint

PSF constraints:

  • Nonnegative
  • NormalizeSum
  • SupportMask(...)

Parametric PSF families:

  • Gaussian { sigma }
  • MotionLinear { length, angle_deg }
  • Defocus { radius }
  • OrientedGaussian { sigma_major, sigma_minor, angle_deg }

ndarray Workflows

The public nd module exposes array-first workflows for users who already work in ndarray or need 3D volumes. Enable the optional f16 feature to pass half::f16 arrays into the 2D ndarray API while keeping computation in f32.

2D known-PSF methods in nd::known_psf:

  • wiener, unsupervised_wiener
  • richardson_lucy, richardson_lucy_tv
  • landweber, van_cittert, tikhonov_miller, ictm
  • nnls, bvls
  • ista, fista
  • mrnsd, cgls, wpl, hybr

Blind methods in nd::blind:

  • richardson_lucy
  • maximum_likelihood

3D and microscopy methods in nd::microscopy:

  • wiener
  • richardson_lucy
  • richardson_lucy_tv
  • cmle
  • gmle
  • qmle

Preprocessing

Preprocessing utilities help reduce ringing and prepare numerical inputs.

  • preprocess::apodize
  • preprocess::apodize::window_edges
  • preprocess::edgetaper
  • preprocess::estimate_nsr
  • preprocess::normalize_range

Use edgetaper or apodization before frequency-domain deconvolution when strong edge discontinuities create ringing artifacts.

Simulation and Fixtures

Deterministic: Same input and seed produce the same simulated output.

Fixtures: Synthetic images and volumes for tests, examples, and benchmarks.

Blur and degradation:

  • simulate::blur::blur
  • simulate::blur::blur_otf
  • simulate::blur::blur_3d
  • simulate::blur::blur_otf_3d
  • simulate::blur::degrade

Noise models:

  • simulate::noise::add_gaussian_noise
  • simulate::noise::add_poisson_noise
  • simulate::noise::add_readout_noise

Synthetic fixtures:

  • simulate::phantom::checkerboard_2d
  • simulate::phantom::gaussian_blob_2d
  • simulate::phantom::rgb_edges_2d
  • simulate::phantom::phantom_3d

Optional rayon Integration

rayon is enabled by default. The optional f16 feature adds half::f16 input/output support for the 2D ndarray API; computation remains in f32.

[features]
default = ["rayon"]
rayon = ["dep:rayon", "ndarray/rayon", "image/rayon"]
f16 = ["dep:half"]

Disable default features for serial builds:

cargo test --no-default-features

Example Programs

Image-facing workflows:

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

Volume workflow:

cargo run --example microscopy_volume

Benchmarks and Development

Benchmarks: Criterion benchmark families.

  • spectral
  • rl
  • blind
  • volume
cargo bench --no-run
cargo bench --bench spectral
cargo bench --bench rl
cargo bench --bench blind
cargo bench --bench volume

Checks:

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

Limitations and Scope

  • Known-PSF image-facing algorithms support u8/u16 Gray, GrayAlpha, Rgb, and Rgba DynamicImage variants, plus 32-bit float Rgb and Rgba images.
  • Blind image-facing algorithms support u8/u16 Gray and GrayAlpha DynamicImage variants.

License

deconvolution is licensed under the MIT License, copyright (c) 2026 pbkx.