BM3D的学习与Matlab实现「建议收藏」

BM3D的学习与Matlab实现「建议收藏」                    BM3D的学习与Matlab的实现      BM3D是2007年TIP的文章,题目是《ImageDenoisingbySparse3-DTransform-DomainCollaborativeFiltering》。最近想尝试一下图像去噪,看看能否应用到项目中,顺便测试了一下效果,结果不…

大家好,又见面了,我是你们的朋友全栈君。

                                        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,具体步骤如下:

BM3D的学习与Matlab实现「建议收藏」

BM3D的学习与Matlab实现「建议收藏」

BM3D的学习与Matlab实现「建议收藏」

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

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

BM3D的学习与Matlab实现「建议收藏」

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

BM3D的学习与Matlab实现「建议收藏」

测试代码:

%% 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倍,且含有域变换操作,具体原理见上面的博客链接。类似其中一位博友所说,尽管计算机性能已经成百上千倍地提高,还是远不能满足很多算法的实时计算的需求,这很大程度上限制了这些算法的使用范围:用户无法处理一张照片需要等待长达几分钟的时间,因此,距离真正意义上的实用还是有一段距离。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/133866.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • matlab的meshgrid函数详解

    matlab的meshgrid函数详解函数形式[C,R]=meshgrid(c,r)初步解释首先需要明确的是参数c,r都是行向量,该函数将行向量c,r指定的域变换为数组C,R,这2个数组能用来指示有2个变量的函数和三维的图。输出数组C的每一行都是行向量c,输出数组R的每一列都是行向量r。例如我们需要形成一个二维函数,其元素是由坐标变量x和y的值的平方和。也就是f(x,y)=x^2+y^2这样的形式…

  • 软件工程之软件过程模型[通俗易懂]

    软件工程之软件过程模型[通俗易懂]软件过程模型软件过程模型习惯上也称为软件开发模型,它是软件开发全部过程、活动和任务的结构框架。瀑布模型:瀑布模型是将软件生存周期中的各个活动规定为依线性连接的若干阶段的模型,包括需求分析、设计、编码、测试、运行与维护。由前至后、相互衔接的固定次序,如同瀑布流水逐级下落。瀑布模型是以文档作为驱动、适合于软件需求很明确的软件项目的模型。V模型V模型是瀑布模型的一个变体。V模型提供了

    2022年10月30日
  • 通达OA 小飞鱼开发培训第四讲 工作流介绍(图文)[通俗易懂]

    通达OA 小飞鱼开发培训第四讲 工作流介绍(图文)

  • 开心农场最新外挂助手下载[通俗易懂]

    开心农场最新外挂助手下载[通俗易懂] “开心农场”辅助外挂使用说明:1.解压缩文件(本文件完全解压后只有876KB不占用多余空间)2.打开 这个图标www.vi128.com3.这时,在右下角会出现这个标志 然后双击它4.出现一个新的笔记5.在笔记主框内写上好友的名字(如果不好找也可以再加上编号)和将要成熟的作物6.写好后点击 右上角这个蓝色小闹钟的图标 7…

  • 一文让你彻底搞懂最小二乘法(超详细推导)「建议收藏」

    一文让你彻底搞懂最小二乘法(超详细推导)「建议收藏」1.要解决的问题因果关系,观测值与预测值

  • Python Qt GUI设计:5种事件处理机制(提升篇—3)

    Python Qt GUI设计:5种事件处理机制(提升篇—3)事件处理机制本身很复杂,是PyQt底层的知识点,当采用信号与槽机制处理不了时,才会考虑使用事件处理机制。

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号