BM3D的学习与Matlab实现

                                        BM3D的学习与Matlab的实现

 

         BM3D是2007年TIP的文章,题目是《Image Denoising by Sparse 3-D Transform-Domain Collaborative Filtering》。最近想尝试一下图像去噪,看看能否应用到项目中,顺便测试了一下效果,结果不是太理想,主要问题是时间,去噪效果还是可以的。担心以后找起来(实现)麻烦,就当做个笔记了。

1、论文篇

(1)    http://www.cs.tut.fi/~foi/GCF-BM3D/

(2) 《Comments on “Image Denoising by Sparse 3-D Transform-Domain Collaborative Filtering”

(3) 《An Analysis and Implementation of the BM3D Image Denoising Method

 

2、代码下载

(1)  Github搜索BM3D:https://github.com/search?q=BM3D&type=Repositories,选择Matlab版本

(2)  官网http://www.cs.tut.fi/~foi/GCF-BM3D/(含源码与测试图)

(3)  官网demohttp://demo.ipol.im/demo/l_bm3d/

 

3、原理(感谢下面几位博主的奉献)

(1)  BM3D(Block-Matching and 3D filtering)读后感

(2)   图像去噪算法原理-待完善

(3)  图像去噪重要文献整理(二)BM3D / LSSC

 

4、工程实现(以Matlab为例)

(1)  先看官网的demo,具体步骤如下:

(2)  运行官网提供的代码BM3D.m文件:               

 先上结果,这是论文中的结果,效果确实好:

(3)  自己测试一张图像时:

测试代码:

%% demo
clear all;clc;close all;

img = imread('noise.png');  % 测试图像,可更改
if length(size(img)) > 2
    img = rgb2gray(img);
end

figure(1),imshow(img);
y = im2double(img);
% randn('seed',0);
sigma=25/255;
z=y+sigma*randn(size(y));

y_est = BM3DSAPCA2009(z,sigma);
figure(2),imshow(y_est);

disp('end!');
%% performance evaluation
PSNR = 10*log10(1/mean((y(:)-y_est(:)).^2));
disp(['PSNR = ',num2str(PSNR)])
if exist('ssim_index')
    [mssim ssim_map] = ssim_index(y*255, y_est*255);
    disp(['SSIM = ',num2str(mssim)]);
end

        这张图的运行时间64s!!!没办法,效果确实是好,但是时间真心不短,(又想马儿想得快,又想马儿不吃草,哈哈)。BM3D的复杂之处在于,首先找相似块,其次是采用了两次block-wise estimate,复杂度相比NLM翻了1倍,且含有域变换操作,具体原理见上面的博客链接。类似其中一位博友所说,尽管计算机性能已经成百上千倍地提高,还是远不能满足很多算法的实时计算的需求,这很大程度上限制了这些算法的使用范围:用户无法处理一张照片需要等待长达几分钟的时间,因此,距离真正意义上的实用还是有一段距离。

评论 22
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值