BM3D 图像降噪快速算法的 MATLAB 实现

news/2025/11/12 16:16:49/文章来源:https://www.cnblogs.com/wiwi1313/p/19214499

1. 快速 BM3D 算法流程(概述)

步骤 操作 加速技巧
① 分组 块匹配 + 堆叠 FFT 互相关
② 协同滤波 3D 变换 + 硬阈值 FFT 沿第三维
③ 聚合 加权平均 稀疏矩阵累加

2. 核心函数(单文件版)

保存为 bm3d_fast.m 即可调用:

function [img_denoised] = bm3d_fast(img_noisy, sigma)
% 快速 BM3D 图像降噪(纯 MATLAB,FFT 加速)
% 输入:img_noisy 灰度图 0~255
%       sigma     噪声标准差
% 输出:img_denoised 同尺寸img_noisy = double(img_noisy);
[H,W] = size(img_noisy);%% 参数(与作者论文一致)
block_size = 8;            % 块尺寸
step       = 3;            % 滑动步长
max_similar = 16;          % 最大相似块数
tau_hard   = 2.7*sigma;    % 硬阈值系数
tau_wien   = 2.5*sigma;    % Wiener 阈值%% Step1:基础估计(硬阈值)
basic = bm3d_step1(img_noisy, sigma, block_size, step, max_similar, tau_hard);%% Step2:最终估计(Wiener 协同滤波)
img_denoised = bm3d_step2(img_noisy, basic, sigma, block_size, step, max_similar, tau_wien);img_denoised = uint8(img_denoised);
end

3. Step1:基础估计(硬阈值)

function basic = bm3d_step1(img, sigma, bs, step, max_sim, tau)
[H,W] = size(img);
basic = zeros(H,W);  weight = zeros(H,W);% 预计算 FFT 加速互相关
img_fft = fft2(img);for i = bs/2+1 : step : H-bs/2for j = bs/2+1 : step : W-bs/2% 当前块block = img(i-bs/2:i+bs/2-1, j-bs/2:j+bs/2-1);block_fft = fft2(block);% 快速块匹配(FFT 互相关)corr = real(ifft2(block_fft .* conj(img_fft)));[vals, idx] = sort(corr(:),'descend');idx = idx(1:max_sim);  % 最相似块[di,dj] = ind2sub([H,W], idx);% 堆叠 3D 组group = zeros(bs,bs,max_sim);for k = 1:max_simii = di(k)-bs/2; jj = dj(k)-bs/2;group(:,:,k) = img(ii+1:ii+bs, jj+1:jj+bs);end% 3D 变换(FFT 沿第三维)+ 硬阈值group_fft = fft(group,[],3);group_fft(abs(group_fft) < tau*sigma) = 0;group_est = real(ifft(group_fft,[],3));% 加权聚合w = 1/(sigma^2 * max_sim + 1e-6);for k = 1:max_simii = di(k)-bs/2; jj = dj(k)-bs/2;basic(ii+1:ii+bs, jj+1:jj+bs) = basic(ii+1:ii+bs, jj+1:jj+bs) + w * group_est(:,:,k);weight(ii+1:ii+bs, jj+1:jj+bs) = weight(ii+1:ii+bs, jj+1:jj+bs) + w;endend
endbasic = basic ./ (weight + 1e-6);
end

4. Step2:最终估计(Wiener 协同滤波)

function final = bm3d_step2(img, basic, sigma, bs, step, max_sim, tau)
[H,W] = size(img);
final = zeros(H,W);  weight = zeros(H,W);basic_fft = fft2(basic);for i = bs/2+1 : step : H-bs/2for j = bs/2+1 : step : W-bs/2% 基础图块匹配block_b = basic(i-bs/2:i+bs/2-1, j-bs/2:j+bs/2-1);block_b_fft = fft2(block_b);corr = real(ifft2(block_b_fft .* conj(basic_fft)));[vals, idx] = sort(corr(:),'descend');idx = idx(1:max_sim);[di,dj] = ind2sub([H,W], idx);% 两组:原图 + 基础图group_noisy = zeros(bs,bs,max_sim);group_basic = zeros(bs,bs,max_sim);for k = 1:max_simii = di(k)-bs/2; jj = dj(k)-bs/2;group_noisy(:,:,k) = img(ii+1:ii+bs, jj+1:jj+bs);group_basic(:,:,k) = basic(ii+1:ii+bs, jj+1:jj+bs);end% 3D FFT + Wiener 系数fft_noisy = fft(group_noisy,[],3);fft_basic = fft(group_basic,[],3);power = abs(fft_basic).^2;wiener_coef = power ./ (power + sigma^2 + 1e-6);fft_est = fft_noisy .* wiener_coef;group_est = real(ifft(fft_est,[],3));% 加权聚合w = 1/(sigma^2 + 1e-6);for k = 1:max_simii = di(k)-bs/2; jj = dj(k)-bs/2;final(ii+1:ii+bs, jj+1:jj+bs) = final(ii+1:ii+bs, jj+1:jj+bs) + w * group_est(:,:,k);weight(ii+1:ii+bs, jj+1:jj+bs) = weight(ii+1:ii+bs, jj+1:jj+bs) + w;endend
endfinal = final ./ (weight + 1e-6);
end

参考代码 BM3D图像降噪快速算法 www.youwenfan.com/contentcnl/53384.html

5. 运行

img = imread('lena_gray.png');
img_noisy = imnoise(img,'gaussian',0,0.01);   % σ=10
img_denoised = bm3d_fast(img_noisy, 10);figure; montage({img, img_noisy, img_denoised});
title({'原图','噪声图','BM3D 快速版'});

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/963541.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

甘孜西林瓶灌装线厂家免费培训内容揭秘

在当前制药及试剂灌装设备市场中,价格竞争日趋激烈,部分厂商为压缩成本,采用简化结构、降低材质标准甚至省略关键功能模块的方式压低报价,导致设备稳定性差、故障率高、售后响应迟缓,最终用户反而面临更高的隐性使…

C# winform快速自适应布局

C# winform快速自适应布局C# winform快速自适应布局 此方法的优点是:简单易学,布局速度快,适用于绝大多数软件界面。缺点是:不太适合需要高度定制的复杂软件界面。 实现的原理是:会将from装进Panel里面对控件进行…

实验2 熟悉常用的HDFS操作 通过编程和Shell命令

编程实现以下功能,并利用Hadoop提供的Shell命令完成相同任务:向HDFS中上传任意文本文件,如果指定的文件在HDFS中已经存在,则由用户来指定是追加到原有文件末尾还是覆盖原有的文件; 从HDFS中下载指定文件,如果本地…

OWASP 在新的前 10 名榜单中强调供应链风险

OWASP于11月6日发布的更新是自 2021 年以来的首次重大前10榜单更新,其显著特点在于强调供应链风险和系统性设计缺陷,而不仅仅是常见的软件编码错误。对于防御者而言,关键要点在于需要将应用安全、软件供应链监督和运…

v4l2 probe时各个device的操作顺序

dev_set_drvdata(&pdev->dev, myisp) “在现代嵌入式 Linux(尤其是 ARM)中,不再硬编码 platform_device,而是通过 设备树(Device Tree) 描述硬件”。 myisp就是驱动模块对应的自定义设备; 这里把myisp结…

国泰君安基于隐语SecretFlow生产场景探索实践

业务背景及痛点 作为一家综合性的证券金融集团,国泰海通证券在探索数据协同与隐私保护方面始终走在行业前列。我们技术团队内部在集团推动部署 SecretFlow(以下简称“隐语”)平台,主要出于两个核心动因:一方面是加…

张家口西林瓶灌装线带废料回收报价

在制药与生物制剂生产领域,西林瓶灌装线的配置选择日益趋向精细化与场景适配化。尤其在张家口地区,随着本地医药制造企业对绿色生产、成本控制及合规性要求的不断提升,具备废料回收功能的西林瓶灌装设备逐渐成为采购…

基于DNA编码与混沌系统的图像加密

一、DNA编码与混沌系统结合原理 DNA编码技术通过将数字信息映射为生物分子序列,结合混沌系统的伪随机性,形成双重加密机制。其核心优势在于:超高密度存储:1克DNA可存储215PB数据,远超传统存储介质 并行运算能力:…

windows键盘显示软件

屏幕按键显示软件 github - carnac b站的一些推荐: 开源免费软件分享0013——Carnac WINDOWS五款屏幕按键显示软件推荐 【软件工具】KeyCastOW-史上最好用的屏幕显示输入信息工具

鲜花:m 群 bot 随机一言摘抄

上帝是公平的,虽然给了你低颜值,但是给了你高眼光啊遇到你之前,我的世界是黑白的,遇见你之后 哇靠 全黑了不是你长大变傻了,而是傻子长大了觉得只要认真努力就会胜利,这世上哪有这么天真的事哭也不会改变什么,这…

Canvas简单整理 - sk

1. Canvas概述 1.1 Canvas是什么 Canvas又称为“画布”,是HTML5的核心技术之一,通常说的Canvas技术,指的就是使用Canvas元素结合JavaScript来绘制各种图形的技术。 1.2 Canvas的用途 1)绘制图形;2)绘制图表;3)…

MATLAB小波分析工具包进行时间序列的小波功率谱分析

MATLAB的小波分析工具包(Wavelet Toolbox)提供了强大的功能,用于分析和处理信号与图像。使用MATLAB小波分析工具包进行时间序列的小波功率谱分析的详细步骤。 1. 加载数据 首先,加载需要分析的时间序列数据。假设数…

CPU softlockup(软锁定)

CPU softlockup(软锁定)是 Linux 内核 watchdog 机制报出的“某颗 vCPU 在内核态连续 20 s(默认)没有发生任务切换”的异常。本质是:内核线程/中断上下文长时间关抢占(或死循环),导致该核上的 watchdog 线程得…

再次出山!!

如今,时隔多年,又准备开始重新写博客了!!! 今天先看看效果

营口西林瓶灌装机资质齐全,含医疗器械生产许可与行情报价

近年来,西林瓶灌装机市场受原材料价格波动、核心零部件进口成本变化及区域供需关系影响,整体呈现温和上涨趋势。据行业数据显示,2024年第四季度至2025年第三季度期间,西林瓶灌装设备的终端售价平均涨幅约为6.8%。其…

Tita 项目管理软件:驱动互联网企业高效运营与战略落地新引擎

在当今快节奏的互联网行业中,许多企业虽拥有创新产品与业务蓝图,却常因内部管理机制滞后而陷入发展瓶颈。尤其是中型互联网公司,在业务覆盖软件开发、线上营销与平台运营等多板块时,传统的管理模式往往导致目标断层…

完整教程:Java 反射机制核心类详解:Class、Constructor、Method、Field

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

Problems

Done QOJ #970 Best Subsequence $ _{6.3}$定义 \(f(\{a\},k)\) 为最小的 x 使得存在一个 \(a\) 的长度为 \(k\) 的子序列首尾相接以后每两个相邻向之和均 \(\le x\)。 给定数组 \(a\) 和 \(q\) 组询问,每组询问给定 …

vue网站禁止右键以及禁止打开控制台,检测到控制台停止运行

App.vue参考:<template> <div id="app" @contextmenu.prevent="handleContextMenu"> <router-view /> </div></template> <script> export default {…

2025年卡盘式自定心坡口机优质厂家权威推荐榜单:切管机/钢板坡口机/倒角机源头厂家精选

在管道工程与金属加工领域,一台高性能的卡盘式自定心坡口机已成为提升焊接质量与施工效率的关键装备。 本文将基于技术实力、生产能力、产品质量、市场表现及服务体系等多维度核心指标,为您呈现2025年卡盘式自定心坡…