【图像去躁】基于BM3D实现图像去噪matlab源码

一、 总览

BM3D是2007年TIP的文章,题目是Image denoising by sparse 3D transform-domain collaborative ltering,论文、项目的地址是http\://www.cs.tut.fi/\~foi/GCF-BM3D/,提供matlab代码;http://www.ipol.im/pub/art/2012/l-bm3d/为C++的实现,这篇论文里面有对BM3D实现的更为详细的说明。

处理灰度图的BM3D以及它的变体CBM3D(彩色图)、VBM3D(时域)是图像去噪领域公认的去噪效果(PSNR)最好的,而BM4D、VBM4D等也都是沿袭BM3D的基于块处理(block-wise estimate)的思想,但其计算时间复杂度极大,或许只能用于离线处理(offline),当然后续有文章进行优化(代码、算法),这里就不再提及。


这里写图片描述

找相似块,得到块集合


BM3D算是NLM(non-local mean)的升级版本,因为它主要用到了非局部块匹配的思想,首先找相似块,不同于传统NLM使用L2距离,它用了硬阈值线性变换(见节二-2)降低了L2距离的复杂度;找到相似块后,NLM是做一个均值处理,而BM3D则是将相似块域转换,提出Collaborative filtering降低相似块自身含有的噪声(NLM做均值,引入了相似块的噪声)(见节二-2),并在aggregation处对相似块加权处理(见节二-3),得到降噪后的目标块。

BM3D的复杂之处在于,首先找相似块,其次是采用了两次block-wise estimate,复杂度相比NLM翻了1倍,且含有域变换操作。

二、 算法说明

1. 流程图

这里写图片描述\ 分为两步,Basic estimate与Final estimate,两步除Collaborative filtering不同外,其余子步骤近似。其中:

  • S1 Basic estimate:

    • S11 Block-wise estimate

    • S111 Grouping 为目标块找到相似块,块集合无顺序限制;

    • S112 Collaborative hard-thresholding 使用某种域变换方法,得到“变换后的相似块集合”,采用协同(由相似块共同确定)硬阈值策略“弱化”相似块的噪声,后反变换回原始块域;

    • S12 Aggregation 加权平均相似块(S112处理后),叠加后得到basic estimate后的目标块;

  • S2 Final estimate:

    • S21 Block-wise estimate

    • S211 Grouping 使用S111步的块集合,以及已由S1处理后的图像重新计算块集合

    • S212 Collaborative Wiener filtering 域变换后,使用维纳滤波

    • S22 Aggregation

2. S111 Grouping 找相似块

本文使用L2距离判断,采用a normalized 2D linear transform与hard-thresholding对块距离进行预处理操作,公式如下:\ 这里写图片描述\ 因为含有噪声的图像,计算L2距离,噪声使两个相似块的差异变大,可能找到错误的相似块。\ 其中,

  • x为像素点,X为图像
  • 这里写图片描述目标块, 这里写图片描述搜索块
  • 这里写图片描述是S1中的块大小
  • 这里写图片描述硬阈值操作,阈值设为这里写图片描述
  • 这里写图片描述是归一化后的二维线性变换

根据距离就可以找到相似块集合,由式(5)所示,\ 这里写图片描述\ 其中,

  • 这里写图片描述确定是否相似的超参数
  • 这里写图片描述为 这里写图片描述的相似块集合

3. S112 Collaborative hard-thresholding 相似块降噪

此处使用归一化的3D线性变换(normalized 3D linear transform)这里写图片描述来降低相似块的噪声,然后使用反变换 这里写图片描述得到S112步处理后的相似块 这里写图片描述,如下式(6)所示,\ 这里写图片描述\ 其中,

  • 这里写图片描述为归一化的3D线性变换, 这里写图片描述为其反变换
  • 这里写图片描述硬阈值操作,阈值设为 这里写图片描述
  • 这里写图片描述 为处理后的相似块集合

a) 为什么要这么做

文中ⅡC中提到,传统方法,如NLM,由空域得到近似块,然后对近似块的每个像素一一对应去平均,作为目标块每个像素的值。但是,上述策略对于如下场景并不合适:

i. 某些相似块拥有的噪声更小,相比其它相似块,该块的“权重”应更大,而不是简单取平均

ii. 相似块图像信息冗余,从空域上看,两个有重叠区域的相似块,简单平均会造成目标块信息重复。

因此采用“Collaborative ltering by shrinkage in transform domain”的方式,能够加强相似块的稀疏性,同时降低相似块的噪声。\ 这里写图片描述

4. S12 Aggregation 加权生成目标块

同样是为了降低相似块的信息冗余与自身噪声,所以我认为与S112的目的一致。加权平均后得到目标块的像素值,如式(12)(10)所示:\ 这里写图片描述

这里写图片描述

其中,

  • 这里写图片描述为权重
  • 这里写图片描述 为公式(6)硬阈值操作后的非0系数的个数
  • 这里写图片描述,在实际搜索相似块时,需要对原图padding,由padding得到的相似块不纳入加权平均中

5. S211 Grouping

由S1初步处理后的图像,重新计算L2距离,得到相似块集合,此处不再使用硬阈值处理,公式如式(7)所示:

这里写图片描述

其中,

  • 这里写图片描述为S2步的判断是否相似的超参数
  • 这里写图片描述为相似块集合

6. S212 Collaborative Wiener filtering

由S211步得到的相似块集合 这里写图片描述,经过某个域变换后,使用维纳收缩系数(Wiener shrinkage coefcients) 这里写图片描述加权,后经过反变换,得到块集合 这里写图片描述。如式(9)、(8)所示。

这里写图片描述\ 这里写图片描述

7. S22 Aggregation

S12已经说明过了,S22与S12近似,公式如式(11)所示,而最终结果,与式(9)的计算步骤一致。

这里写图片描述

三、 结论

1. 加速

在实际操作中,为加快BM3D的计算速度,在寻找相似块的步骤后,得到的块实际上已经进行了2D变换处理,然后再加上一个1D变换(文中使用1D-Haar离散小波变换),成为3D变换,使用2D+1D的变换方法替代直接3D变换。

2. 难点

文中提到的2D变换与各种超参数,并没有一个确定值,对于真实视频去噪,使用的2D变换与超参数可能与文章实验设置不同,因此需要进行微调,也就是需要大量实验的积累。

最终的去噪结果如下图所示,可以发现,噪声被很好地去除了,图像边缘保留完整,图像纹理得到了很好的还原。\ 这里写图片描述\ 但这些都是自行添加高斯白噪声产生的测试图像,若实际运用在图像降噪中,原始图像不会有这么多噪声,因此就不需要BM3D两步去噪。那么可以将BM3D的两步拆开,采用前步的硬阈值、2D变换寻找相似块、1D变换升至3D域再加权平均,或后步直接使用维纳滤波,或许就已经有很好的效果了。

下一步会总结BM4D、VBM4D的东西。

四、 C-BM3D

针对彩色图,本文将图像的RGB色彩空间转换为YUV色彩空间,因为YUV的Y分量拥有较其余分量更多的图像信息(边缘、材质、纹理等),并且拥有更高的SNR(信噪比),而U、V分量拥有更多的低频信息。\ 因此对于C-BM3D,本文使用Y分量搜寻相似块,U、V分量使用Y分量的相似块位置信息。\ 这里写图片描述\ 可以仿照他转换色彩空间、从Y分量搜索相似块的方法,来对彩色图像进行降噪处理。

五、 VBM3D

对于视频去噪,一是可以将视频转化为单帧图像,然后使用图像去噪算法对单帧进行处理,然后融合还原成已去噪的视频;二是根据视频前后帧信息,某个像素点,前帧没有噪声,或噪声较少,那么就可以作为后帧的值,但视频中物体是运动的,如果按前后帧的同一位置的像素处理是不合理的,因此会引入运动补偿、跟踪的算法,对于实时处理来说,条件就有点苛刻。

VBM3D不含运动补偿,对中间帧的目标块搜索相似块,搜索对象是前后帧与中间帧,提出了predictive-search block-matching(PS-BM) ,用于前后帧的相似块搜索。具体而言,PS-BM,先以中间帧的目标块为中心、搜索半径NS的区域寻找相似块,然后在该块对应的前后帧的位置为中心、搜索半径NPR的区域寻找相似块,中间帧、前后帧的相似块构成块集合。其余步骤与BM3D无异。\ 这里写图片描述

html  

``` clear all;clc ;

pauseTime = 1;

filePaths = 'cameraman256.png';

noise_leval = [10,15,20,25,30,35,40,45,50,55,60,65,70];

for i = 1:length(noise_leval)

PSNRs = [];

SSIMs = [];

sigma = noise_leval(i);

for j = 1:length(filePaths)

y = imread(filePaths);

if length(size(y)) > 2

y = rgb2gray(y);

end

y = im2double(y);

z = y + (sigma/255)*randn(size(y));

% 生成噪声图像

[PSNR,SSIM,y_est] = BM3D(y, z, sigma, 'np', 0);

PSNRs(j) = PSNR;

SSIMs(j) = SSIM;

imshow(cat(2,im2uint8(y),im2uint8(z),im2uint8(y_est)));

title([num2str(sigma),num2str(PSNR,'%2.2f'),'dB',' ',num2str(SSIMs(j),'%2.4f')])

drawnow;

pause(pauseTime)

end

disp(['sigma:', sigma,' psnr:', mean(PSNRs),' ssim:', mean(SSIMs)]);

end ```

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
【项目介绍】 基于MATLAB实现传统图像去噪算法深度学习DnCNN模型图像去噪源码+项目说明.zip 该资源内项目代码都是经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载使用,也适合小白学习进阶, 或者实际项目借鉴参考! 当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。如果基础还行,也可在此代码基础上进行修改,以实现其他功能。 1. 项目介绍 # 1.1 项目的背景 该项目是为了研究基于深度卷积神经网络的图像去噪算法,是利用DnCNN模型,但是为了比较该算法的效果,另外实现了四种传统的图像去噪算法(均值滤波、中值滤波、非局部均值滤波NLM和三维块匹配滤波BM3D)作为对照组。 # 1.2 噪声强度和类型 项目中实现五种算法对噪声强度为10,15,20...60,65,70的高斯白噪声进行处理。 # 1.3 评价指标 图像去噪后,如何评估算法去噪效果的好坏呢?项目中采用峰值信噪比PSNR和结构相似性SSIM作为评价指标。一般来说,PSNR越大,去噪效果越好。SSIM取值为0到1,越接近1,表示效果越好。 2. 数据集介绍 该项目中只是对Set12数据集进行处理,也就是项目中的Set12目录下的12张图片。如果觉得数据量不够充分,可以自行添加其他数据集,在代码中修改一下数据集的目录即可。 3. 代码介绍 对于均值滤波、中值滤波、和NLM,MATLAB都已经实现了,所以我们直接调用MATLAB自带的函数就可以。 BM3D和DnCNN的代码都是从别人那儿clone下来,做了一些小的修改。 五种算法都是对Set12数据集进行去噪,去噪的结果并没有保存,只是在运行过程中能看到去噪前和去噪后的图像对比,感兴趣的朋友可以自己将图像保存下来观察。 4. 代码运行 五种算法分别在五个不同的目录中,所以你只需要进行对应的目录,运行代码即可。 + 均值滤波、中值滤波、NLM算法对应的目录分别为avefilter、medainfilter、nlm-image-denoising。每个目录下只有一个.m文件,所以只需要运行对应的文件即可。 + BM3D对应的目录是BM3D,运行该目录下的main.m程序即可。 + DnCNN对应的目录是DnCNN,运行该目录下的Demo_test_DnCNN.m程序即可,该算法目录中对应的还有好几个代码,都是原项目中有的,我没有动过,感兴趣的朋友可以自己看看。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Matlab科研辅导帮

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值