图像去噪基于非局部均值(NLM)滤波图像去噪matlab源码
Posted Matlab走起
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了图像去噪基于非局部均值(NLM)滤波图像去噪matlab源码相关的知识,希望对你有一定的参考价值。
一、简介
1 NLM滤波原理
2 Pixelwise Implementation
3 Patchwise Implementation
-
function [output]=NLmeans(input,t,f,h) % 输入: 待平滑的图像 % t: 搜索窗口半径 % f: 相似性窗口半径 % h: 平滑参数 % NLmeans(ima,5,2,sigma); % 图像大小 [m n]=size(input); % 输出 Output=zeros(m,n); input2 = padarray(input,[f+t f+t],'symmetric');%边界作对称处理 % 高斯核 kernel = make_kernel(f); kernel = kernel / sum(sum(kernel)); h=h*h; for i=1:m for j=1:n i1 = i+ f+t;%原始图像的像素位置 (中心像素) j1 = j+ f+t; W1= input2(i1-f:i1+f , j1-f:j1+f);%小窗口 wmax=0; average=0; sweight=0; %rmin = max(i1-t,f+1); %rmax = min(i1+t,m+f); %smin = max(j1-t,f+1); %smax = min(j1+t,n+f); rmin=i1-t; rmax=i1+t; smin=j1-t; smax=j1+t; for r=rmin:1:rmax %大窗口 for s=smin:1:smax if(r==i1 && s==j1) continue; end; W2= input2(r-f:r+f , s-f:s+f); %大搜索窗口中的小相似性窗口 d = sum(sum(kernel.*(W1-W2).*(W1-W2))); w=exp(-d/h); %权重 if w>wmax wmax=w; %求最大权重 end sweight = sweight + w; %大窗口中的权重和 average = average + w*input2(r,s); end end average = average + wmax*input2(i1,j1); sweight = sweight + wmax; if sweight > 0 output(i,j) = average / sweight; else output(i,j) = input(i,j); end end end function nX = noise(varargin) % 图像加入噪声 % 传入参数依次为: % X - 待处理的图像 % type - 噪声类型 % variance/density - 高斯噪声的方差/椒盐噪声的密度(optional) % M - 控制噪声区域的模板(optional) % 参数默认值 variance = 0.01; %高斯噪声的方差 默认值为0.01 density = 0.05; %椒盐噪声的密度 默认值为0.05 M = ones(size(varargin{1})); %控制噪声区域的模板 默认对整个图像加噪声 X = varargin{1}; %待处理的图像 type = varargin{2}; %噪声类型 % 可选参数 if nargin>=3 variance = varargin{3}; density = varargin{3}; if nargin == 4 M = varargin{4}; end end
三、运行结果
四、备注
完整代码或者仿真咨询添加QQ1575304183
以上是关于图像去噪基于非局部均值(NLM)滤波图像去噪matlab源码的主要内容,如果未能解决你的问题,请参考以下文章
图像去噪基于matlab回归的非局部均值算法图像去噪含Matlab源码 1898期
图像去噪基于matlab改进非局部均值红外图像混合噪声含Matlab源码 1640期