【图像去噪】基于非局部均值(NLM)滤波图像去噪含Matlab源码

 1 简介

图像在获取和传输过程中,不可避免地受到外部和内部的干扰,常常因为各种因素的影响而被加入很多噪声,这十分严重的影响了人们对传输后图像信息的读取。因此通过一定方法将被噪声污染的图像进行去噪处理一直是现代图像研究中重要的问题,受到越来越多研究者的关注与重视。A.Buades等基于各经典去噪算法,如领域滤波、全差分滤波、异性扩散等提出非局部均值滤波(Non-Local means,NLM)算法的模型,同时该算法引入图像去噪。实践证实该模型去噪效果佳。NLM的原理是运用图像内部冗余信息,结合权重系数加权平均计算各相似邻域像素灰度值,估计噪声图像像素点灰度值。本文通过研究非局部均值滤波的算法,改进了算法的两个关键问题:加权核函数的选定和相似度的衡量。非局部均值滤波算法中的相似度衡量是由像素邻域之间的高斯加权欧氏距离决定的,同时在加权核函数的选择上使用的是指数型函数。这使得该算法仅能够有效的去除平滑区域的噪声,而未能有效去除纹理、边缘区域噪声。因此高斯加权距离确定权重系数和指数型加权核函数具有一定的局限性。针对加权核函数与相似度衡量两个方面问题本文进行了改进。对于原始的指数型加权核函数存在的权值分配不均问题,提出了更加合适的权值分配函数,使得新的权值分配在相似度高的地方获得较高的权值,相似度低的地方获得较小,甚至是为零的权值,并且保证了在相似度高向相似度低的过度区域,权值迅速衰减。而针对相似性衡量的问题,引入了结构相似度算法,结合原有的欧氏距离判断相似度,使得相似性的衡量更加的准确。通过对测试图像的加噪与对比去噪实验,仿真实验结果说明,改进算法有效提高了原算法的去噪性能,而且在边缘纹理部分也能更好的保持图片原始信息。

2 部分代码


function  [sigma_tb sigma_est dis_map dis_map1] = noise_estimation(im)


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%% Original Noise level  estimation

[dis_map,sigma_tb] = NL_distance(8,16,2,39,single(32),double(im));

sigma_est = double(sigma_tb);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%% Refined Noise level estimation

if sigma_tb > 70 % && sigma_tb <= 150
[dis_map1,sigma_tb1] = NL_distance_refine(8,16,2,39,single(32),double(im),double(dis_map),double(sigma_tb));
sigma_est  = double(sigma_tb1);
elseif sigma_tb <= 70
[dis_map1,sigma_tb1] = NL_distance_refine(8,16,2,39,single(32),double(im),double(dis_map),double(sigma_tb));
% [dis_map1,sigma_tb1] = NL_distance_refine(8,16,2,39,single(32),double(im),double(dis_map1),double(sigma_tb1));
% [dis_map1,sigma_tb1] = NL_distance_refine(8,16,2,39,single(32),double(im),double(dis_map1),double(sigma_tb1));
[dis_map1,sigma_est] = NL_distance_refine(8,16,2,39,single(32),double(im),double(dis_map1),double(sigma_tb1));
end

function snr=SNR(I,In)
% 计算信号噪声比
% I : 原始信号
% In : 加噪信号
% snr=10*log10(sigma2(I2)/sigma2(I2-I1))

[row,col,nchannel]=size(I);

snr=0;
if nchannel==1 %灰度图
Ps=sum(sum((I-mean(mean(I))).^2));%信号强度
Pn=sum(sum((I-In).^2));%噪声强度
snr=10*log10(Ps/Pn);
elseif nchannel==3 %彩色图
for i=1:3
Ps=sum(sum((I(:,:,i)-mean(mean(I(:,:,i)))).^2));%信号强度
Pn=sum(sum((I(:,:,i)-In(:,:,i)).^2));%噪声强度
snr=snr+10*log10(Ps/Pn);
end
snr=snr/3;
end


 

3 仿真结果

4 参考文献

Yingkun Hou, Jun Xu, Mingxia Liu, Guanghai Liu, Li Liu, Fan Zhu, and Ling Shao, "NLH: A Blind Pixel-level Non-local Method for Real-world Image Denoising", IEEE Transactions on Image Processing, vol. 29, pp. 5121-5135, 2020.

博主简介:擅长智能优化算法、神经网络预测、信号处理、元胞自动机、图像处理、路径规划、无人机等多种领域的Matlab仿真,相关matlab代码问题可私信交流。

部分理论引用网络文献,若有侵权联系博主删除。

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

matlab科研助手

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

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

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

打赏作者

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

抵扣说明:

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

余额充值