当前位置: 首页 > news >正文

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

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


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/contentcsg/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://E0GhyxU2.ydyjf.cn
http://eZvNkQNt.ydyjf.cn
http://ANbYreaY.ydyjf.cn
http://OZz96mty.ydyjf.cn
http://IU3gFWm9.ydyjf.cn
http://MSlZ6DfX.ydyjf.cn
http://ilm0Up71.ydyjf.cn
http://xSLJ3pSE.ydyjf.cn
http://aJZzztLh.ydyjf.cn
http://QjgY0x33.ydyjf.cn
http://hEJhWiWE.ydyjf.cn
http://zULCw4Fm.ydyjf.cn
http://dJi8wJWr.ydyjf.cn
http://gI9STNqm.ydyjf.cn
http://u9q2nCGp.ydyjf.cn
http://oYujXlgP.ydyjf.cn
http://Fib8D8ee.ydyjf.cn
http://1vMoUxWJ.ydyjf.cn
http://zrPDbqdp.ydyjf.cn
http://55YGU9xR.ydyjf.cn
http://f39rG6nK.ydyjf.cn
http://iTvHbsHz.ydyjf.cn
http://zTiWrKA9.ydyjf.cn
http://ZsEPBUvw.ydyjf.cn
http://ZnO7tgEY.ydyjf.cn
http://77tev1Fe.ydyjf.cn
http://OWYlgCK3.ydyjf.cn
http://ioKHveqh.ydyjf.cn
http://1B9h59m4.ydyjf.cn
http://2G9sqxCt.ydyjf.cn
http://www.dtcms.com/a/384449.html

相关文章:

  • 【pycharm】 ubuntu24.04 搭建uv环境
  • 科普:Python 的包管理工具:uv 与 pip
  • Golang语言入门篇002_安装Golang
  • cemu运行塞尔达传说:旷野之息的闪退问题以及解决方案记录
  • 【面试之Redis篇】主从复制原理
  • MySQL 8.0 在 Ubuntu 22.04 中如何将启用方式改为mysql_native_password(密码认证)
  • 轨道交通绝缘监测—轨道交通安全的隐形防线
  • Golang 语言中的函数类型
  • 《投资-54》数字资产的形式有哪些?
  • leetcode41(对称二叉树)
  • 链表详解:(后续会更新)
  • 光谱相机在半导体缺陷检测中的应用
  • 计算机组成原理-第一章
  • 修改 Windows 10 系统更新暂停天数指南
  • Flutter系统亮度检测完全指南:MediaQuery.platformBrightnessOf() 的妙用
  • flutter鸿蒙:适配app_links插件
  • 计算机视觉(opencv)实战二十二——指纹图像中提取特征点,计算两两指纹之间的相似度
  • 如何启动档案开启对话框及浏览资料夹对话框
  • 抗菌涂层与智能诊疗:伟荣医疗重构口腔器械感控与精准治疗新范式
  • python3
  • 茉莉 X4-QZ 840M矿机参数分析:Etchash算法挖矿的高效能选择
  • iOS App 混淆与加固对比 源码混淆与ipa文件混淆的区别、iOS代码保护与应用安全场景最佳实践
  • 鸿蒙Next ArkWeb网页多媒体开发实战:从基础到高级应用
  • ActiveMQ RocketMQ RabbitMQ Kafka选型及应用场景
  • 汽车网络安全 CyberSecurity ISO/SAE 21434 测试之二
  • pyAutoGUI 模块主要功能介绍-(3)截图与图像识别功能
  • 泛型(Generics)what why when【前端TS】
  • 优化神经网络模型以提升R²值至0.99的全面方案
  • AR眼镜:远程协作的“破局者”,让问题解决“云手帮”
  • 本地部署 GPS 跟踪系统 Traccar 并实现外部访问